Index: llvm/lib/Target/AMDGPU/SIInstrInfo.td =================================================================== --- llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -579,46 +579,37 @@ // SDNodes PatFrags for d16 loads //===----------------------------------------------------------------------===// -class LoadD16Frag : PatFrag<(ops node:$ptr, node:$tied_in), (op node:$ptr, node:$tied_in)>; -class LocalLoadD16 : LoadD16Frag , LocalAddress; -class GlobalLoadD16 : LoadD16Frag , GlobalLoadAddress; -class PrivateLoadD16 : LoadD16Frag , PrivateAddress; -class FlatLoadD16 : LoadD16Frag , FlatLoadAddress; - -def load_d16_hi_local : LocalLoadD16 ; -def az_extloadi8_d16_hi_local : LocalLoadD16 ; -def sextloadi8_d16_hi_local : LocalLoadD16 ; - -def load_d16_hi_global : GlobalLoadD16 ; -def az_extloadi8_d16_hi_global : GlobalLoadD16 ; -def sextloadi8_d16_hi_global : GlobalLoadD16 ; - -def load_d16_hi_private : PrivateLoadD16 ; -def az_extloadi8_d16_hi_private : PrivateLoadD16 ; -def sextloadi8_d16_hi_private : PrivateLoadD16 ; +class LoadD16Frag : PatFrag< + (ops node:$ptr, node:$tied_in), + (op node:$ptr, node:$tied_in)> { + let IsLoad = 1; +} -def load_d16_hi_flat : FlatLoadD16 ; -def az_extloadi8_d16_hi_flat : FlatLoadD16 ; -def sextloadi8_d16_hi_flat : FlatLoadD16 ; +foreach as = [ "global", "flat", "constant", "local", "private", "region" ] in { +let AddressSpaces = !cast("LoadAddress_"#as).AddrSpaces in { +def load_d16_hi_#as : LoadD16Frag ; -def load_d16_lo_local : LocalLoadD16 ; -def az_extloadi8_d16_lo_local : LocalLoadD16 ; -def sextloadi8_d16_lo_local : LocalLoadD16 ; +def az_extloadi8_d16_hi_#as : LoadD16Frag { + let MemoryVT = i8; +} -def load_d16_lo_global : GlobalLoadD16 ; -def az_extloadi8_d16_lo_global : GlobalLoadD16 ; -def sextloadi8_d16_lo_global : GlobalLoadD16 ; +def sextloadi8_d16_hi_#as : LoadD16Frag { + let MemoryVT = i8; +} -def load_d16_lo_private : PrivateLoadD16 ; -def az_extloadi8_d16_lo_private : PrivateLoadD16 ; -def sextloadi8_d16_lo_private : PrivateLoadD16 ; +def load_d16_lo_#as : LoadD16Frag ; -def load_d16_lo_flat : FlatLoadD16 ; -def az_extloadi8_d16_lo_flat : FlatLoadD16 ; -def sextloadi8_d16_lo_flat : FlatLoadD16 ; +def az_extloadi8_d16_lo_#as : LoadD16Frag { + let MemoryVT = i8; +} +def sextloadi8_d16_lo_#as : LoadD16Frag { + let MemoryVT = i8; +} +} // End let AddressSpaces = ... +} // End foreach AddrSpace def lshr_rev : PatFrag < (ops node:$src1, node:$src0),