$ svn merge -c 86892 https://bwilson@llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk --- Merging r86892 into '.': U gcc/llvm-abi.h llvm-svn: 86894
diff --git a/llvm-gcc-4.2/gcc/llvm-abi.h b/llvm-gcc-4.2/gcc/llvm-abi.h index 998b3e4..6937a49 100644 --- a/llvm-gcc-4.2/gcc/llvm-abi.h +++ b/llvm-gcc-4.2/gcc/llvm-abi.h
@@ -629,19 +629,18 @@ Elts.push_back(ATy); } - if (Size >= 4) { + // Put any left over bytes into one last register. This target-independent + // code does not know the size of the argument registers, so use the + // smallest size that will work. + if (Size > 4) { + Elts.push_back(Type::getInt64Ty(getGlobalContext())); + } else if (Size > 2) { Elts.push_back(Type::getInt32Ty(getGlobalContext())); - Size -= 4; - } - if (Size >= 2) { + } else if (Size > 1) { Elts.push_back(Type::getInt16Ty(getGlobalContext())); - Size -= 2; - } - if (Size >= 1) { + } else { Elts.push_back(Type::getInt8Ty(getGlobalContext())); - Size -= 1; } - assert(Size == 0 && "Didn't cover value?"); const StructType *STy = StructType::get(getGlobalContext(), Elts, false); unsigned i = 0; @@ -1073,19 +1072,18 @@ Elts.push_back(ATy); } - if (Size >= 4) { + // Put any left over bytes into one last register. This target-independent + // code does not know the size of the argument registers, so use the + // smallest size that will work. + if (Size > 4) { + Elts.push_back(Type::getInt64Ty(getGlobalContext())); + } else if (Size > 2) { Elts.push_back(Type::getInt32Ty(getGlobalContext())); - Size -= 4; - } - if (Size >= 2) { + } else if (Size > 1) { Elts.push_back(Type::getInt16Ty(getGlobalContext())); - Size -= 2; - } - if (Size >= 1) { + } else { Elts.push_back(Type::getInt8Ty(getGlobalContext())); - Size -= 1; } - assert(Size == 0 && "Didn't cover value?"); const StructType *STy = StructType::get(getGlobalContext(), Elts, false); unsigned i = 0;