Adjust preceding patch, it seems INTEGER_SI_CLASS
can be returned for values too big to fit in an SI.
Live and learn. Fixes regression introduced into
struct-layout-1.
llvm-svn: 51973
diff --git a/llvm-gcc-4.2/gcc/config/i386/llvm-i386.cpp b/llvm-gcc-4.2/gcc/config/i386/llvm-i386.cpp
index c1e90b4..27d38b8 100644
--- a/llvm-gcc-4.2/gcc/config/i386/llvm-i386.cpp
+++ b/llvm-gcc-4.2/gcc/config/i386/llvm-i386.cpp
@@ -1315,16 +1315,17 @@
enum machine_mode Mode = ix86_getNaturalModeForType(type);
int NumClasses = ix86_ClassifyArgument(Mode, type, Class, 0);
*DontCheckAlignment= true;
- if (NumClasses == 1 && Class[0] == X86_64_INTEGER_CLASS) {
+ if (NumClasses == 1 && (Class[0] == X86_64_INTEGER_CLASS ||
+ Class[0] == X86_64_INTEGERSI_CLASS)) {
// one int register
- *size = 8;
- return true;
- }
- if (NumClasses == 1 && Class[0] == X86_64_INTEGERSI_CLASS) {
- // one shorter-than-64-bits register
HOST_WIDE_INT Bytes =
(Mode == BLKmode) ? int_size_in_bytes(type) : (int) GET_MODE_SIZE(Mode);
- *size = Bytes;
+ if (Bytes>4)
+ *size = 8;
+ else if (Bytes>2)
+ *size = 4;
+ else
+ *size = Bytes;
return true;
}
if (NumClasses == 2 && (Class[0] == X86_64_INTEGERSI_CLASS ||