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