From: Matt Arsenault Date: Tue, 16 Jul 2019 02:46:05 +0000 (+0000) Subject: AMDGPU: Avoid code predicates for extload PatFrags X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=48a2462687932fd6f424a4d6c683256cb7235c4d;p=llvm AMDGPU: Avoid code predicates for extload PatFrags Use the MemoryVT field. This will be necessary for tablegen to automatically handle patterns for GlobalISel. Doesn't handle the d16 lo/hi patterns. Those are a special case since it involvess the custom node type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366168 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AMDGPU/AMDGPUInstructions.td b/lib/Target/AMDGPU/AMDGPUInstructions.td index b29b0e7b17e..9e9510e0fa4 100644 --- a/lib/Target/AMDGPU/AMDGPUInstructions.td +++ b/lib/Target/AMDGPU/AMDGPUInstructions.td @@ -379,27 +379,6 @@ class FlatStoreAddress : CodePatPred<[{ AS == AMDGPUAS::GLOBAL_ADDRESS; }]>; -class AZExtLoadBase : PatFrag<(ops node:$ptr), - (ld_node node:$ptr), [{ - LoadSDNode *L = cast(N); - return L->getExtensionType() == ISD::ZEXTLOAD || - L->getExtensionType() == ISD::EXTLOAD; -}]>; - -def az_extload : AZExtLoadBase ; - -def az_extloadi8 : PatFrag<(ops node:$ptr), (az_extload node:$ptr), [{ - return cast(N)->getMemoryVT() == MVT::i8; -}]>; - -def az_extloadi16 : PatFrag<(ops node:$ptr), (az_extload node:$ptr), [{ - return cast(N)->getMemoryVT() == MVT::i16; -}]>; - -def az_extloadi32 : PatFrag<(ops node:$ptr), (az_extload node:$ptr), [{ - return cast(N)->getMemoryVT() == MVT::i32; -}]>; - class PrivateLoad : LoadFrag , PrivateAddress; class PrivateStore : StoreFrag , PrivateAddress; @@ -419,9 +398,11 @@ class ConstantLoad : LoadFrag , ConstantAddress; def load_private : PrivateLoad ; -def az_extloadi8_private : PrivateLoad ; +def extloadi8_private : PrivateLoad ; +def zextloadi8_private : PrivateLoad ; def sextloadi8_private : PrivateLoad ; -def az_extloadi16_private : PrivateLoad ; +def extloadi16_private : PrivateLoad ; +def zextloadi16_private : PrivateLoad ; def sextloadi16_private : PrivateLoad ; def store_private : PrivateStore ; @@ -433,9 +414,11 @@ def truncstorei8_hi16_private : StoreHi16, PrivateAddress; def load_global : GlobalLoad ; def sextloadi8_global : GlobalLoad ; -def az_extloadi8_global : GlobalLoad ; +def extloadi8_global : GlobalLoad ; +def zextloadi8_global : GlobalLoad ; def sextloadi16_global : GlobalLoad ; -def az_extloadi16_global : GlobalLoad ; +def extloadi16_global : GlobalLoad ; +def zextloadi16_global : GlobalLoad ; def atomic_load_global : GlobalLoad; def store_global : GlobalStore ; @@ -479,9 +462,11 @@ def store_align16_local : Aligned16Bytes < >; def load_flat : FlatLoad ; -def az_extloadi8_flat : FlatLoad ; +def extloadi8_flat : FlatLoad ; +def zextloadi8_flat : FlatLoad ; def sextloadi8_flat : FlatLoad ; -def az_extloadi16_flat : FlatLoad ; +def extloadi16_flat : FlatLoad ; +def zextloadi16_flat : FlatLoad ; def sextloadi16_flat : FlatLoad ; def atomic_load_flat : FlatLoad; @@ -495,9 +480,11 @@ def truncstorei16_hi16_flat : StoreHi16, FlatStoreAddress; def constant_load : ConstantLoad; def sextloadi8_constant : ConstantLoad ; -def az_extloadi8_constant : ConstantLoad ; +def extloadi8_constant : ConstantLoad ; +def zextloadi8_constant : ConstantLoad ; def sextloadi16_constant : ConstantLoad ; -def az_extloadi16_constant : ConstantLoad ; +def extloadi16_constant : ConstantLoad ; +def zextloadi16_constant : ConstantLoad ; class local_binary_atomic_op : diff --git a/lib/Target/AMDGPU/BUFInstructions.td b/lib/Target/AMDGPU/BUFInstructions.td index 7d9ca59c6d0..4ff9aeb2e31 100644 --- a/lib/Target/AMDGPU/BUFInstructions.td +++ b/lib/Target/AMDGPU/BUFInstructions.td @@ -851,9 +851,11 @@ defm BUFFER_LOAD_DWORDX4 : MUBUF_Pseudo_Loads < "buffer_load_dwordx4", VReg_128, v4i32 >; -defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_UBYTE", i32, az_extloadi8_global>; +defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_UBYTE", i32, extloadi8_global>; +defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_UBYTE", i32, zextloadi8_global>; defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_SBYTE", i32, sextloadi8_global>; -defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_USHORT", i32, az_extloadi16_global>; +defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_USHORT", i32, extloadi16_global>; +defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_USHORT", i32, zextloadi16_global>; defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_SSHORT", i32, sextloadi16_global>; defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_DWORD", i32, load_global>; defm : MUBUF_Pseudo_Load_Pats<"BUFFER_LOAD_DWORDX2", v2i32, load_global>; @@ -1437,9 +1439,11 @@ multiclass MUBUFLoad_Atomic_Pattern ; -def : MUBUFLoad_PatternADDR64 ; +def : MUBUFLoad_PatternADDR64 ; +def : MUBUFLoad_PatternADDR64 ; def : MUBUFLoad_PatternADDR64 ; -def : MUBUFLoad_PatternADDR64 ; +def : MUBUFLoad_PatternADDR64 ; +def : MUBUFLoad_PatternADDR64 ; defm : MUBUFLoad_Atomic_Pattern ; defm : MUBUFLoad_Atomic_Pattern ; @@ -1458,9 +1462,11 @@ multiclass MUBUFLoad_Pattern ; -defm : MUBUFLoad_Pattern ; +defm : MUBUFLoad_Pattern ; +defm : MUBUFLoad_Pattern ; defm : MUBUFLoad_Pattern ; -defm : MUBUFLoad_Pattern ; +defm : MUBUFLoad_Pattern ; +defm : MUBUFLoad_Pattern ; defm : MUBUFLoad_Pattern ; @@ -1497,11 +1503,14 @@ multiclass MUBUFScratchLoadPat_D16 ; -defm : MUBUFScratchLoadPat ; +defm : MUBUFScratchLoadPat ; +defm : MUBUFScratchLoadPat ; defm : MUBUFScratchLoadPat ; -defm : MUBUFScratchLoadPat ; +defm : MUBUFScratchLoadPat ; +defm : MUBUFScratchLoadPat ; defm : MUBUFScratchLoadPat ; -defm : MUBUFScratchLoadPat ; +defm : MUBUFScratchLoadPat ; +defm : MUBUFScratchLoadPat ; defm : MUBUFScratchLoadPat ; defm : MUBUFScratchLoadPat ; defm : MUBUFScratchLoadPat ; diff --git a/lib/Target/AMDGPU/EvergreenInstructions.td b/lib/Target/AMDGPU/EvergreenInstructions.td index fbe7d757f35..0550092ce1d 100644 --- a/lib/Target/AMDGPU/EvergreenInstructions.td +++ b/lib/Target/AMDGPU/EvergreenInstructions.td @@ -30,10 +30,6 @@ class EGOrCaymanPat : AMDGPUPat { let SubtargetPredicate = isEGorCayman; } -// FIXME: These are deprecated -def az_extloadi8_local : LocalLoad ; -def az_extloadi16_local : LocalLoad ; - //===----------------------------------------------------------------------===// // Evergreen / Cayman store instructions //===----------------------------------------------------------------------===// diff --git a/lib/Target/AMDGPU/FLATInstructions.td b/lib/Target/AMDGPU/FLATInstructions.td index df334790b85..4070d94dd4a 100644 --- a/lib/Target/AMDGPU/FLATInstructions.td +++ b/lib/Target/AMDGPU/FLATInstructions.td @@ -767,11 +767,14 @@ class FlatSignedAtomicPat ; +def : FlatLoadPat ; +def : FlatLoadPat ; def : FlatLoadPat ; -def : FlatLoadPat ; +def : FlatLoadPat ; +def : FlatLoadPat ; def : FlatLoadPat ; -def : FlatLoadPat ; +def : FlatLoadPat ; +def : FlatLoadPat ; def : FlatLoadPat ; def : FlatLoadPat ; def : FlatLoadPat ; @@ -849,11 +852,14 @@ def atomic_pk_fadd_global : global_binary_atomic_op_frag; +def : FlatLoadSignedPat ; +def : FlatLoadSignedPat ; def : FlatLoadSignedPat ; -def : FlatLoadSignedPat ; +def : FlatLoadSignedPat ; +def : FlatLoadSignedPat ; def : FlatLoadSignedPat ; -def : FlatLoadSignedPat ; +def : FlatLoadSignedPat ; +def : FlatLoadSignedPat ; def : FlatLoadSignedPat ; def : FlatLoadSignedPat ; diff --git a/lib/Target/AMDGPU/R600Instructions.td b/lib/Target/AMDGPU/R600Instructions.td index dcbedbd8cfd..d3ce7ffd673 100644 --- a/lib/Target/AMDGPU/R600Instructions.td +++ b/lib/Target/AMDGPU/R600Instructions.td @@ -295,6 +295,32 @@ class VTX_READ pattern> let VTXInst = 1; } +// FIXME: Deprecated. +class AZExtLoadBase : PatFrag<(ops node:$ptr), + (ld_node node:$ptr), [{ + LoadSDNode *L = cast(N); + return L->getExtensionType() == ISD::ZEXTLOAD || + L->getExtensionType() == ISD::EXTLOAD; +}]>; + +def az_extload : AZExtLoadBase ; + +def az_extloadi8 : PatFrag<(ops node:$ptr), (az_extload node:$ptr), [{ + return cast(N)->getMemoryVT() == MVT::i8; +}]>; + +def az_extloadi16 : PatFrag<(ops node:$ptr), (az_extload node:$ptr), [{ + return cast(N)->getMemoryVT() == MVT::i16; +}]>; + +def az_extloadi32 : PatFrag<(ops node:$ptr), (az_extload node:$ptr), [{ + return cast(N)->getMemoryVT() == MVT::i32; +}]>; + +// FIXME: These are deprecated +def az_extloadi8_local : LocalLoad ; +def az_extloadi16_local : LocalLoad ; + class LoadParamFrag : PatFrag < (ops node:$ptr), (load_type node:$ptr), [{ return isConstantLoad(cast(N), 0) ||