aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2024-10-17 11:52:59 +0100
committerSimon Pilgrim <llvm-dev@redking.me.uk>2024-10-17 12:50:09 +0100
commit784c15a282803b23b451b51c533eb5df93fda874 (patch)
tree268c40c17182bf58eba3760a301612ed4dc0f272 /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
parent8268bc48eb32b006700f6f6b7da0971a2336ab42 (diff)
downloadllvm-784c15a282803b23b451b51c533eb5df93fda874.zip
llvm-784c15a282803b23b451b51c533eb5df93fda874.tar.gz
llvm-784c15a282803b23b451b51c533eb5df93fda874.tar.bz2
[DAG] visitSINT_TO_FP/UINT_TO_FP - use FoldConstantArithmetic to attempt to constant fold
Don't rely on isConstantIntBuildVectorOrConstantInt followed by getNode() will constant fold - FoldConstantArithmetic will do all of this for us. Cleanup for #112682
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 67e1b73..ff1ee01 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -18002,10 +18002,10 @@ SDValue DAGCombiner::visitSINT_TO_FP(SDNode *N) {
return DAG.getConstantFP(0.0, DL, VT);
// fold (sint_to_fp c1) -> c1fp
- if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
- // ...but only if the target supports immediate floating-point values
- (!LegalOperations || TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT)))
- return DAG.getNode(ISD::SINT_TO_FP, DL, VT, N0);
+ // ...but only if the target supports immediate floating-point values
+ if ((!LegalOperations || TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT)))
+ if (SDValue C = DAG.FoldConstantArithmetic(ISD::SINT_TO_FP, DL, VT, {N0}))
+ return C;
// If the input is a legal type, and SINT_TO_FP is not legal on this target,
// but UINT_TO_FP is legal on this target, try to convert.
@@ -18050,10 +18050,10 @@ SDValue DAGCombiner::visitUINT_TO_FP(SDNode *N) {
return DAG.getConstantFP(0.0, DL, VT);
// fold (uint_to_fp c1) -> c1fp
- if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
- // ...but only if the target supports immediate floating-point values
- (!LegalOperations || TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT)))
- return DAG.getNode(ISD::UINT_TO_FP, DL, VT, N0);
+ // ...but only if the target supports immediate floating-point values
+ if ((!LegalOperations || TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT)))
+ if (SDValue C = DAG.FoldConstantArithmetic(ISD::UINT_TO_FP, DL, VT, {N0}))
+ return C;
// If the input is a legal type, and UINT_TO_FP is not legal on this target,
// but SINT_TO_FP is legal on this target, try to convert.