Author: evancheng
Date: Tue Jan 15 02:18:25 2008
New Revision: 46004

URL: http://llvm.org/viewvc/llvm-project?rev=46004&view=rev
Log:
Make use of existing gcc facility to determine if an aggregate argument should 
be passed ByVal in x86-64 mode.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/i386/i386.c
    llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
    llvm-gcc-4.2/trunk/gcc/llvm-abi.h

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

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/i386.c (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.c Tue Jan 15 02:18:25 2008
@@ -21524,4 +21524,18 @@
   return DW_EH_PE_absptr;
 }
 
+
+/* APPLE LOCAL begin LLVM */
+
+/* Target hook for llvm-abi.h. It returns true if an aggregate of the
+   specified type should be passed in memory. This is only called for
+   x86-64. */
+int llvm_x86_64_should_pass_aggregate_in_memory(tree type) {
+  int needed_intregs, needed_sseregs;
+  enum machine_mode mode = type_natural_mode (type);
+  return !examine_argument(mode, type, 1, &needed_intregs, &needed_sseregs);
+}
+
+/* APPLE LOCAL end LLVM */
+
 #include "gt-i386.h"

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h?rev=46004&r1=46003&r2=46004&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Tue Jan 15 02:18:25 
2008
@@ -62,8 +62,11 @@
     }                                                           \
   }
 
+extern int llvm_x86_64_should_pass_aggregate_in_memory(tree);
+
 #define LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X)          \
-  (!TARGET_64BIT)
+  ((!TARGET_64BIT)                                              \
+  ? true : llvm_x86_64_should_pass_aggregate_in_memory(X))
 
 /* LLVM LOCAL end (ENTIRE FILE!)  */
 

Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-abi.h?rev=46004&r1=46003&r2=46004&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-abi.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-abi.h Tue Jan 15 02:18:25 2008
@@ -131,7 +131,7 @@
 #endif
 
 // LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR - Return true if this aggregate
-// value should be passed by reference by passing its address with the byval
+// value should be passed by value, i.e. passing its address with the byval
 // attribute bit set. The default is false.
 #ifndef LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X)
 #define LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X) \


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to