diff --git a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp --- a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp +++ b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp @@ -143,6 +143,7 @@ } break; } + case Instruction::ICmp: case Instruction::Load: { // The result of a load is not alloca-derived (unless an alloca has // otherwise escaped, but this is a local analysis). diff --git a/llvm/test/Transforms/TailCallElim/basic.ll b/llvm/test/Transforms/TailCallElim/basic.ll --- a/llvm/test/Transforms/TailCallElim/basic.ll +++ b/llvm/test/Transforms/TailCallElim/basic.ll @@ -245,7 +245,7 @@ ; Test that using an alloca in a icmp does not escape it define void @test16() { ; CHECK-LABEL: @test16 -; CHECK-NOT: tail call void @noarg +; CHECK: tail call void @noarg ; CHECK-NOT: tail call void @use entry: %alloca = alloca [100 x i32]