1*9880d681SAndroid Build Coastguard Worker; LoopSimplify is breaking LICM on this testcase because the exit blocks from 2*9880d681SAndroid Build Coastguard Worker; the loop are reachable from more than just the exit nodes: the exit blocks 3*9880d681SAndroid Build Coastguard Worker; have predecessors from outside of the loop! 4*9880d681SAndroid Build Coastguard Worker; 5*9880d681SAndroid Build Coastguard Worker; This is distilled from a monsterous crafty example. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -licm -disable-output 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker@G = weak global i32 0 ; <i32*> [#uses=7] 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine i32 @main() { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker store i32 123, i32* @G 15*9880d681SAndroid Build Coastguard Worker br label %loopentry.i 16*9880d681SAndroid Build Coastguard Workerloopentry.i: ; preds = %endif.1.i, %entry 17*9880d681SAndroid Build Coastguard Worker %tmp.0.i = load i32, i32* @G ; <i32> [#uses=1] 18*9880d681SAndroid Build Coastguard Worker %tmp.1.i = icmp eq i32 %tmp.0.i, 123 ; <i1> [#uses=1] 19*9880d681SAndroid Build Coastguard Worker br i1 %tmp.1.i, label %Out.i, label %endif.0.i 20*9880d681SAndroid Build Coastguard Workerendif.0.i: ; preds = %loopentry.i 21*9880d681SAndroid Build Coastguard Worker %tmp.3.i = load i32, i32* @G ; <i32> [#uses=1] 22*9880d681SAndroid Build Coastguard Worker %tmp.4.i = icmp eq i32 %tmp.3.i, 126 ; <i1> [#uses=1] 23*9880d681SAndroid Build Coastguard Worker br i1 %tmp.4.i, label %ExitBlock.i, label %endif.1.i 24*9880d681SAndroid Build Coastguard Workerendif.1.i: ; preds = %endif.0.i 25*9880d681SAndroid Build Coastguard Worker %tmp.6.i = load i32, i32* @G ; <i32> [#uses=1] 26*9880d681SAndroid Build Coastguard Worker %inc.i = add i32 %tmp.6.i, 1 ; <i32> [#uses=1] 27*9880d681SAndroid Build Coastguard Worker store i32 %inc.i, i32* @G 28*9880d681SAndroid Build Coastguard Worker br label %loopentry.i 29*9880d681SAndroid Build Coastguard WorkerOut.i: ; preds = %loopentry.i 30*9880d681SAndroid Build Coastguard Worker store i32 0, i32* @G 31*9880d681SAndroid Build Coastguard Worker br label %ExitBlock.i 32*9880d681SAndroid Build Coastguard WorkerExitBlock.i: ; preds = %Out.i, %endif.0.i 33*9880d681SAndroid Build Coastguard Worker %tmp.7.i = load i32, i32* @G ; <i32> [#uses=1] 34*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.7.i 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37