diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-06-24 22:13:39 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-06-24 22:13:39 +0000 |
commit | 95eb45c5d94bfe9360ffc021697a50c6cf8c08cd (patch) | |
tree | ccff569afcf67b58b968ce88f204ad9641431949 /lib/Target/R600/AMDGPUInstructions.td | |
parent | 0029534141ee83d827267d4ac9418bbed5704c2e (diff) | |
download | llvm-95eb45c5d94bfe9360ffc021697a50c6cf8c08cd.tar.gz llvm-95eb45c5d94bfe9360ffc021697a50c6cf8c08cd.tar.bz2 llvm-95eb45c5d94bfe9360ffc021697a50c6cf8c08cd.tar.xz |
R600: Fix inconsistency in rsq instructions.
R600 was using a clamped version of rsq, but SI was not. Add a
new rsq_clamped intrinsic and use them consistently.
It's unclear to me from the documentation what behavior
the R600 instructions have, so I assume they have the legacy behavior
described by the SI documents. For R600, use RECIPSQRT_IEEE
for both llvm.AMDGPU.rsq.legacy and llvm.AMDGPU.rsq. R600 also
has RECIPSQRT_FF, which I'm not sure how it fits in here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211637 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/R600/AMDGPUInstructions.td')
-rw-r--r-- | lib/Target/R600/AMDGPUInstructions.td | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/Target/R600/AMDGPUInstructions.td b/lib/Target/R600/AMDGPUInstructions.td index 14bfd8cc18..b86b7818fc 100644 --- a/lib/Target/R600/AMDGPUInstructions.td +++ b/lib/Target/R600/AMDGPUInstructions.td @@ -524,10 +524,17 @@ class RcpPat<Instruction RcpInst, ValueType vt> : Pat < (RcpInst $src) >; -class RsqPat<Instruction RsqInst, ValueType vt> : Pat < - (AMDGPUrcp (fsqrt vt:$src)), - (RsqInst $src) ->; +multiclass RsqPat<Instruction RsqInst, ValueType vt> { + def : Pat < + (fdiv FP_ONE, (fsqrt vt:$src)), + (RsqInst $src) + >; + + def : Pat < + (AMDGPUrcp (fsqrt vt:$src)), + (RsqInst $src) + >; +} include "R600Instructions.td" include "R700Instructions.td" |