[llvm] r362448 - Propagate fmf for setcc in SDAG for select folds
Michael Berg via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 3 14:53:26 PDT 2019
Author: mcberg2017
Date: Mon Jun 3 14:53:26 2019
New Revision: 362448
URL: http://llvm.org/viewvc/llvm-project?rev=362448&view=rev
Log:
Propagate fmf for setcc in SDAG for select folds
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
llvm/trunk/test/CodeGen/X86/fmf-propagation.ll
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=362448&r1=362447&r2=362448&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Mon Jun 3 14:53:26 2019
@@ -3445,6 +3445,7 @@ bool SelectionDAGLegalize::ExpandNode(SD
DAG.getConstant(0, dl, Tmp1.getValueType()),
Tmp2, Tmp3, ISD::SETNE);
}
+ Tmp1->setFlags(Node->getFlags());
Results.push_back(Tmp1);
break;
case ISD::BR_JT: {
@@ -3528,7 +3529,7 @@ bool SelectionDAGLegalize::ExpandNode(SD
// condition code, create a new SETCC node.
if (Tmp3.getNode())
Tmp1 = DAG.getNode(ISD::SETCC, dl, Node->getValueType(0),
- Tmp1, Tmp2, Tmp3);
+ Tmp1, Tmp2, Tmp3, Node->getFlags());
// If we expanded the SETCC by inverting the condition code, then wrap
// the existing SETCC in a NOT to restore the intended condition.
@@ -3556,6 +3557,7 @@ bool SelectionDAGLegalize::ExpandNode(SD
DAG.getConstant(TrueValue, dl, VT),
DAG.getConstant(0, dl, VT),
Tmp3);
+ Tmp1->setFlags(Node->getFlags());
Results.push_back(Tmp1);
break;
}
@@ -3577,7 +3579,7 @@ bool SelectionDAGLegalize::ExpandNode(SD
"expanded.");
EVT CCVT =
TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), CmpVT);
- SDValue Cond = DAG.getNode(ISD::SETCC, dl, CCVT, Tmp1, Tmp2, CC);
+ SDValue Cond = DAG.getNode(ISD::SETCC, dl, CCVT, Tmp1, Tmp2, CC, Node->getFlags());
Results.push_back(DAG.getSelect(dl, VT, Cond, Tmp3, Tmp4));
break;
}
@@ -4246,6 +4248,7 @@ void SelectionDAGLegalize::PromoteNode(S
Tmp3 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(2));
// Perform the larger operation, then round down.
Tmp1 = DAG.getSelect(dl, NVT, Tmp1, Tmp2, Tmp3);
+ Tmp1->setFlags(Node->getFlags());
if (TruncOp != ISD::FP_ROUND)
Tmp1 = DAG.getNode(TruncOp, dl, Node->getValueType(0), Tmp1);
else
@@ -4276,8 +4279,8 @@ void SelectionDAGLegalize::PromoteNode(S
}
Tmp1 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(0));
Tmp2 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(1));
- Results.push_back(DAG.getNode(ISD::SETCC, dl, Node->getValueType(0),
- Tmp1, Tmp2, Node->getOperand(2)));
+ Results.push_back(DAG.getNode(ISD::SETCC, dl, Node->getValueType(0), Tmp1,
+ Tmp2, Node->getOperand(2), Node->getFlags()));
break;
}
case ISD::BR_CC: {
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp?rev=362448&r1=362447&r2=362448&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp Mon Jun 3 14:53:26 2019
@@ -707,6 +707,7 @@ void DAGTypeLegalizer::SetPromotedIntege
auto &OpIdEntry = PromotedIntegers[getTableId(Op)];
assert((OpIdEntry == 0) && "Node is already promoted!");
OpIdEntry = getTableId(Result);
+ Result->setFlags(Op->getFlags());
DAG.transferDbgValues(Op, Result);
}
Modified: llvm/trunk/test/CodeGen/X86/fmf-propagation.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fmf-propagation.ll?rev=362448&r1=362447&r2=362448&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/fmf-propagation.ll (original)
+++ llvm/trunk/test/CodeGen/X86/fmf-propagation.ll Mon Jun 3 14:53:26 2019
@@ -28,3 +28,11 @@ define float @fmf_transfer(float %x, flo
ret float %f8
}
+; CHECK: Optimized type-legalized selection DAG: %bb.0 'fmf_setcc:'
+; CHECK: t13: i8 = setcc nnan ninf nsz arcp contract afn reassoc t2, ConstantFP:f32<0.000000e+00>, setlt:ch
+
+define float @fmf_setcc(float %x, float %y) {
+ %cmp = fcmp fast ult float %x, 0.0
+ %ret = select i1 %cmp, float %x, float %y
+ ret float %ret
+}
More information about the llvm-commits
mailing list