summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-01-12 00:23:20 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-01-12 00:23:20 +0000
commit4103a81d6d5caecd7e65d8d616963e3160b62c10 (patch)
treedc6af8d86917df4f05a827f34f744a33d5659f89 /llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
parent2529fba989e2c9a7e60cddee63a6c75670a4227d (diff)
downloadbcm5719-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.cpp17
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();
}
OpenPOWER on IntegriCloud