[InstCombine] add tests for FMF propagation for select-of-fneg; NFC
authorSanjay Patel <spatel@rotateright.com>
Fri, 27 Aug 2021 18:07:44 +0000 (14:07 -0400)
committerSanjay Patel <spatel@octomac.myfiosgateway.com>
Tue, 31 Aug 2021 13:12:03 +0000 (09:12 -0400)
llvm/test/Transforms/InstCombine/fneg.ll

index 60aea51..9caa620 100644 (file)
@@ -438,6 +438,54 @@ define float @fneg_fneg_sel_extra_use3(float %x, float %y, i1 %cond) {
   ret float %sel
 }
 
+define double @fneg_fneg_sel_fmf1(double %x, double %y, i1 %cond) {
+; CHECK-LABEL: @fneg_fneg_sel_fmf1(
+; CHECK-NEXT:    [[SEL_V:%.*]] = select i1 [[COND:%.*]], double [[X:%.*]], double [[Y:%.*]]
+; CHECK-NEXT:    [[SEL:%.*]] = fneg nnan double [[SEL_V]]
+; CHECK-NEXT:    ret double [[SEL]]
+;
+  %n1 = fneg nnan double %x
+  %n2 = fneg ninf double %y
+  %sel = select i1 %cond, double %n1, double %n2
+  ret double %sel
+}
+
+define double @fneg_fneg_sel_fmf2(double %x, double %y, i1 %cond) {
+; CHECK-LABEL: @fneg_fneg_sel_fmf2(
+; CHECK-NEXT:    [[SEL_V:%.*]] = select i1 [[COND:%.*]], double [[X:%.*]], double [[Y:%.*]]
+; CHECK-NEXT:    [[SEL:%.*]] = fneg nnan ninf double [[SEL_V]]
+; CHECK-NEXT:    ret double [[SEL]]
+;
+  %n1 = fneg nnan ninf double %x
+  %n2 = fneg ninf double %y
+  %sel = select i1 %cond, double %n1, double %n2
+  ret double %sel
+}
+
+define double @fneg_fneg_sel_fmf3(double %x, double %y, i1 %cond) {
+; CHECK-LABEL: @fneg_fneg_sel_fmf3(
+; CHECK-NEXT:    [[SEL_V:%.*]] = select i1 [[COND:%.*]], double [[X:%.*]], double [[Y:%.*]]
+; CHECK-NEXT:    [[SEL:%.*]] = fneg nnan ninf double [[SEL_V]]
+; CHECK-NEXT:    ret double [[SEL]]
+;
+  %n1 = fneg nnan ninf double %x
+  %n2 = fneg ninf double %y
+  %sel = select ninf i1 %cond, double %n1, double %n2
+  ret double %sel
+}
+
+define double @fneg_fneg_sel_fmf4(double %x, double %y, i1 %cond) {
+; CHECK-LABEL: @fneg_fneg_sel_fmf4(
+; CHECK-NEXT:    [[SEL_V:%.*]] = select i1 [[COND:%.*]], double [[X:%.*]], double [[Y:%.*]]
+; CHECK-NEXT:    [[SEL:%.*]] = fneg nnan double [[SEL_V]]
+; CHECK-NEXT:    ret double [[SEL]]
+;
+  %n1 = fneg nnan double %x
+  %n2 = fneg ninf double %y
+  %sel = select nsz nnan ninf i1 %cond, double %n1, double %n2
+  ret double %sel
+}
+
 ; Negative test
 
 define float @fneg_fadd_constant(float %x) {