[llvm-commits] [llvm-gcc-4.2] r49746 - /llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp

Devang Patel dpatel at apple.com
Tue Apr 15 15:18:41 PDT 2008


Author: dpatel
Date: Tue Apr 15 17:18:40 2008
New Revision: 49746

URL: http://llvm.org/viewvc/llvm-project?rev=49746&view=rev
Log:
Handle test cases from gcc.target/x86-64/abi/test_struct_return.c


Modified:
    llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp?rev=49746&r1=49745&r2=49746&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp Tue Apr 15 17:18:40 2008
@@ -843,6 +843,15 @@
           Elts.push_back(Type::DoubleTy);
           Elts.push_back(Type::DoubleTy);
           Bytes -= 16;
+        } else if (Class[i+1] == X86_64_SSEDF_CLASS && Bytes == 16) {
+          // struct {float f[2]; double d; } should be returned in SSE registers.
+          Elts.push_back(Type::DoubleTy);
+          Elts.push_back(Type::DoubleTy);
+        } else if (Class[i+1] == X86_64_INTEGER_CLASS) {
+          // struct { float f[2]; char c; } should be returned in SSE(low)
+          // and INT (high).
+          Elts.push_back(VectorType::get(Type::FloatTy, 2));
+          Elts.push_back(Type::DoubleTy);
         } else
           assert(0 && "Not yet handled!");
         ++i; // Already handled the next one.





More information about the llvm-commits mailing list