[llvm] r256328 - [OperandBundles] Have TailCallElim play nice with operand bundles
David Majnemer via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 23 01:58:44 PST 2015
Author: majnemer
Date: Wed Dec 23 03:58:43 2015
New Revision: 256328
URL: http://llvm.org/viewvc/llvm-project?rev=256328&view=rev
Log:
[OperandBundles] Have TailCallElim play nice with operand bundles
A call site's use of a Value might not correspond to an argument
operand but to a bundle operand.
This fixes PR25928.
Modified:
llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp
llvm/trunk/test/Transforms/TailCallElim/basic.ll
Modified: llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp?rev=256328&r1=256327&r2=256328&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp Wed Dec 23 03:58:43 2015
@@ -197,8 +197,8 @@ struct AllocaDerivedValueTracker {
case Instruction::Call:
case Instruction::Invoke: {
CallSite CS(I);
- bool IsNocapture = !CS.isCallee(U) &&
- CS.doesNotCapture(CS.getArgumentNo(U));
+ bool IsNocapture =
+ CS.isDataOperand(U) && CS.doesNotCapture(CS.getDataOperandNo(U));
callUsesLocalStack(CS, IsNocapture);
if (IsNocapture) {
// If the alloca-derived argument is passed in as nocapture, then it
Modified: llvm/trunk/test/Transforms/TailCallElim/basic.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/TailCallElim/basic.ll?rev=256328&r1=256327&r2=256328&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/TailCallElim/basic.ll (original)
+++ llvm/trunk/test/Transforms/TailCallElim/basic.ll Wed Dec 23 03:58:43 2015
@@ -188,3 +188,13 @@ define void @test11() {
; CHECK: call void @test11_helper2
ret void
}
+
+; PR25928
+define void @test12() {
+entry:
+; CHECK-LABEL: @test12
+; CHECK: {{^ *}} call void undef(i8* undef) [ "foo"(i8* %e) ]
+ %e = alloca i8
+ call void undef(i8* undef) [ "foo"(i8* %e) ]
+ unreachable
+}
More information about the llvm-commits
mailing list