Revert "Don't count inreg params when mangling fastcall functions"
authorReid Kleckner <reid@kleckner.net>
Thu, 23 Oct 2014 17:50:42 +0000 (17:50 +0000)
committerReid Kleckner <reid@kleckner.net>
Thu, 23 Oct 2014 17:50:42 +0000 (17:50 +0000)
This reverts commit r214981.

I'm not sure what I was thinking when I wrote this. Testing with MSVC
shows that this function is mangled to '@f@8':
  int __fastcall f(int a, int b);

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220492 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/Mangler.cpp
test/CodeGen/X86/byval-callee-cleanup.ll
test/CodeGen/X86/musttail-indirect.ll

index 575141aed85bdf1f74d9283607a278375fd325bc..bfed3e39f4edb8448001a3d538c79554ae75778b 100644 (file)
@@ -72,9 +72,6 @@ static void AddFastCallStdCallSuffix(raw_ostream &OS, const Function *F,
   unsigned ArgWords = 0;
   for (Function::const_arg_iterator AI = F->arg_begin(), AE = F->arg_end();
        AI != AE; ++AI) {
-    // Skip arguments in registers to handle typical fastcall lowering.
-    if (F->getAttributes().hasAttribute(AI->getArgNo() + 1, Attribute::InReg))
-      continue;
     Type *Ty = AI->getType();
     // 'Dereference' type in case of byval or inalloca parameter attribute.
     if (AI->hasByValOrInAllocaAttr())
index d2009a8ed968e32401417d26d6566200d5cfbbb8..8e059d4334468d562f02c184d780f8a64023f782 100644 (file)
@@ -23,5 +23,5 @@ define x86_thiscallcc void @g(i8* %this, %struct.Six* byval %a) {
 define x86_fastcallcc void @h(i32 inreg %x, i32 inreg %y, %struct.Six* byval %a) {
   ret void
 }
-; CHECK-LABEL: @h@8:
+; CHECK-LABEL: @h@16:
 ; CHECK: retl $8
index f1286181ee521db5c7a41fbcc4faedab5db1c4f6..9d21b5ea5d528add6f2e1c7c46b7c75a56232b8b 100644 (file)
@@ -109,7 +109,7 @@ entry:
   ret i32 %3
 }
 
-; CHECK-LABEL: @fastcall_thunk@4:
+; CHECK-LABEL: @fastcall_thunk@8:
 ; CHECK-NOT: mov %{{.*}}, {{.*(.*esp.*)}}
 ; CHECK: jmpl
 ; CHECK-NOT: ret