1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00

early exits -> less indenting; NFCI

llvm-svn: 241716
This commit is contained in:
Sanjay Patel 2015-07-08 19:32:39 +00:00
parent ac54e4bbae
commit 14f5426426

View File

@ -8406,30 +8406,29 @@ SDValue DAGCombiner::visitFREM(SDNode *N) {
} }
SDValue DAGCombiner::visitFSQRT(SDNode *N) { SDValue DAGCombiner::visitFSQRT(SDNode *N) {
if (DAG.getTarget().Options.UnsafeFPMath && if (!DAG.getTarget().Options.UnsafeFPMath || TLI.isFsqrtCheap())
!TLI.isFsqrtCheap()) { return SDValue();
// Compute this as X * (1/sqrt(X)) = X * (X ** -0.5)
if (SDValue RV = BuildRsqrtEstimate(N->getOperand(0))) {
EVT VT = RV.getValueType();
SDLoc DL(N);
RV = DAG.getNode(ISD::FMUL, DL, VT, N->getOperand(0), RV);
AddToWorklist(RV.getNode());
// Unfortunately, RV is now NaN if the input was exactly 0. // Compute this as X * (1/sqrt(X)) = X * (X ** -0.5)
// Select out this case and force the answer to 0. SDValue RV = BuildRsqrtEstimate(N->getOperand(0));
SDValue Zero = DAG.getConstantFP(0.0, DL, VT); if (!RV)
SDValue ZeroCmp = return SDValue();
DAG.getSetCC(DL, TLI.getSetCCResultType(*DAG.getContext(), VT),
N->getOperand(0), Zero, ISD::SETEQ);
AddToWorklist(ZeroCmp.getNode());
AddToWorklist(RV.getNode());
RV = DAG.getNode(VT.isVector() ? ISD::VSELECT : ISD::SELECT, EVT VT = RV.getValueType();
DL, VT, ZeroCmp, Zero, RV); SDLoc DL(N);
return RV; RV = DAG.getNode(ISD::FMUL, DL, VT, N->getOperand(0), RV);
} AddToWorklist(RV.getNode());
}
return SDValue(); // Unfortunately, RV is now NaN if the input was exactly 0.
// Select out this case and force the answer to 0.
SDValue Zero = DAG.getConstantFP(0.0, DL, VT);
EVT CCVT = TLI.getSetCCResultType(*DAG.getContext(), VT);
SDValue ZeroCmp = DAG.getSetCC(DL, CCVT, N->getOperand(0), Zero, ISD::SETEQ);
AddToWorklist(ZeroCmp.getNode());
AddToWorklist(RV.getNode());
return DAG.getNode(VT.isVector() ? ISD::VSELECT : ISD::SELECT, DL, VT,
ZeroCmp, Zero, RV);
} }
SDValue DAGCombiner::visitFCOPYSIGN(SDNode *N) { SDValue DAGCombiner::visitFCOPYSIGN(SDNode *N) {