Index: lib/Transforms/IPO/PassManagerBuilder.cpp =================================================================== --- lib/Transforms/IPO/PassManagerBuilder.cpp +++ lib/Transforms/IPO/PassManagerBuilder.cpp @@ -542,6 +542,9 @@ // outer loop. LICM pass can help to promote the runtime check out if the // checked value is loop invariant. MPM.add(createLICMPass()); + + // Get rid of LCSSA nodes. + MPM.add(createInstructionSimplifierPass()); } // After vectorization and unrolling, assume intrinsics may tell us more Index: test/Other/cleanup-lcssa.ll =================================================================== --- /dev/null +++ test/Other/cleanup-lcssa.ll @@ -0,0 +1,18 @@ +; RUN: opt -S -O3 < %s | FileCheck %s + +define i64 @test() { +entry: + br label %loop + +loop: + %i = phi i64 [ 0, %entry ], [ %inc, %loop ] + %inc = add i64 %i, 1 + %cond = tail call i1 @check() + br i1 %cond, label %loop, label %exit + +exit: + ; CHECK-NOT: lcssa + ret i64 %i +} + +declare i1 @check()