$ 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;