Index: lib/Transforms/Scalar/LoopSimplifyCFG.cpp =================================================================== --- lib/Transforms/Scalar/LoopSimplifyCFG.cpp +++ lib/Transforms/Scalar/LoopSimplifyCFG.cpp @@ -61,7 +61,8 @@ // Merge Succ into Pred and delete it. MergeBlockIntoPredecessor(Succ, &DTU, &LI); - SE.forgetLoop(&L); + SE.forgetTopmostLoop(&L); + Changed = true; } Index: test/Transforms/LoopIdiom/scev-invalidation_topmostloop.ll =================================================================== --- /dev/null +++ test/Transforms/LoopIdiom/scev-invalidation_topmostloop.ll @@ -0,0 +1,23 @@ +; RUN: opt -S -indvars -loop-idiom -verify -loop-simplifycfg -loop-idiom < %s + +target triple = "x86_64-unknown-linux-gnu" + +define void @f1() { +entry: + br label %lbl1 + +lbl1: ; preds = %if.end, %entry + br label %for + +for: ; preds = %if.end, %lbl1 + br label %lor.end + +lor.end: ; preds = %for + br i1 undef, label %for.end, label %if.end + +if.end: ; preds = %lor.end + br i1 undef, label %lbl1, label %for + +for.end: ; preds = %lor.end + ret void +}