diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUInstructions.td | 20 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/DSInstructions.td | 4 |
2 files changed, 9 insertions, 15 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td b/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td index 89e52d63af2..cc006f38fe5 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td +++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td @@ -343,8 +343,9 @@ class StoreFrag<SDPatternOperator op> : PatFrag < >; class StoreHi16<SDPatternOperator op> : PatFrag < - (ops node:$value, node:$ptr), (op (srl node:$value, (i32 16)), node:$ptr) ->; + (ops node:$value, node:$ptr), (op (srl node:$value, (i32 16)), node:$ptr)> { + let IsStore = 1; +} def LoadAddress_constant : AddressSpaceList<[ AddrSpaces.Constant ]>; def LoadAddress_global : AddressSpaceList<[ AddrSpaces.Global, AddrSpaces.Constant ]>; @@ -485,6 +486,10 @@ def truncstorei16_#as : PatFrag<(ops node:$val, node:$ptr), let MemoryVT = i16; } +def store_hi16_#as : StoreHi16 <truncstorei16>; +def truncstorei8_hi16_#as : StoreHi16<truncstorei8>; +def truncstorei16_hi16_#as : StoreHi16<truncstorei16>; + defm atomic_store_#as : binary_atomic_op<atomic_store>; } // End let AddressSpaces = ... @@ -520,16 +525,7 @@ defm atomic_load_xor : ret_noret_binary_atomic_op<atomic_load_xor>; defm atomic_load_fadd : ret_noret_binary_atomic_op<atomic_load_fadd, 0>; defm AMDGPUatomic_cmp_swap : ret_noret_binary_atomic_op<AMDGPUatomic_cmp_swap>; - -def store_hi16_private : StoreHi16 <truncstorei16>, PrivateAddress; -def truncstorei8_hi16_private : StoreHi16<truncstorei8>, PrivateAddress; - def store_atomic_global : GlobalStore<atomic_store>; -def truncstorei8_hi16_global : StoreHi16 <truncstorei8>, GlobalAddress; -def truncstorei16_hi16_global : StoreHi16 <truncstorei16>, GlobalAddress; - -def store_local_hi16 : StoreHi16 <truncstorei16>, LocalAddress; -def truncstorei8_local_hi16 : StoreHi16<truncstorei8>, LocalAddress; def atomic_store_local : LocalStore <atomic_store>; @@ -559,8 +555,6 @@ def store_align16_local: PatFrag<(ops node:$val, node:$ptr), def atomic_store_flat : FlatStore <atomic_store>; -def truncstorei8_hi16_flat : StoreHi16<truncstorei8>, FlatStoreAddress; -def truncstorei16_hi16_flat : StoreHi16<truncstorei16>, FlatStoreAddress; class local_binary_atomic_op<SDNode atomic_op> : diff --git a/llvm/lib/Target/AMDGPU/DSInstructions.td b/llvm/lib/Target/AMDGPU/DSInstructions.td index f0987cffd10..f4e50e3a15e 100644 --- a/llvm/lib/Target/AMDGPU/DSInstructions.td +++ b/llvm/lib/Target/AMDGPU/DSInstructions.td @@ -733,8 +733,8 @@ defm : DSAtomicWritePat_mc <DS_WRITE_B32, i32, "atomic_store_local_32">; defm : DSAtomicWritePat_mc <DS_WRITE_B64, i64, "atomic_store_local_64">; let OtherPredicates = [D16PreservesUnusedBits] in { -def : DSWritePat <DS_WRITE_B16_D16_HI, i32, store_local_hi16>; -def : DSWritePat <DS_WRITE_B8_D16_HI, i32, truncstorei8_local_hi16>; +def : DSWritePat <DS_WRITE_B16_D16_HI, i32, store_hi16_local>; +def : DSWritePat <DS_WRITE_B8_D16_HI, i32, truncstorei8_hi16_local>; } |