@@ -177,6 +177,70 @@ if.else:
177
177
ret i1 %ret2
178
178
}
179
179
180
+ ; TODO: These two is.fpclass can be simplified.
181
+ define i1 @test8 (float %x ) {
182
+ ; CHECK-LABEL: define i1 @test8(
183
+ ; CHECK-SAME: float [[X:%.*]]) {
184
+ ; CHECK-NEXT: [[ABS:%.*]] = call float @llvm.fabs.f32(float [[X]])
185
+ ; CHECK-NEXT: [[COND:%.*]] = fcmp oeq float [[ABS]], 0x7FF0000000000000
186
+ ; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
187
+ ; CHECK: if.then:
188
+ ; CHECK-NEXT: [[RET1:%.*]] = call i1 @llvm.is.fpclass.f32(float [[X]], i32 575)
189
+ ; CHECK-NEXT: ret i1 [[RET1]]
190
+ ; CHECK: if.else:
191
+ ; CHECK-NEXT: [[RET2:%.*]] = call i1 @llvm.is.fpclass.f32(float [[X]], i32 575)
192
+ ; CHECK-NEXT: ret i1 [[RET2]]
193
+ ;
194
+ %abs = call float @llvm.fabs.f32 (float %x )
195
+ %cond = fcmp oeq float %abs , 0x7FF0000000000000
196
+ br i1 %cond , label %if.then , label %if.else
197
+ if.then:
198
+ %ret1 = call i1 @llvm.is.fpclass.f32 (float %x , i32 575 )
199
+ ret i1 %ret1
200
+ if.else:
201
+ %ret2 = call i1 @llvm.is.fpclass.f32 (float %x , i32 575 )
202
+ ret i1 %ret2
203
+ }
204
+
205
+ define i1 @test9 (float %x ) {
206
+ ; CHECK-LABEL: define i1 @test9(
207
+ ; CHECK-SAME: float [[X:%.*]]) {
208
+ ; CHECK-NEXT: [[COND:%.*]] = fcmp olt float [[X]], -1.000000e+00
209
+ ; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
210
+ ; CHECK: if.then:
211
+ ; CHECK-NEXT: ret i1 false
212
+ ; CHECK: if.else:
213
+ ; CHECK-NEXT: ret i1 false
214
+ ;
215
+ %cond = fcmp olt float %x , -1 .0
216
+ br i1 %cond , label %if.then , label %if.else
217
+ if.then:
218
+ %ret1 = fcmp oeq float %x , 0x7FF0000000000000
219
+ ret i1 %ret1
220
+ if.else:
221
+ ret i1 false
222
+ }
223
+
224
+ define i1 @test10 (float %x ) {
225
+ ; CHECK-LABEL: define i1 @test10(
226
+ ; CHECK-SAME: float [[X:%.*]]) {
227
+ ; CHECK-NEXT: [[COND:%.*]] = fcmp olt float [[X]], -1.000000e+00
228
+ ; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
229
+ ; CHECK: if.then:
230
+ ; CHECK-NEXT: ret i1 false
231
+ ; CHECK: if.else:
232
+ ; CHECK-NEXT: ret i1 false
233
+ ;
234
+ %cond = fcmp olt float %x , -1 .0
235
+ %neg = fneg float %x
236
+ br i1 %cond , label %if.then , label %if.else
237
+ if.then:
238
+ %ret1 = fcmp oeq float %neg , 0xFFF0000000000000
239
+ ret i1 %ret1
240
+ if.else:
241
+ ret i1 false
242
+ }
243
+
180
244
define i1 @test1_no_dominating (float %x , i1 %c ) {
181
245
; CHECK-LABEL: define i1 @test1_no_dominating(
182
246
; CHECK-SAME: float [[X:%.*]], i1 [[C:%.*]]) {
0 commit comments