summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-01-12 17:46:35 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-01-12 17:46:35 +0000
commitff7e5aadf5aa169b1cb675475b6600c2462c0b72 (patch)
treed0287006275574e32742eef5028f01002cd186ee /llvm/lib/Target
parent4242d48c36f25aca0328ef38eb256300e94f6801 (diff)
downloadbcm5719-llvm-ff7e5aadf5aa169b1cb675475b6600c2462c0b72.tar.gz
bcm5719-llvm-ff7e5aadf5aa169b1cb675475b6600c2462c0b72.zip
AMDGPU: Fold fneg into rcp
llvm-svn: 291779
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
index 2b6edba9f0b..99700147880 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
@@ -2813,6 +2813,8 @@ static bool fnegFoldsIntoOp(unsigned Opc) {
case ISD::FMUL:
case ISD::FMA:
case ISD::FMAD:
+ case AMDGPUISD::RCP:
+ case AMDGPUISD::RCP_LEGACY:
return true;
default:
return false;
@@ -2899,10 +2901,13 @@ SDValue AMDGPUTargetLowering::performFNegCombine(SDNode *N,
DAG.ReplaceAllUsesWith(N0, DAG.getNode(ISD::FNEG, SL, VT, Res));
return Res;
}
- case ISD::FP_EXTEND: {
+ case ISD::FP_EXTEND:
+ case AMDGPUISD::RCP:
+ case AMDGPUISD::RCP_LEGACY: {
SDValue CvtSrc = N0.getOperand(0);
if (CvtSrc.getOpcode() == ISD::FNEG) {
// (fneg (fp_extend (fneg x))) -> (fp_extend x)
+ // (fneg (rcp (fneg x))) -> (rcp x)
return DAG.getNode(Opc, SL, VT, CvtSrc.getOperand(0));
}
@@ -2910,6 +2915,7 @@ SDValue AMDGPUTargetLowering::performFNegCombine(SDNode *N,
return SDValue();
// (fneg (fp_extend x)) -> (fp_extend (fneg x))
+ // (fneg (rcp x)) -> (rcp (fneg x))
SDValue Neg = DAG.getNode(ISD::FNEG, SL, CvtSrc.getValueType(), CvtSrc);
return DAG.getNode(Opc, SL, VT, Neg);
}
OpenPOWER on IntegriCloud