• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt < %s -indvars -S | FileCheck %s
2
3define void @test0(i32* %a) {
4; CHECK-LABEL: @test0(
5entry:
6  br label %for.body
7
8for.body:                                         ; preds = %entry, %for.body
9  %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
10  %rem = srem i32 %i.01, 2
11; CHECK-NOT: srem
12; CHECK:     urem
13  %idxprom = sext i32 %rem to i64
14  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom
15  store i32 %i.01, i32* %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
19
20for.end:                                          ; preds = %for.body
21  ret void
22}
23
24define void @test2(i32* %a, i32 %d) {
25; CHECK-LABEL: @test2(
26entry:
27  br label %for.body
28
29for.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
33; CHECK-NOT: urem
34  %idxprom = sext i32 %rem to i64
35  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom
36  store i32 %i.01, i32* %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
40
41for.end:                                          ; preds = %for.body
42  ret void
43}
44
45define void @test3(i32* %a) {
46; CHECK-LABEL: @test3(
47entry:
48  br label %for.body
49
50for.body:                                         ; preds = %entry, %for.body
51  %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
52  %rem = srem i32 2048, %i.01
53; CHECK:     urem
54; CHECK-NOT: srem
55  %idxprom = sext i32 %rem to i64
56  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom
57  store i32 %i.01, i32* %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
61
62for.end:                                          ; preds = %for.body
63  ret void
64}
65
66define void @test4(i32* %a) {
67; CHECK-LABEL: @test4(
68entry:
69  br label %for.body
70
71for.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
75; CHECK:     urem
76; CHECK-NOT: srem
77  %idxprom = sext i32 %rem to i64
78  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom
79  store i32 %i.01, i32* %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
83
84for.end:                                          ; preds = %for.body
85  ret void
86}
87
88define void @test5(i32* %a) {
89; CHECK-LABEL: @test5(
90entry:
91  br label %for.body
92
93for.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
97; CHECK:     urem
98; CHECK-NOT: srem
99  %idxprom = sext i32 %rem to i64
100  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom
101  store i32 %i.01, i32* %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
105
106for.end:                                          ; preds = %for.body
107  ret void
108}
109
110