diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-12 00:23:20 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-12 00:23:20 +0000 |
commit | 4103a81d6d5caecd7e65d8d616963e3160b62c10 (patch) | |
tree | dc6af8d86917df4f05a827f34f744a33d5659f89 /llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | |
parent | 2529fba989e2c9a7e60cddee63a6c75670a4227d (diff) | |
download | bcm5719-llvm-4103a81d6d5caecd7e65d8d616963e3160b62c10.tar.gz bcm5719-llvm-4103a81d6d5caecd7e65d8d616963e3160b62c10.zip |
AMDGPU: Fold fneg into fmul
Patch mostly by Fiona Glaser
llvm-svn: 291732
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index 43425a919d7..6973c7593ba 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -2858,6 +2858,23 @@ SDValue AMDGPUTargetLowering::performFNegCombine(SDNode *N, DAG.ReplaceAllUsesWith(N0, DAG.getNode(ISD::FNEG, SL, VT, Res)); return Res; } + case ISD::FMUL: { + // (fneg (fmul x, y)) -> (fmul x, (fneg y)) + SDValue LHS = N0.getOperand(0); + SDValue RHS = N0.getOperand(1); + + if (LHS.getOpcode() == ISD::FNEG) + LHS = LHS.getOperand(0); + else if (RHS.getOpcode() == ISD::FNEG) + RHS = RHS.getOperand(0); + else + RHS = DAG.getNode(ISD::FNEG, SL, VT, RHS); + + SDValue Res = DAG.getNode(ISD::FMUL, SL, VT, LHS, RHS); + if (!N0.hasOneUse()) + DAG.ReplaceAllUsesWith(N0, DAG.getNode(ISD::FNEG, SL, VT, Res)); + return Res; + } default: return SDValue(); } |