$ svn merge -c 87052 https://bwilson@llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk --- Merging r87052 into '.': U gcc/llvm-abi.h llvm-svn: 88669
diff --git a/llvm-gcc-4.2/gcc/llvm-abi.h b/llvm-gcc-4.2/gcc/llvm-abi.h index 6937a49..998b3e4 100644 --- a/llvm-gcc-4.2/gcc/llvm-abi.h +++ b/llvm-gcc-4.2/gcc/llvm-abi.h
@@ -629,18 +629,19 @@ Elts.push_back(ATy); } - // 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) { + if (Size >= 4) { Elts.push_back(Type::getInt32Ty(getGlobalContext())); - } else if (Size > 1) { - Elts.push_back(Type::getInt16Ty(getGlobalContext())); - } else { - Elts.push_back(Type::getInt8Ty(getGlobalContext())); + Size -= 4; } + if (Size >= 2) { + Elts.push_back(Type::getInt16Ty(getGlobalContext())); + Size -= 2; + } + if (Size >= 1) { + 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; @@ -1072,18 +1073,19 @@ Elts.push_back(ATy); } - // 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) { + if (Size >= 4) { Elts.push_back(Type::getInt32Ty(getGlobalContext())); - } else if (Size > 1) { - Elts.push_back(Type::getInt16Ty(getGlobalContext())); - } else { - Elts.push_back(Type::getInt8Ty(getGlobalContext())); + Size -= 4; } + if (Size >= 2) { + Elts.push_back(Type::getInt16Ty(getGlobalContext())); + Size -= 2; + } + if (Size >= 1) { + 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;