@@ -177,6 +177,70 @@ if.else:
177177 ret i1 %ret2
178178}
179179
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+
180244define i1 @test1_no_dominating (float %x , i1 %c ) {
181245; CHECK-LABEL: define i1 @test1_no_dominating(
182246; CHECK-SAME: float [[X:%.*]], i1 [[C:%.*]]) {
0 commit comments