• Home
  • History
  • Annotate
  • 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  %div = sdiv i32 %i.01, 2
11; CHECK-NOT: sdiv
12; CHECK:     udiv
13  %idxprom = sext i32 %div 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 @test1(i32* %a) {
25; CHECK-LABEL: @test1(
26entry:
27  br label %for.body
28
29for.body:                                         ; preds = %entry, %for.body
30  %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
31  %div = sdiv exact i32 %i.01, 2
32; CHECK-NOT: sdiv
33; CHECK:     udiv exact
34  %idxprom = sext i32 %div 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 @test2(i32* %a, i32 %d) {
46; CHECK-LABEL: @test2(
47entry:
48  br label %for.body
49
50for.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
54; CHECK-NOT: udiv
55  %idxprom = sext i32 %div 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 @test3(i32* %a) {
67; CHECK-LABEL: @test3(
68entry:
69  br label %for.body
70
71for.body:                                         ; preds = %entry, %for.body
72  %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
73  %div = sdiv i32 2048, %i.01
74; CHECK:     udiv
75; CHECK-NOT: sdiv
76  %idxprom = sext i32 %div to i64
77  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom
78  store i32 %i.01, i32* %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
82
83for.end:                                          ; preds = %for.body
84  ret void
85}
86
87define void @test4(i32* %a) {
88; CHECK-LABEL: @test4(
89entry:
90  br label %for.body
91
92for.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
96; CHECK:     udiv
97; CHECK-NOT: sdiv
98  %idxprom = sext i32 %div to i64
99  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom
100  store i32 %i.01, i32* %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
104
105for.end:                                          ; preds = %for.body
106  ret void
107}
108
109define void @test5(i32* %a) {
110; CHECK-LABEL: @test5(
111entry:
112  br label %for.body
113
114for.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
118; CHECK:     udiv
119; CHECK-NOT: sdiv
120  %idxprom = sext i32 %div to i64
121  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom
122  store i32 %i.01, i32* %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
126
127for.end:                                          ; preds = %for.body
128  ret void
129}
130
131