[InstCombine] add tests for fneg-of-select with FMF; NFC

This commit is contained in:
Sanjay Patel 2022-03-15 08:50:06 -04:00
parent f6fd1c1438
commit 2d3593e668
1 changed files with 52 additions and 0 deletions

View File

@ -674,6 +674,58 @@ define float @select_fneg_false_nsz(float %x, float %y, i1 %b) {
ret float %r
}
define float @select_common_op_fneg_true(float %x, i1 %b) {
; CHECK-LABEL: @select_common_op_fneg_true(
; CHECK-NEXT: [[X_NEG:%.*]] = fneg nnan ninf nsz float [[X:%.*]]
; CHECK-NEXT: [[R:%.*]] = select nnan ninf i1 [[B:%.*]], float [[X_NEG]], float [[X]]
; CHECK-NEXT: ret float [[R]]
;
%nx = fneg float %x
%s = select i1 %b, float %x, float %nx
%r = fneg nsz ninf nnan float %s
ret float %r
}
define float @select_common_op_fneg_false(float %x, i1 %b) {
; CHECK-LABEL: @select_common_op_fneg_false(
; CHECK-NEXT: [[X_NEG:%.*]] = fneg nnan ninf nsz float [[X:%.*]]
; CHECK-NEXT: [[R:%.*]] = select nnan ninf i1 [[B:%.*]], float [[X_NEG]], float [[X]]
; CHECK-NEXT: ret float [[R]]
;
%nx = fneg float %x
%s = select i1 %b, float %x, float %nx
%r = fneg nsz ninf nnan float %s
ret float %r
}
define float @fabs(float %a) {
; CHECK-LABEL: @fabs(
; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 0.000000e+00
; CHECK-NEXT: [[A_NEG:%.*]] = fneg nnan ninf nsz float [[A]]
; CHECK-NEXT: [[FNEG1:%.*]] = select nnan ninf i1 [[CMP]], float [[A]], float [[A_NEG]]
; CHECK-NEXT: ret float [[FNEG1]]
;
%fneg = fneg float %a
%cmp = fcmp ogt float %a, %fneg
%sel = select i1 %cmp, float %fneg, float %a
%fneg1 = fneg nnan ninf nsz float %sel
ret float %fneg1
}
define float @fnabs(float %a) {
; CHECK-LABEL: @fnabs(
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[A:%.*]], 0.000000e+00
; CHECK-NEXT: [[A_NEG:%.*]] = fneg fast float [[A]]
; CHECK-NEXT: [[FNEG1:%.*]] = select reassoc nnan ninf arcp contract afn i1 [[CMP]], float [[A]], float [[A_NEG]]
; CHECK-NEXT: ret float [[FNEG1]]
;
%fneg = fneg float %a
%cmp = fcmp olt float %a, %fneg
%sel = select i1 %cmp, float %fneg, float %a
%fneg1 = fneg fast float %sel
ret float %fneg1
}
define float @select_fneg_both(float %x, float %y, i1 %b) {
; CHECK-LABEL: @select_fneg_both(
; CHECK-NEXT: [[S_V:%.*]] = select i1 [[B:%.*]], float [[X:%.*]], float [[Y:%.*]]