diff options
author | Cameron McInally <cmcinally@nvidia.com> | 2023-02-22 10:36:11 -0800 |
---|---|---|
committer | Tobias Hieta <tobias@hieta.se> | 2023-02-24 09:42:39 +0100 |
commit | 91172bd36927e9444ee9e9c80e489a1e6a13c72e (patch) | |
tree | 81368739118c16066cb673186ae3104c9f53f7b7 | |
parent | 57b29461409951fd27be39cd28c15ced4acdbdf4 (diff) | |
download | llvm-91172bd36927e9444ee9e9c80e489a1e6a13c72e.tar.gz |
[DAGCombine] Fix an ICE in combineMinNumMaxNum(...)
65420c8041f4 introduced an ICE in combineMinNumMaxNum(...) when
combineMinNumMaxNumImpl(...) returns an SDValue(). Make sure to check that a
value is returned before trying to perform an FNEG on it.
GitHub Issue: #60924
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D144571
(cherry picked from commit af4c4f4e21434ae306b7ee83691b5a8c2d90e576)
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/2023-02-22-combineMinNumMaxNum.ll | 20 |
2 files changed, 22 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 0a3ebd73d272..355a793ead48 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -10447,7 +10447,8 @@ SDValue DAGCombiner::combineMinNumMaxNum(const SDLoc &DL, EVT VT, SDValue LHS, if (NegRHS == False) { SDValue Combined = combineMinNumMaxNumImpl(DL, VT, LHS, RHS, NegTrue, False, CC, TLI, DAG); - return DAG.getNode(ISD::FNEG, DL, VT, Combined); + if (Combined) + return DAG.getNode(ISD::FNEG, DL, VT, Combined); } } } diff --git a/llvm/test/CodeGen/X86/2023-02-22-combineMinNumMaxNum.ll b/llvm/test/CodeGen/X86/2023-02-22-combineMinNumMaxNum.ll new file mode 100644 index 000000000000..8b53d599393b --- /dev/null +++ b/llvm/test/CodeGen/X86/2023-02-22-combineMinNumMaxNum.ll @@ -0,0 +1,20 @@ +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skylake + +; Checking for a DAGCombine ICE. + +define float @test_combinemaxnum(float %sub) #0 { +L.entry: + %maxnum1 = call float @llvm.maxnum.f32(float 0.000000e+00, float 0.000000e+00) + br label %L.LB21_850 + +L.LB21_850: + %neg1 = fneg fast float %maxnum1 + %neg2 = fneg fast float %sub + %mask = fcmp fast ule float %maxnum1, %neg2 + %maxnum2 = select i1 %mask, float %neg1, float %sub + ret float %maxnum2 +} + +declare float @llvm.maxnum.f32(float, float) + +attributes #0 = { "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" } |