diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-08-06 21:58:11 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-08-06 21:58:11 +0000 |
commit | d49ab0b21486dd47284eef8b0f075128adc4128b (patch) | |
tree | 4d7f4e6f754da2157c4b31cf1c7da48d2b9fa7d5 /llvm/lib | |
parent | ce6d61fba83d926c8dfacedae4d25c44e28ab893 (diff) | |
download | bcm5719-llvm-d49ab0b21486dd47284eef8b0f075128adc4128b.tar.gz bcm5719-llvm-d49ab0b21486dd47284eef8b0f075128adc4128b.zip |
AMDGPU: Treat more custom operations as canonicalizing
Everything should quiet, and I think everything should
flush.
I assume the min3/med3/max3 follow the same rules
as regular min/max for flushing, which should at
least be conservatively correct.
There are still more operations that need to
be handled.
llvm-svn: 339065
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 18 |
2 files changed, 21 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index 311b2f7f674..7ccdcef575c 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -4369,7 +4369,8 @@ bool AMDGPUTargetLowering::isKnownNeverNaNForTargetNode(SDValue Op, // TODO: Need is known positive check. return false; } - case AMDGPUISD::LDEXP: { + case AMDGPUISD::LDEXP: + case AMDGPUISD::FRACT: { if (SNaN) return true; return DAG.isKnownNeverNaN(Op.getOperand(0), SNaN, Depth + 1); @@ -4394,6 +4395,8 @@ bool AMDGPUTargetLowering::isKnownNeverNaNForTargetNode(SDValue Op, return true; case Intrinsic::amdgcn_frexp_mant: + if (SNaN) + return true; return DAG.isKnownNeverNaN(Op.getOperand(1), SNaN, Depth + 1); default: return false; diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index c598c6d69cc..feb8a40245f 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -6779,6 +6779,18 @@ bool SITargetLowering::isCanonicalized(SelectionDAG &DAG, SDValue Op, case ISD::FP_EXTEND: case AMDGPUISD::FMUL_LEGACY: case AMDGPUISD::FMAD_FTZ: + case AMDGPUISD::RCP: + case AMDGPUISD::RSQ: + case AMDGPUISD::RSQ_CLAMP: + case AMDGPUISD::RCP_LEGACY: + case AMDGPUISD::RSQ_LEGACY: + case AMDGPUISD::RCP_IFLAG: + case AMDGPUISD::TRIG_PREOP: + case AMDGPUISD::DIV_SCALE: + case AMDGPUISD::DIV_FMAS: + case AMDGPUISD::DIV_FIXUP: + case AMDGPUISD::FRACT: + case AMDGPUISD::LDEXP: return true; // It can/will be lowered or combined as a bit operation. @@ -6794,7 +6806,11 @@ bool SITargetLowering::isCanonicalized(SelectionDAG &DAG, SDValue Op, return Op.getValueType().getScalarType() != MVT::f16; case ISD::FMINNUM: - case ISD::FMAXNUM: { + case ISD::FMAXNUM: + case AMDGPUISD::CLAMP: + case AMDGPUISD::FMED3: + case AMDGPUISD::FMAX3: + case AMDGPUISD::FMIN3: { // FIXME: Shouldn't treat the generic operations different based these. bool IsIEEEMode = Subtarget->enableIEEEBit(DAG.getMachineFunction()); if (IsIEEEMode) { |