1 ; RUN: opt -S -codegenprepare -mtriple=r600-unknown-unknown -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=ALL %s
4 define i64 @test1(i64 %A) {
6 ; SI: [[CTLZ:%[A-Za-z0-9]+]] = call i64 @llvm.ctlz.i64(i64 %A, i1 false)
7 ; SI-NEXT: ret i64 [[CTLZ]]
9 %tobool = icmp eq i64 %A, 0
10 br i1 %tobool, label %cond.end, label %cond.true
12 cond.true: ; preds = %entry
13 %0 = tail call i64 @llvm.ctlz.i64(i64 %A, i1 true)
16 cond.end: ; preds = %entry, %cond.true
17 %cond = phi i64 [ %0, %cond.true ], [ 64, %entry ]
22 define i32 @test2(i32 %A) {
24 ; SI: [[CTLZ:%[A-Za-z0-9]+]] = call i32 @llvm.ctlz.i32(i32 %A, i1 false)
25 ; SI-NEXT: ret i32 [[CTLZ]]
27 %tobool = icmp eq i32 %A, 0
28 br i1 %tobool, label %cond.end, label %cond.true
30 cond.true: ; preds = %entry
31 %0 = tail call i32 @llvm.ctlz.i32(i32 %A, i1 true)
34 cond.end: ; preds = %entry, %cond.true
35 %cond = phi i32 [ %0, %cond.true ], [ 32, %entry ]
40 define signext i16 @test3(i16 signext %A) {
42 ; SI: [[CTLZ:%[A-Za-z0-9]+]] = call i16 @llvm.ctlz.i16(i16 %A, i1 false)
43 ; SI-NEXT: ret i16 [[CTLZ]]
45 %tobool = icmp eq i16 %A, 0
46 br i1 %tobool, label %cond.end, label %cond.true
48 cond.true: ; preds = %entry
49 %0 = tail call i16 @llvm.ctlz.i16(i16 %A, i1 true)
52 cond.end: ; preds = %entry, %cond.true
53 %cond = phi i16 [ %0, %cond.true ], [ 16, %entry ]
58 define i64 @test1b(i64 %A) {
60 ; SI: [[CTTZ:%[A-Za-z0-9]+]] = call i64 @llvm.cttz.i64(i64 %A, i1 false)
61 ; SI-NEXT: ret i64 [[CTTZ]]
63 %tobool = icmp eq i64 %A, 0
64 br i1 %tobool, label %cond.end, label %cond.true
66 cond.true: ; preds = %entry
67 %0 = tail call i64 @llvm.cttz.i64(i64 %A, i1 true)
70 cond.end: ; preds = %entry, %cond.true
71 %cond = phi i64 [ %0, %cond.true ], [ 64, %entry ]
76 define i32 @test2b(i32 %A) {
78 ; SI: [[CTTZ:%[A-Za-z0-9]+]] = call i32 @llvm.cttz.i32(i32 %A, i1 false)
79 ; SI-NEXT: ret i32 [[CTTZ]]
81 %tobool = icmp eq i32 %A, 0
82 br i1 %tobool, label %cond.end, label %cond.true
84 cond.true: ; preds = %entry
85 %0 = tail call i32 @llvm.cttz.i32(i32 %A, i1 true)
88 cond.end: ; preds = %entry, %cond.true
89 %cond = phi i32 [ %0, %cond.true ], [ 32, %entry ]
94 define signext i16 @test3b(i16 signext %A) {
96 ; SI: [[CTTZ:%[A-Za-z0-9]+]] = call i16 @llvm.cttz.i16(i16 %A, i1 false)
97 ; SI-NEXT: ret i16 [[CTTZ]]
99 %tobool = icmp eq i16 %A, 0
100 br i1 %tobool, label %cond.end, label %cond.true
102 cond.true: ; preds = %entry
103 %0 = tail call i16 @llvm.cttz.i16(i16 %A, i1 true)
106 cond.end: ; preds = %entry, %cond.true
107 %cond = phi i16 [ %0, %cond.true ], [ 16, %entry ]
112 define i64 @test1c(i64 %A) {
113 ; ALL-LABEL: @test1c(
114 ; ALL: icmp eq i64 %A, 0
115 ; ALL: call i64 @llvm.ctlz.i64(i64 %A, i1 true)
117 %tobool = icmp eq i64 %A, 0
118 br i1 %tobool, label %cond.end, label %cond.true
120 cond.true: ; preds = %entry
121 %0 = tail call i64 @llvm.ctlz.i64(i64 %A, i1 true)
124 cond.end: ; preds = %entry, %cond.true
125 %cond = phi i64 [ %0, %cond.true ], [ 63, %entry ]
129 define i32 @test2c(i32 %A) {
130 ; ALL-LABEL: @test2c(
131 ; ALL: icmp eq i32 %A, 0
132 ; ALL: call i32 @llvm.ctlz.i32(i32 %A, i1 true)
134 %tobool = icmp eq i32 %A, 0
135 br i1 %tobool, label %cond.end, label %cond.true
137 cond.true: ; preds = %entry
138 %0 = tail call i32 @llvm.ctlz.i32(i32 %A, i1 true)
141 cond.end: ; preds = %entry, %cond.true
142 %cond = phi i32 [ %0, %cond.true ], [ 31, %entry ]
147 define signext i16 @test3c(i16 signext %A) {
148 ; ALL-LABEL: @test3c(
149 ; ALL: icmp eq i16 %A, 0
150 ; ALL: call i16 @llvm.ctlz.i16(i16 %A, i1 true)
152 %tobool = icmp eq i16 %A, 0
153 br i1 %tobool, label %cond.end, label %cond.true
155 cond.true: ; preds = %entry
156 %0 = tail call i16 @llvm.ctlz.i16(i16 %A, i1 true)
159 cond.end: ; preds = %entry, %cond.true
160 %cond = phi i16 [ %0, %cond.true ], [ 15, %entry ]
165 define i64 @test1d(i64 %A) {
166 ; ALL-LABEL: @test1d(
167 ; ALL: icmp eq i64 %A, 0
168 ; ALL: call i64 @llvm.cttz.i64(i64 %A, i1 true)
170 %tobool = icmp eq i64 %A, 0
171 br i1 %tobool, label %cond.end, label %cond.true
173 cond.true: ; preds = %entry
174 %0 = tail call i64 @llvm.cttz.i64(i64 %A, i1 true)
177 cond.end: ; preds = %entry, %cond.true
178 %cond = phi i64 [ %0, %cond.true ], [ 63, %entry ]
183 define i32 @test2d(i32 %A) {
184 ; ALL-LABEL: @test2d(
185 ; ALL: icmp eq i32 %A, 0
186 ; ALL: call i32 @llvm.cttz.i32(i32 %A, i1 true)
188 %tobool = icmp eq i32 %A, 0
189 br i1 %tobool, label %cond.end, label %cond.true
191 cond.true: ; preds = %entry
192 %0 = tail call i32 @llvm.cttz.i32(i32 %A, i1 true)
195 cond.end: ; preds = %entry, %cond.true
196 %cond = phi i32 [ %0, %cond.true ], [ 31, %entry ]
201 define signext i16 @test3d(i16 signext %A) {
202 ; ALL-LABEL: @test3d(
203 ; ALL: icmp eq i16 %A, 0
204 ; ALL: call i16 @llvm.cttz.i16(i16 %A, i1 true)
206 %tobool = icmp eq i16 %A, 0
207 br i1 %tobool, label %cond.end, label %cond.true
209 cond.true: ; preds = %entry
210 %0 = tail call i16 @llvm.cttz.i16(i16 %A, i1 true)
213 cond.end: ; preds = %entry, %cond.true
214 %cond = phi i16 [ %0, %cond.true ], [ 15, %entry ]
219 declare i64 @llvm.ctlz.i64(i64, i1)
220 declare i32 @llvm.ctlz.i32(i32, i1)
221 declare i16 @llvm.ctlz.i16(i16, i1)
222 declare i64 @llvm.cttz.i64(i64, i1)
223 declare i32 @llvm.cttz.i32(i32, i1)
224 declare i16 @llvm.cttz.i16(i16, i1)