summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2018-09-18 02:34:54 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2018-09-18 02:34:54 +0000
commitebf46143eaf7fa3ad956baf8cc876cbe2c6ae306 (patch)
tree6f5f635699a2260849cffa397f4052c2609f8b14 /llvm/lib/Target/AMDGPU/SIISelLowering.cpp
parentc64079859767f30319bd3ceb93e36f35e2dc0b17 (diff)
downloadbcm5719-llvm-ebf46143eaf7fa3ad956baf8cc876cbe2c6ae306.tar.gz
bcm5719-llvm-ebf46143eaf7fa3ad956baf8cc876cbe2c6ae306.zip
AMDGPU: Don't form fmed3 if it will require materialization
If there is a single use constant, it can be folded into the min/max, but not into med3. llvm-svn: 342443
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIISelLowering.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/SIISelLowering.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 47217a06d48..3de6a546a4f 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -7733,8 +7733,15 @@ SDValue SITargetLowering::performFPMed3ImmCombine(SelectionDAG &DAG,
if (!DAG.isKnownNeverSNaN(Var))
return SDValue();
- return DAG.getNode(AMDGPUISD::FMED3, SL, K0->getValueType(0),
- Var, SDValue(K0, 0), SDValue(K1, 0));
+ const SIInstrInfo *TII = getSubtarget()->getInstrInfo();
+
+ if ((!K0->hasOneUse() ||
+ TII->isInlineConstant(K0->getValueAPF().bitcastToAPInt())) &&
+ (!K1->hasOneUse() ||
+ TII->isInlineConstant(K1->getValueAPF().bitcastToAPInt()))) {
+ return DAG.getNode(AMDGPUISD::FMED3, SL, K0->getValueType(0),
+ Var, SDValue(K0, 0), SDValue(K1, 0));
+ }
}
return SDValue();
OpenPOWER on IntegriCloud