Skip to content

Commit 322bb13

Browse files
committed
[InstCombine] Check nnan on select
1 parent fc2ed05 commit 322bb13

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2797,7 +2797,7 @@ static Instruction *foldSelectWithFCmpToFabs(SelectInst &SI,
27972797
// of NAN, but IEEE-754 specifies the signbit of NAN values with
27982798
// fneg/fabs operations.
27992799
if (match(TrueVal, m_FSub(m_PosZeroFP(), m_Specific(X))) &&
2800-
(cast<FPMathOperator>(CondVal)->hasNoNaNs() ||
2800+
(cast<FPMathOperator>(CondVal)->hasNoNaNs() || SI.hasNoNaNs() ||
28012801
isKnownNeverNaN(X, /*Depth=*/0,
28022802
IC.getSimplifyQuery().getWithInstruction(
28032803
cast<Instruction>(CondVal))))) {

llvm/test/Transforms/InstCombine/fabs.ll

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,17 @@ define double @select_fcmp_ole_zero_no_nnan_input_nofpclass_nan(double nofpclass
287287
ret double %fabs
288288
}
289289

290+
define double @select_fcmp_ole_zero_select_nnan(double %x) {
291+
; CHECK-LABEL: @select_fcmp_ole_zero_select_nnan(
292+
; CHECK-NEXT: [[FABS:%.*]] = call nnan double @llvm.fabs.f64(double [[X:%.*]])
293+
; CHECK-NEXT: ret double [[FABS]]
294+
;
295+
%lezero = fcmp ole double %x, 0.0
296+
%negx = fsub double 0.0, %x
297+
%fabs = select nnan i1 %lezero, double %negx, double %x
298+
ret double %fabs
299+
}
300+
290301
define double @select_fcmp_nnan_ole_zero(double %x) {
291302
; CHECK-LABEL: @select_fcmp_nnan_ole_zero(
292303
; CHECK-NEXT: [[FABS:%.*]] = call double @llvm.fabs.f64(double [[X:%.*]])

0 commit comments

Comments
 (0)