diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-12 17:46:33 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-12 17:46:33 +0000 |
commit | 4242d48c36f25aca0328ef38eb256300e94f6801 (patch) | |
tree | 348b515433fc7c55662aa6e571fa00e8c1cf7219 /llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | |
parent | 98d2bf10244e03014412d73fb0f5c0b653643175 (diff) | |
download | bcm5719-llvm-4242d48c36f25aca0328ef38eb256300e94f6801.tar.gz bcm5719-llvm-4242d48c36f25aca0328ef38eb256300e94f6801.zip |
AMDGPU: Fold fneg into fp_round
llvm-svn: 291778
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index 043f613b96c..2b6edba9f0b 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -2903,7 +2903,7 @@ SDValue AMDGPUTargetLowering::performFNegCombine(SDNode *N, SDValue CvtSrc = N0.getOperand(0); if (CvtSrc.getOpcode() == ISD::FNEG) { // (fneg (fp_extend (fneg x))) -> (fp_extend x) - return DAG.getNode(ISD::FP_EXTEND, SL, VT, CvtSrc.getOperand(0)); + return DAG.getNode(Opc, SL, VT, CvtSrc.getOperand(0)); } if (!N0.hasOneUse()) @@ -2911,7 +2911,23 @@ SDValue AMDGPUTargetLowering::performFNegCombine(SDNode *N, // (fneg (fp_extend x)) -> (fp_extend (fneg x)) SDValue Neg = DAG.getNode(ISD::FNEG, SL, CvtSrc.getValueType(), CvtSrc); - return DAG.getNode(ISD::FP_EXTEND, SL, VT, Neg); + return DAG.getNode(Opc, SL, VT, Neg); + } + case ISD::FP_ROUND: { + SDValue CvtSrc = N0.getOperand(0); + + if (CvtSrc.getOpcode() == ISD::FNEG) { + // (fneg (fp_round (fneg x))) -> (fp_round x) + return DAG.getNode(ISD::FP_ROUND, SL, VT, + CvtSrc.getOperand(0), N0.getOperand(1)); + } + + if (!N0.hasOneUse()) + return SDValue(); + + // (fneg (fp_round x)) -> (fp_round (fneg x)) + SDValue Neg = DAG.getNode(ISD::FNEG, SL, CvtSrc.getValueType(), CvtSrc); + return DAG.getNode(ISD::FP_ROUND, SL, VT, Neg, N0.getOperand(1)); } default: return SDValue(); |