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 %rem = srem i32 %i.01, 2
13 %idxprom = sext i32 %rem 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 @test2(ptr %a, i32 %d) {
25 ; CHECK-LABEL: @test2(
29 for.body: ; preds = %entry, %for.body
30 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
31 %mul = mul nsw i32 %i.01, 64
32 %rem = srem i32 %mul, %d
34 %idxprom = sext i32 %rem 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 @test3(ptr %a) {
46 ; CHECK-LABEL: @test3(
50 for.body: ; preds = %entry, %for.body
51 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
52 %rem = srem i32 2048, %i.01
55 %idxprom = sext i32 %rem 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 @test4(ptr %a) {
67 ; CHECK-LABEL: @test4(
71 for.body: ; preds = %entry, %for.body
72 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
73 %mul = mul nsw i32 %i.01, 64
74 %rem = srem i32 %mul, 7
77 %idxprom = sext i32 %rem to i64
78 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom
79 store i32 %i.01, ptr %arrayidx, align 4
80 %inc = add nsw i32 %i.01, 1
81 %cmp = icmp slt i32 %inc, 64
82 br i1 %cmp, label %for.body, label %for.end
84 for.end: ; preds = %for.body
88 define void @test5(ptr %a) {
89 ; CHECK-LABEL: @test5(
93 for.body: ; preds = %entry, %for.body
94 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
95 %mul = mul nsw i32 %i.01, 64
96 %rem = srem i32 %mul, 6
99 %idxprom = sext i32 %rem to i64
100 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom
101 store i32 %i.01, ptr %arrayidx, align 4
102 %inc = add nsw i32 %i.01, 1
103 %cmp = icmp slt i32 %inc, 64
104 br i1 %cmp, label %for.body, label %for.end
106 for.end: ; preds = %for.body