SCEVExpander: Fold constant PHIs harder. The logic below only understands proper...
[oota-llvm.git] / test / Transforms / IndVarSimplify / 2014-06-21-congruent-constant.ll
1 ; RUN: opt -S -loop-unswitch -instcombine -indvars < %s | FileCheck %s
2
3 @c = external global i32**, align 8
4
5 define void @test1() {
6 entry:
7   br i1 undef, label %for.end12, label %for.cond.preheader
8
9 for.cond.preheader:                               ; preds = %entry
10   %0 = load i32*** @c, align 8
11   %1 = load i32** %0, align 8
12   %2 = load i32* %1, align 4
13   br label %for.body
14
15 for.body:                                         ; preds = %for.cond.backedge, %for.body9.us, %for.cond.preheader
16   %3 = phi i32* [ %1, %for.cond.preheader ], [ %3, %for.cond.backedge ], [ %6, %for.body9.us ]
17   %4 = phi i32 [ %2, %for.cond.preheader ], [ undef, %for.cond.backedge ], [ %7, %for.body9.us ]
18   %i.024 = phi i32 [ 0, %for.cond.preheader ], [ %inc, %for.cond.backedge ], [ 0, %for.body9.us ]
19   %tobool1 = icmp eq i32 %4, 0
20   br i1 %tobool1, label %if.end, label %for.cond.backedge
21
22 if.end:                                           ; preds = %for.body
23   %5 = load i32* %3, align 4
24   %tobool4 = icmp eq i32 %5, 0
25   br i1 %tobool4, label %for.cond3, label %for.body9.preheader
26
27 for.body9.preheader:                              ; preds = %if.end
28   %tobool8 = icmp eq i32 %i.024, 1
29   br i1 %tobool8, label %for.body9.us, label %for.body9
30
31 for.body9.us:                                     ; preds = %for.body9.preheader
32   %6 = load i32** undef, align 8
33   %7 = load i32* %6, align 4
34   br label %for.body
35
36 for.cond3:                                        ; preds = %for.cond3, %if.end
37   br label %for.cond3
38
39 for.body9:                                        ; preds = %for.body9, %for.body9.preheader
40   br label %for.body9
41
42 for.cond.backedge:                                ; preds = %for.body
43   %inc = add nsw i32 %i.024, 1
44   br i1 false, label %for.body, label %for.end12
45
46 for.end12:                                        ; preds = %for.cond.backedge, %entry
47   ret void
48
49 ; CHECK-LABEL: @test1
50 ; CHECK-NOT: phi
51 }