[llvm] r320106 - Temporarily revert "[PowerPC] Allow tail calls of fastcc functions from C CallingConv functions."
Eric Christopher via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 7 14:26:19 PST 2017
Author: echristo
Date: Thu Dec 7 14:26:19 2017
New Revision: 320106
URL: http://llvm.org/viewvc/llvm-project?rev=320106&view=rev
Log:
Temporarily revert "[PowerPC] Allow tail calls of fastcc functions from C CallingConv functions."
It is causing sanitizer failures on llvm tests in a bootstrapped compiler. No bot link since it's currently down, but following up to get the bot up.
This reverts commit r319218.
Modified:
llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
llvm/trunk/test/CodeGen/PowerPC/duplicate-returns-for-tailcall.ll
Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=320106&r1=320105&r2=320106&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Thu Dec 7 14:26:19 2017
@@ -4397,18 +4397,13 @@ hasSameArgumentList(const Function *Call
static bool
areCallingConvEligibleForTCO_64SVR4(CallingConv::ID CallerCC,
CallingConv::ID CalleeCC) {
- // tail calls are possible with fastcc and ccc.
- auto isTailCallableCC = [] (CallingConv::ID CC){
- return CC == CallingConv::C || CC == CallingConv::Fast;
- };
- if (!isTailCallableCC(CallerCC) || !isTailCallableCC(CalleeCC))
+ // Tail or Sibling call optimization (TCO/SCO) needs callee and caller to
+ // have the same calling convention.
+ if (CallerCC != CalleeCC)
return false;
- // We can safely tail call both fastcc and ccc callees from a c calling
- // convention caller. If the caller is fastcc, we may have less stack space
- // then a non-fastcc caller with the same signature so disable tail-calls in
- // that case.
- return CallerCC == CallingConv::C || CallerCC == CalleeCC;
+ // Tail or Sibling calls can be done with fastcc/ccc.
+ return (CallerCC == CallingConv::Fast || CallerCC == CallingConv::C);
}
bool
Modified: llvm/trunk/test/CodeGen/PowerPC/duplicate-returns-for-tailcall.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/duplicate-returns-for-tailcall.ll?rev=320106&r1=320105&r2=320106&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/duplicate-returns-for-tailcall.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/duplicate-returns-for-tailcall.ll Thu Dec 7 14:26:19 2017
@@ -42,10 +42,10 @@ if.end4:
if.then6: ; preds = %if.end4
%call7 = tail call fastcc signext i32 @call3(i32 signext %a, i32 signext %b, i32 signext %c)
br label %return
-; tail calling a fastcc function from a ccc function is supported.
+; No duplication here because the calling convention mismatch means we won't tail-call
; CHECK_LABEL: if.then13:
-; CHECK: %[[T2:[a-zA-Z0-9]+]] = tail call fastcc signext i32 @call3
-; CHECK-NEXT: ret i32 %[[T2]]
+; CHECK: tail call fastcc signext i32 @call3
+; CHECK-NEXT: br
return: ; preds = %if.end4, %if.then6, %if.then2, %if.then
%retval.0 = phi i32 [ %call, %if.then ], [ %call3, %if.then2 ], [ %call7, %if.then6 ], [ %c, %if.end4 ]
More information about the llvm-commits
mailing list