@@ -359,3 +359,42 @@ define i1 @test_and_olt_fmf_propagation_union(float %x) {
359359 %cond = and i1 %cmp1 , %cmp2
360360 ret i1 %cond
361361}
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