1 ; RUN: opt < %s -passes=indvars -S | FileCheck %s
3 define void @test0(ptr %a) {
8 for.body: ; preds = %entry, %for.body
9 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
10 %div = sdiv i32 %i.01, 2
13 %idxprom = sext i32 %div to i64
14 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom
15 store i32 %i.01, ptr %arrayidx, align 4
16 %inc = add nsw i32 %i.01, 1
17 %cmp = icmp slt i32 %inc, 64
18 br i1 %cmp, label %for.body, label %for.end
20 for.end: ; preds = %for.body
24 define void @test1(ptr %a) {
25 ; CHECK-LABEL: @test1(
29 for.body: ; preds = %entry, %for.body
30 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
31 %div = sdiv exact i32 %i.01, 2
34 %idxprom = sext i32 %div to i64
35 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom
36 store i32 %i.01, ptr %arrayidx, align 4
37 %inc = add nsw i32 %i.01, 1
38 %cmp = icmp slt i32 %inc, 64
39 br i1 %cmp, label %for.body, label %for.end
41 for.end: ; preds = %for.body
45 define void @test2(ptr %a, i32 %d) {
46 ; CHECK-LABEL: @test2(
50 for.body: ; preds = %entry, %for.body
51 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
52 %mul = mul nsw i32 %i.01, 64
53 %div = sdiv i32 %mul, %d
55 %idxprom = sext i32 %div to i64
56 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom
57 store i32 %i.01, ptr %arrayidx, align 4
58 %inc = add nsw i32 %i.01, 1
59 %cmp = icmp slt i32 %inc, 64
60 br i1 %cmp, label %for.body, label %for.end
62 for.end: ; preds = %for.body
66 define void @test3(ptr %a) {
67 ; CHECK-LABEL: @test3(
71 for.body: ; preds = %entry, %for.body
72 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
73 %div = sdiv i32 2048, %i.01
76 %idxprom = sext i32 %div to i64
77 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom
78 store i32 %i.01, ptr %arrayidx, align 4
79 %inc = add nsw i32 %i.01, 1
80 %cmp = icmp slt i32 %inc, 64
81 br i1 %cmp, label %for.body, label %for.end
83 for.end: ; preds = %for.body
87 define void @test4(ptr %a) {
88 ; CHECK-LABEL: @test4(
92 for.body: ; preds = %entry, %for.body
93 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
94 %mul = mul nsw i32 %i.01, 64
95 %div = sdiv i32 %mul, 8
98 %idxprom = sext i32 %div to i64
99 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom
100 store i32 %i.01, ptr %arrayidx, align 4
101 %inc = add nsw i32 %i.01, 1
102 %cmp = icmp slt i32 %inc, 64
103 br i1 %cmp, label %for.body, label %for.end
105 for.end: ; preds = %for.body
109 define void @test5(ptr %a) {
110 ; CHECK-LABEL: @test5(
114 for.body: ; preds = %entry, %for.body
115 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
116 %mul = mul nsw i32 %i.01, 64
117 %div = sdiv i32 %mul, 6
120 %idxprom = sext i32 %div to i64
121 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom
122 store i32 %i.01, ptr %arrayidx, align 4
123 %inc = add nsw i32 %i.01, 1
124 %cmp = icmp slt i32 %inc, 64
125 br i1 %cmp, label %for.body, label %for.end
127 for.end: ; preds = %for.body