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
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 47217a0..3de6a54 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -7733,8 +7733,15 @@
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();