@@ -359,3 +359,42 @@ define i1 @test_and_olt_fmf_propagation_union(float %x) {
359
359
%cond = and i1 %cmp1 , %cmp2
360
360
ret i1 %cond
361
361
}
362
+
363
+ define i1 @test_and_olt_fmf_propagation_union_logical_rhs_poison (float %x ) {
364
+ ; CHECK-LABEL: define i1 @test_and_olt_fmf_propagation_union_logical_rhs_poison(
365
+ ; CHECK-SAME: float [[X:%.*]]) {
366
+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.fabs.f32(float [[X]])
367
+ ; CHECK-NEXT: [[COND:%.*]] = fcmp olt float [[TMP1]], 0x3C00000000000000
368
+ ; CHECK-NEXT: ret i1 [[COND]]
369
+ ;
370
+ %cmp1 = fcmp ninf olt float %x , 0x3C00000000000000
371
+ %cmp2 = fcmp ogt float %x , 0xBC00000000000000
372
+ %cond = select i1 %cmp2 , i1 %cmp1 , i1 false
373
+ ret i1 %cond
374
+ }
375
+
376
+ define i1 @test_and_olt_fmf_propagation_union_logical_lhs_poison (float %x ) {
377
+ ; CHECK-LABEL: define i1 @test_and_olt_fmf_propagation_union_logical_lhs_poison(
378
+ ; CHECK-SAME: float [[X:%.*]]) {
379
+ ; CHECK-NEXT: [[TMP1:%.*]] = call ninf float @llvm.fabs.f32(float [[X]])
380
+ ; CHECK-NEXT: [[COND:%.*]] = fcmp ninf olt float [[TMP1]], 0x3C00000000000000
381
+ ; CHECK-NEXT: ret i1 [[COND]]
382
+ ;
383
+ %cmp1 = fcmp olt float %x , 0x3C00000000000000
384
+ %cmp2 = fcmp ninf ogt float %x , 0xBC00000000000000
385
+ %cond = select i1 %cmp2 , i1 %cmp1 , i1 false
386
+ ret i1 %cond
387
+ }
388
+
389
+ define i1 @test_and_olt_fmf_propagation_union_logical_both_poison (float %x ) {
390
+ ; CHECK-LABEL: define i1 @test_and_olt_fmf_propagation_union_logical_both_poison(
391
+ ; CHECK-SAME: float [[X:%.*]]) {
392
+ ; CHECK-NEXT: [[TMP1:%.*]] = call ninf float @llvm.fabs.f32(float [[X]])
393
+ ; CHECK-NEXT: [[COND:%.*]] = fcmp ninf olt float [[TMP1]], 0x3C00000000000000
394
+ ; CHECK-NEXT: ret i1 [[COND]]
395
+ ;
396
+ %cmp1 = fcmp ninf olt float %x , 0x3C00000000000000
397
+ %cmp2 = fcmp ninf ogt float %x , 0xBC00000000000000
398
+ %cond = select i1 %cmp2 , i1 %cmp1 , i1 false
399
+ ret i1 %cond
400
+ }
0 commit comments