mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-04 06:09:05 +00:00
Move FNEG next to FABS and make them more similar, so it's easier that they can be refactored. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216688 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4bb535027e
commit
179b5ee8a8
@ -7308,26 +7308,64 @@ SDValue DAGCombiner::visitFP_EXTEND(SDNode *N) {
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFCEIL(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
// fold (fceil c1) -> fceil(c1)
|
||||
if (N0CFP)
|
||||
return DAG.getNode(ISD::FCEIL, SDLoc(N), VT, N0);
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFTRUNC(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
// fold (ftrunc c1) -> ftrunc(c1)
|
||||
if (N0CFP)
|
||||
return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0);
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFFLOOR(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
// fold (ffloor c1) -> ffloor(c1)
|
||||
if (N0CFP)
|
||||
return DAG.getNode(ISD::FFLOOR, SDLoc(N), VT, N0);
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
// FIXME: FNEG and FABS have a lot in common; refactor.
|
||||
SDValue DAGCombiner::visitFNEG(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
// Constant fold FNEG.
|
||||
if (isa<ConstantFPSDNode>(N0))
|
||||
return DAG.getNode(ISD::FNEG, SDLoc(N), VT, N->getOperand(0));
|
||||
|
||||
if (VT.isVector()) {
|
||||
SDValue FoldedVOp = SimplifyVUnaryOp(N);
|
||||
if (FoldedVOp.getNode()) return FoldedVOp;
|
||||
}
|
||||
|
||||
// Constant fold FNEG.
|
||||
if (isa<ConstantFPSDNode>(N0))
|
||||
return DAG.getNode(ISD::FNEG, SDLoc(N), VT, N->getOperand(0));
|
||||
|
||||
if (isNegatibleForFree(N0, LegalOperations, DAG.getTargetLoweringInfo(),
|
||||
&DAG.getTarget().Options))
|
||||
return GetNegatedExpression(N0, DAG, LegalOperations);
|
||||
|
||||
// Transform fneg(bitconvert(x)) -> bitconvert(x ^ sign) to avoid loading
|
||||
// constant pool values.
|
||||
if (!TLI.isFNegFree(VT) && N0.getOpcode() == ISD::BITCAST &&
|
||||
if (!TLI.isFNegFree(VT) &&
|
||||
N0.getOpcode() == ISD::BITCAST &&
|
||||
N0.getNode()->hasOneUse()) {
|
||||
SDValue Int = N0.getOperand(0);
|
||||
EVT IntVT = Int.getValueType();
|
||||
@ -7367,45 +7405,8 @@ SDValue DAGCombiner::visitFNEG(SDNode *N) {
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFCEIL(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
// fold (fceil c1) -> fceil(c1)
|
||||
if (N0CFP)
|
||||
return DAG.getNode(ISD::FCEIL, SDLoc(N), VT, N0);
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFTRUNC(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
// fold (ftrunc c1) -> ftrunc(c1)
|
||||
if (N0CFP)
|
||||
return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0);
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFFLOOR(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
// fold (ffloor c1) -> ffloor(c1)
|
||||
if (N0CFP)
|
||||
return DAG.getNode(ISD::FFLOOR, SDLoc(N), VT, N0);
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFABS(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
if (VT.isVector()) {
|
||||
@ -7414,11 +7415,13 @@ SDValue DAGCombiner::visitFABS(SDNode *N) {
|
||||
}
|
||||
|
||||
// fold (fabs c1) -> fabs(c1)
|
||||
if (N0CFP)
|
||||
if (isa<ConstantFPSDNode>(N0))
|
||||
return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0);
|
||||
|
||||
// fold (fabs (fabs x)) -> (fabs x)
|
||||
if (N0.getOpcode() == ISD::FABS)
|
||||
return N->getOperand(0);
|
||||
|
||||
// fold (fabs (fneg x)) -> (fabs x)
|
||||
// fold (fabs (fcopysign x, y)) -> (fabs x)
|
||||
if (N0.getOpcode() == ISD::FNEG || N0.getOpcode() == ISD::FCOPYSIGN)
|
||||
|
Loading…
Reference in New Issue
Block a user