• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Here we have a case where there are two loops and LICM is hoisting an
2; instruction from one loop into the other loop!  This is obviously bad and
3; happens because preheader insertion doesn't insert a preheader for this
4; case... bad.
5
6; RUN: opt < %s -licm -loop-deletion -simplifycfg -S | \
7; RUN:   not grep "br "
8
9define i32 @main(i32 %argc) {
10; <label>:0
11	br label %bb5
12bb5:		; preds = %bb5, %0
13	%I = phi i32 [ 0, %0 ], [ %I2, %bb5 ]		; <i32> [#uses=1]
14	%I2 = add i32 %I, 1		; <i32> [#uses=2]
15	%c = icmp eq i32 %I2, 10		; <i1> [#uses=1]
16	br i1 %c, label %bb5, label %bb8
17bb8:		; preds = %bb8, %bb5
18	%cann-indvar = phi i32 [ 0, %bb8 ], [ 0, %bb5 ]		; <i32> [#uses=0]
19	%X = add i32 %argc, %argc		; <i32> [#uses=1]
20	br i1 false, label %bb8, label %bb10
21bb10:		; preds = %bb8
22	ret i32 %X
23}
24
25