[llvm] 784c15a - [DAG] visitSINT_TO_FP/UINT_TO_FP - use FoldConstantArithmetic to attempt to constant fold
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 17 04:50:30 PDT 2024
Author: Simon Pilgrim
Date: 2024-10-17T12:50:09+01:00
New Revision: 784c15a282803b23b451b51c533eb5df93fda874
URL: https://github.com/llvm/llvm-project/commit/784c15a282803b23b451b51c533eb5df93fda874
DIFF: https://github.com/llvm/llvm-project/commit/784c15a282803b23b451b51c533eb5df93fda874.diff
LOG: [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
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 67e1b731ba5f14..ff1ee01b8e43e4 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.
More information about the llvm-commits
mailing list