diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2014-02-06 18:36:41 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2014-02-06 18:36:41 +0000 |
commit | 226bd876c68b0035c9bf2b518271d1620d738d65 (patch) | |
tree | 3927157c7c13fafcdcb59d496ac4ca7e50e62a0b /lib | |
parent | 603cd56372769416346e817f14454f6b796abae3 (diff) | |
download | llvm-226bd876c68b0035c9bf2b518271d1620d738d65.tar.gz llvm-226bd876c68b0035c9bf2b518271d1620d738d65.tar.bz2 llvm-226bd876c68b0035c9bf2b518271d1620d738d65.tar.xz |
R600/SI: Add a MUBUF store pattern for Reg+Imm offsets
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200935 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/R600/SIInstrInfo.td | 5 | ||||
-rw-r--r-- | lib/Target/R600/SIInstructions.td | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/Target/R600/SIInstrInfo.td b/lib/Target/R600/SIInstrInfo.td index 871509f194..988ac37af6 100644 --- a/lib/Target/R600/SIInstrInfo.td +++ b/lib/Target/R600/SIInstrInfo.td @@ -103,6 +103,11 @@ def IMM12bit : PatLeaf <(imm), [{return isUInt<12>(N->getZExtValue());}] >; +def mubuf_vaddr_offset : PatFrag< + (ops node:$ptr, node:$offset, node:$imm_offset), + (add (add node:$ptr, node:$offset), node:$imm_offset) +>; + class InlineImm <ValueType vt> : PatLeaf <(vt imm), [{ return (*(const SITargetLowering *)getTargetLowering()).analyzeImmediate(N) == 0; diff --git a/lib/Target/R600/SIInstructions.td b/lib/Target/R600/SIInstructions.td index cad41f15fe..0a05f90314 100644 --- a/lib/Target/R600/SIInstructions.td +++ b/lib/Target/R600/SIInstructions.td @@ -1960,7 +1960,7 @@ defm : SMRD_Pattern <S_LOAD_DWORDX16_IMM, S_LOAD_DWORDX16_SGPR, v16i32>; multiclass MUBUFLoad_Pattern <MUBUF Instr_ADDR64, ValueType vt, PatFrag global_ld, PatFrag constant_ld> { def : Pat < - (vt (global_ld (add (add i64:$ptr, i64:$offset), IMM12bit:$imm_offset))), + (vt (global_ld (mubuf_vaddr_offset i64:$ptr, i64:$offset, IMM12bit:$imm_offset))), (Instr_ADDR64 (SI_ADDR64_RSRC $ptr), $offset, (as_i16imm $imm_offset)) >; @@ -2007,6 +2007,11 @@ defm : MUBUFLoad_Pattern <BUFFER_LOAD_DWORDX4_ADDR64, v4i32, multiclass MUBUFStore_Pattern <MUBUF Instr, ValueType vt, PatFrag st> { def : Pat < + (st vt:$value, (mubuf_vaddr_offset i64:$ptr, i64:$offset, IMM12bit:$imm_offset)), + (Instr $value, (SI_ADDR64_RSRC $ptr), $offset, (as_i16imm $imm_offset)) + >; + + def : Pat < (st vt:$value, (add i64:$ptr, IMM12bit:$offset)), (Instr $value, (SI_ADDR64_RSRC (i64 0)), $ptr, (as_i16imm $offset)) >; |