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

Devang Patel dpatel at apple.com
Tue Apr 15 11:11:08 PDT 2008


Author: dpatel
Date: Tue Apr 15 13:11:07 2008
New Revision: 49732

URL: http://llvm.org/viewvc/llvm-project?rev=49732&view=rev
Log:
Refactor code.
No expected change in behavior.

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=49732&r1=49731&r2=49732&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 13:11:07 2008
@@ -744,6 +744,32 @@
   return llvm_x86_64_should_pass_aggregate_in_memory(TreeType, Mode);
 }
 
+/* llvm_x86_64_type_needs_multiple_regs - Return number of register classes
+   need by TREETYPE. Return 0 if TREETYPE does not need multiple registers. 
+   This helper routine is used to determine LLVM type of the function 
+   arguments as well as return values.  */
+static int
+llvm_x86_64_type_needs_multiple_regs(enum machine_mode Mode, tree TreeType,
+                                     enum x86_64_reg_class Class[MAX_CLASSES]) {
+  int NumClasses = ix86_ClassifyArgument(Mode, TreeType, Class, 0);
+  if (!NumClasses)
+    return 0;
+
+  for (int i = 0; i < NumClasses; ++i) {
+    switch (Class[i]) {
+    case X86_64_X87_CLASS:
+    case X86_64_X87UP_CLASS:
+    case X86_64_COMPLEX_X87_CLASS:
+      return 0;
+    case X86_64_NO_CLASS:
+      return 0;
+    default:
+      break;
+    }
+  }
+  return NumClasses;
+}
+
 /* Target hook for llvm-abi.h. It returns true if an aggregate of the
    specified type should be passed in a number of registers of mixed types.
    It also returns a vector of types that correspond to the registers used
@@ -755,7 +781,7 @@
   enum machine_mode Mode = ix86_getNaturalModeForType(TreeType);
   HOST_WIDE_INT Bytes =
     (Mode == BLKmode) ? int_size_in_bytes(TreeType) : (int) GET_MODE_SIZE(Mode);
-  int NumClasses = ix86_ClassifyArgument(Mode, TreeType, Class, 0);
+  int NumClasses = llvm_x86_64_type_needs_multiple_regs(Mode, TreeType, Class);
   if (!NumClasses)
     return false;
  





More information about the llvm-commits mailing list