diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2013-11-13 23:36:50 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2013-11-13 23:36:50 +0000 |
commit | a2b4eb6d15a13de257319ac6231b5ab622cd02b1 (patch) | |
tree | 3147a7994db9c80cbaa22526fae0dbfdc780c212 /lib/Target/R600/SIInstructions.td | |
parent | b52bf6a3b31596a309f4b12884522e9b4a344654 (diff) | |
download | llvm-a2b4eb6d15a13de257319ac6231b5ab622cd02b1.tar.gz llvm-a2b4eb6d15a13de257319ac6231b5ab622cd02b1.tar.bz2 llvm-a2b4eb6d15a13de257319ac6231b5ab622cd02b1.tar.xz |
R600/SI: Add support for private address space load/store
Private address space is emulated using the register file with
MOVRELS and MOVRELD instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194626 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/R600/SIInstructions.td')
-rw-r--r-- | lib/Target/R600/SIInstructions.td | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/lib/Target/R600/SIInstructions.td b/lib/Target/R600/SIInstructions.td index 1823168dfa..fb9ae45db5 100644 --- a/lib/Target/R600/SIInstructions.td +++ b/lib/Target/R600/SIInstructions.td @@ -1293,6 +1293,36 @@ def SI_KILL : InstSI < let Uses = [EXEC], Defs = [EXEC,VCC,M0] in { +//defm SI_ : RegisterLoadStore <VReg_32, FRAMEri64, ADDRIndirect>; + +let UseNamedOperandTable = 1 in { + +def SI_RegisterLoad : AMDGPUShaderInst < + (outs VReg_32:$dst, SReg_64:$temp), + (ins FRAMEri64:$addr, i32imm:$chan), + "", [] +> { + let isRegisterLoad = 1; + let mayLoad = 1; +} + +class SIRegStore<dag outs> : AMDGPUShaderInst < + outs, + (ins VReg_32:$val, FRAMEri64:$addr, i32imm:$chan), + "", [] +> { + let isRegisterStore = 1; + let mayStore = 1; +} + +let usesCustomInserter = 1 in { +def SI_RegisterStorePseudo : SIRegStore<(outs)>; +} // End usesCustomInserter = 1 +def SI_RegisterStore : SIRegStore<(outs SReg_64:$temp)>; + + +} // End UseNamedOperandTable = 1 + def SI_INDIRECT_SRC : InstSI < (outs VReg_32:$dst, SReg_64:$temp), (ins unknown:$src, VSrc_32:$idx, i32imm:$off), @@ -1309,6 +1339,7 @@ class SI_INDIRECT_DST<RegisterClass rc> : InstSI < let Constraints = "$src = $dst"; } +def SI_INDIRECT_DST_V1 : SI_INDIRECT_DST<VReg_32>; def SI_INDIRECT_DST_V2 : SI_INDIRECT_DST<VReg_64>; def SI_INDIRECT_DST_V4 : SI_INDIRECT_DST<VReg_128>; def SI_INDIRECT_DST_V8 : SI_INDIRECT_DST<VReg_256>; @@ -1988,7 +2019,7 @@ def : Pat< (V_CMP_U_F32_e64 $src0, $src1) >; -//============================================================================// +//===----------------------------------------------------------------------===// // Miscellaneous Patterns //===----------------------------------------------------------------------===// @@ -2000,6 +2031,11 @@ def : Pat < >; def : Pat < + (i32 (trunc i64:$a)), + (EXTRACT_SUBREG $a, sub0) +>; + +def : Pat < (or i64:$a, i64:$b), (INSERT_SUBREG (INSERT_SUBREG (IMPLICIT_DEF), |