[cfe-commits] r147986 - in /cfe/trunk: lib/CodeGen/TargetInfo.cpp test/CodeGen/mips64-padding-arg.c

Akira Hatanaka ahatanaka at mips.com
Wed Jan 11 17:10:09 PST 2012


Author: ahatanak
Date: Wed Jan 11 19:10:09 2012
New Revision: 147986

URL: http://llvm.org/viewvc/llvm-project?rev=147986&view=rev
Log:
Take into account the pointer to an aggregate that is passed as a hidden
argument when Offset is initialized.


Modified:
    cfe/trunk/lib/CodeGen/TargetInfo.cpp
    cfe/trunk/test/CodeGen/mips64-padding-arg.c

Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=147986&r1=147985&r2=147986&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Wed Jan 11 19:10:09 2012
@@ -3248,8 +3248,12 @@
 }
 
 void MipsABIInfo::computeInfo(CGFunctionInfo &FI) const {
-  FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
-  uint64_t Offset = 0;
+  ABIArgInfo &RetInfo = FI.getReturnInfo();
+  RetInfo = classifyReturnType(FI.getReturnType());
+
+  // Check if a pointer to an aggregate is passed as a hidden argument.  
+  uint64_t Offset = RetInfo.isIndirect() ? 8 : 0;
+
   for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end();
        it != ie; ++it)
     it->info = classifyArgumentType(it->type, Offset);

Modified: cfe/trunk/test/CodeGen/mips64-padding-arg.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/mips64-padding-arg.c?rev=147986&r1=147985&r2=147986&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/mips64-padding-arg.c (original)
+++ cfe/trunk/test/CodeGen/mips64-padding-arg.c Wed Jan 11 19:10:09 2012
@@ -29,3 +29,15 @@
   foo4(1, 2, a0, a1);
 }
 
+// Insert padding after hidden argument.
+//
+// CHECK: define void @foo5(%struct.S0* noalias nocapture sret %agg.result, i64, fp128 %a0)
+// CHECK: call void @foo6(%struct.S0* sret %tmp, i32 1, i32 2, i64 undef, fp128 %a0)
+// CHECK: declare void @foo6(%struct.S0* sret, i32, i32, i64, fp128)
+
+extern S0 foo6(int, int, long double);
+
+S0 foo5(long double a0) {
+  foo6(1, 2, a0);
+}
+





More information about the cfe-commits mailing list