summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-10-13 20:18:59 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-10-13 20:18:59 +0000
commit4d70754e3cf57d76647b62cecaa37fb06815566a (patch)
treef7a15623b1d3e237b2f3cd259c7b5b4e451d68e5 /llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
parent28b3aa3663a4c3ed0cf23625a04f5bec8ae90653 (diff)
downloadbcm5719-llvm-4d70754e3cf57d76647b62cecaa37fb06815566a.tar.gz
bcm5719-llvm-4d70754e3cf57d76647b62cecaa37fb06815566a.zip
AMDGPU: Implement isFPExtFoldable
This helps match v_mad_mix* in some cases. llvm-svn: 315744
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
index 6146c49a0f1..09914e0397c 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
@@ -827,6 +827,17 @@ bool AMDGPUTargetLowering::isZExtFree(SDValue Val, EVT VT2) const {
return isZExtFree(Val.getValueType(), VT2);
}
+// v_mad_mix* support a conversion from f16 to f32.
+//
+// There is only one special case when denormals are enabled we don't currently,
+// where this is OK to use.
+bool AMDGPUTargetLowering::isFPExtFoldable(unsigned Opcode,
+ EVT DestVT, EVT SrcVT) const {
+ return Opcode == ISD::FMAD && Subtarget->hasMadMixInsts() &&
+ DestVT.getScalarType() == MVT::f32 && !Subtarget->hasFP32Denormals() &&
+ SrcVT.getScalarType() == MVT::f16;
+}
+
bool AMDGPUTargetLowering::isNarrowingProfitable(EVT SrcVT, EVT DestVT) const {
// There aren't really 64-bit registers, but pairs of 32-bit ones and only a
// limited number of native 64-bit operations. Shrinking an operation to fit
OpenPOWER on IntegriCloud