[llvm-commits] [llvm-gcc-4.2] r46004 - in /llvm-gcc-4.2/trunk/gcc: config/i386/i386.c config/i386/llvm-i386-target.h llvm-abi.h

2008-01-15 Thread Evan Cheng
Author: evancheng
Date: Tue Jan 15 02:18:25 2008
New Revision: 46004

URL: http://llvm.org/viewvc/llvm-project?rev=46004view=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=46004r1=46003r2=46004view=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=46004r1=46003r2=46004view=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=46004r1=46003r2=46004view=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


Re: [llvm-commits] [llvm-gcc-4.2] r46004 - in /llvm-gcc-4.2/trunk/gcc: config/i386/i386.c config/i386/llvm-i386-target.h llvm-abi.h

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

Nice.

 +/* 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);

Please document what this is doing:

/* if examine_argument says that this arg takes 0 registers, it is  
passed in memory, pass with byval. */

or something.

 = 
 = 
 = 
 = 
 = 
 = 
 = 
 = 
 ==
 --- 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))

How about: (!TARGET_64BIT ||  
llvm_x86_64_should_pass_aggregate_in_memory(X))

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