Index: llvm/trunk/lib/Transforms/Scalar/LICM.cpp =================================================================== --- llvm/trunk/lib/Transforms/Scalar/LICM.cpp +++ llvm/trunk/lib/Transforms/Scalar/LICM.cpp @@ -124,8 +124,13 @@ } bool runOnLoop(Loop *L, LPPassManager &LPM) override { - if (skipLoop(L)) + if (skipLoop(L)) { + // If we have run LICM on a previous loop but now we are skipping + // (because we've hit the opt-bisect limit), we need to clear the + // loop alias information. + LICM.getLoopToAliasSetMap().clear(); return false; + } auto *SE = getAnalysisIfAvailable(); return LICM.runOnLoop(L, Index: llvm/trunk/test/Transforms/LICM/bisect-state.ll =================================================================== --- llvm/trunk/test/Transforms/LICM/bisect-state.ll +++ llvm/trunk/test/Transforms/LICM/bisect-state.ll @@ -0,0 +1,15 @@ +; Make sure we don't crash in LICM. +; RUN: opt %s -licm -opt-bisect-limit=1 + +define void @patatino() { +for.cond1: + br label %for.body +for.body: + br label %for.cond5 +for.cond5: + br i1 true, label %if.end, label %for.end +if.end: + br label %for.cond5 +for.end: + br label %for.body +}