diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/R600Instructions.td')
-rw-r--r-- | llvm/lib/Target/AMDGPU/R600Instructions.td | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/R600Instructions.td b/llvm/lib/Target/AMDGPU/R600Instructions.td index e10cb22fb82..64e9b156dc2 100644 --- a/llvm/lib/Target/AMDGPU/R600Instructions.td +++ b/llvm/lib/Target/AMDGPU/R600Instructions.td @@ -336,6 +336,31 @@ def load_param : LoadParamFrag<load>; def load_param_exti8 : LoadParamFrag<az_extloadi8>; def load_param_exti16 : LoadParamFrag<az_extloadi16>; +class LoadVtxId1 <PatFrag load> : PatFrag < + (ops node:$ptr), (load node:$ptr), [{ + const MemSDNode *LD = cast<MemSDNode>(N); + return LD->getAddressSpace() == AMDGPUAS::GLOBAL_ADDRESS || + (LD->getAddressSpace() == AMDGPUAS::CONSTANT_ADDRESS && + !isa<GlobalValue>(GetUnderlyingObject( + LD->getMemOperand()->getValue(), CurDAG->getDataLayout()))); +}]>; + +def vtx_id1_az_extloadi8 : LoadVtxId1 <az_extloadi8>; +def vtx_id1_az_extloadi16 : LoadVtxId1 <az_extloadi16>; +def vtx_id1_load : LoadVtxId1 <load>; + +class LoadVtxId2 <PatFrag load> : PatFrag < + (ops node:$ptr), (load node:$ptr), [{ + const MemSDNode *LD = cast<MemSDNode>(N); + return LD->getAddressSpace() == AMDGPUAS::CONSTANT_ADDRESS && + isa<GlobalValue>(GetUnderlyingObject( + LD->getMemOperand()->getValue(), CurDAG->getDataLayout())); +}]>; + +def vtx_id2_az_extloadi8 : LoadVtxId2 <az_extloadi8>; +def vtx_id2_az_extloadi16 : LoadVtxId2 <az_extloadi16>; +def vtx_id2_load : LoadVtxId2 <load>; + def isR600 : Predicate<"Subtarget->getGeneration() <= R600Subtarget::R700">; def isR600toCayman |