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