[PATCH] R600/SI: Add isMUBUF / isMTBUF

Tom Stellard tom at stellard.net
Tue Jul 29 07:23:52 PDT 2014


On Mon, Jul 28, 2014 at 11:29:59PM +0000, Matt Arsenault wrote:
> Also add missing comments about how the flags work.

LGTM.

> 
> http://reviews.llvm.org/D4701
> 
> Files:
>   lib/Target/R600/SIDefines.h
>   lib/Target/R600/SIInstrFormats.td
>   lib/Target/R600/SIInstrInfo.cpp
>   lib/Target/R600/SIInstrInfo.h
> 
> Index: lib/Target/R600/SIDefines.h
> ===================================================================
> --- lib/Target/R600/SIDefines.h
> +++ lib/Target/R600/SIDefines.h
> @@ -12,6 +12,7 @@
>  #define SIDEFINES_H_
>  
>  namespace SIInstrFlags {
> +// This needs to be kept in sync with the field bits in InstSI.
>  enum {
>    MIMG = 1 << 3,
>    SMRD = 1 << 4,
> @@ -19,7 +20,9 @@
>    VOP2 = 1 << 6,
>    VOP3 = 1 << 7,
>    VOPC = 1 << 8,
> -  SALU = 1 << 9
> +  SALU = 1 << 9,
> +  MUBUF = 1 << 10,
> +  MTBUF = 1 << 11
>  };
>  }
>  
> Index: lib/Target/R600/SIInstrFormats.td
> ===================================================================
> --- lib/Target/R600/SIInstrFormats.td
> +++ lib/Target/R600/SIInstrFormats.td
> @@ -24,7 +24,10 @@
>    field bits<1> VOP3 = 0;
>    field bits<1> VOPC = 0;
>    field bits<1> SALU = 0;
> +  field bits<1> MUBUF = 0;
> +  field bits<1> MTBUF = 0;
>  
> +  // These need to be kept in sync with the enum in SIInstrFlags.
>    let TSFlags{0} = VM_CNT;
>    let TSFlags{1} = EXP_CNT;
>    let TSFlags{2} = LGKM_CNT;
> @@ -35,6 +38,8 @@
>    let TSFlags{7} = VOP3;
>    let TSFlags{8} = VOPC;
>    let TSFlags{9} = SALU;
> +  let TSFlags{10} = MUBUF;
> +  let TSFlags{11} = MTBUF;
>  }
>  
>  class Enc32 {
> @@ -503,6 +508,7 @@
>  
>    let VM_CNT = 1;
>    let EXP_CNT = 1;
> +  let MUBUF = 1;
>  
>    let neverHasSideEffects = 1;
>    let UseNamedOperandTable = 1;
> @@ -513,6 +519,7 @@
>  
>    let VM_CNT = 1;
>    let EXP_CNT = 1;
> +  let MTBUF = 1;
>  
>    let neverHasSideEffects = 1;
>  }
> Index: lib/Target/R600/SIInstrInfo.cpp
> ===================================================================
> --- lib/Target/R600/SIInstrInfo.cpp
> +++ lib/Target/R600/SIInstrInfo.cpp
> @@ -557,6 +557,14 @@
>    return get(Opcode).TSFlags & SIInstrFlags::SMRD;
>  }
>  
> +bool SIInstrInfo::isMUBUF(uint16_t Opcode) const {
> +  return get(Opcode).TSFlags & SIInstrFlags::MUBUF;
> +}
> +
> +bool SIInstrInfo::isMTBUF(uint16_t Opcode) const {
> +  return get(Opcode).TSFlags & SIInstrFlags::MTBUF;
> +}
> +
>  bool SIInstrInfo::isVOP1(uint16_t Opcode) const {
>    return get(Opcode).TSFlags & SIInstrFlags::VOP1;
>  }
> Index: lib/Target/R600/SIInstrInfo.h
> ===================================================================
> --- lib/Target/R600/SIInstrInfo.h
> +++ lib/Target/R600/SIInstrInfo.h
> @@ -109,6 +109,8 @@
>    bool isDS(uint16_t Opcode) const LLVM_READONLY;
>    bool isMIMG(uint16_t Opcode) const LLVM_READONLY;
>    bool isSMRD(uint16_t Opcode) const LLVM_READONLY;
> +  bool isMUBUF(uint16_t Opcode) const LLVM_READONLY;
> +  bool isMTBUF(uint16_t Opcode) const LLVM_READONLY;
>    bool isVOP1(uint16_t Opcode) const LLVM_READONLY;
>    bool isVOP2(uint16_t Opcode) const LLVM_READONLY;
>    bool isVOP3(uint16_t Opcode) const LLVM_READONLY;

> Index: lib/Target/R600/SIDefines.h
> ===================================================================
> --- lib/Target/R600/SIDefines.h
> +++ lib/Target/R600/SIDefines.h
> @@ -12,6 +12,7 @@
>  #define SIDEFINES_H_
>  
>  namespace SIInstrFlags {
> +// This needs to be kept in sync with the field bits in InstSI.
>  enum {
>    MIMG = 1 << 3,
>    SMRD = 1 << 4,
> @@ -19,7 +20,9 @@
>    VOP2 = 1 << 6,
>    VOP3 = 1 << 7,
>    VOPC = 1 << 8,
> -  SALU = 1 << 9
> +  SALU = 1 << 9,
> +  MUBUF = 1 << 10,
> +  MTBUF = 1 << 11
>  };
>  }
>  
> Index: lib/Target/R600/SIInstrFormats.td
> ===================================================================
> --- lib/Target/R600/SIInstrFormats.td
> +++ lib/Target/R600/SIInstrFormats.td
> @@ -24,7 +24,10 @@
>    field bits<1> VOP3 = 0;
>    field bits<1> VOPC = 0;
>    field bits<1> SALU = 0;
> +  field bits<1> MUBUF = 0;
> +  field bits<1> MTBUF = 0;
>  
> +  // These need to be kept in sync with the enum in SIInstrFlags.
>    let TSFlags{0} = VM_CNT;
>    let TSFlags{1} = EXP_CNT;
>    let TSFlags{2} = LGKM_CNT;
> @@ -35,6 +38,8 @@
>    let TSFlags{7} = VOP3;
>    let TSFlags{8} = VOPC;
>    let TSFlags{9} = SALU;
> +  let TSFlags{10} = MUBUF;
> +  let TSFlags{11} = MTBUF;
>  }
>  
>  class Enc32 {
> @@ -503,6 +508,7 @@
>  
>    let VM_CNT = 1;
>    let EXP_CNT = 1;
> +  let MUBUF = 1;
>  
>    let neverHasSideEffects = 1;
>    let UseNamedOperandTable = 1;
> @@ -513,6 +519,7 @@
>  
>    let VM_CNT = 1;
>    let EXP_CNT = 1;
> +  let MTBUF = 1;
>  
>    let neverHasSideEffects = 1;
>  }
> Index: lib/Target/R600/SIInstrInfo.cpp
> ===================================================================
> --- lib/Target/R600/SIInstrInfo.cpp
> +++ lib/Target/R600/SIInstrInfo.cpp
> @@ -557,6 +557,14 @@
>    return get(Opcode).TSFlags & SIInstrFlags::SMRD;
>  }
>  
> +bool SIInstrInfo::isMUBUF(uint16_t Opcode) const {
> +  return get(Opcode).TSFlags & SIInstrFlags::MUBUF;
> +}
> +
> +bool SIInstrInfo::isMTBUF(uint16_t Opcode) const {
> +  return get(Opcode).TSFlags & SIInstrFlags::MTBUF;
> +}
> +
>  bool SIInstrInfo::isVOP1(uint16_t Opcode) const {
>    return get(Opcode).TSFlags & SIInstrFlags::VOP1;
>  }
> Index: lib/Target/R600/SIInstrInfo.h
> ===================================================================
> --- lib/Target/R600/SIInstrInfo.h
> +++ lib/Target/R600/SIInstrInfo.h
> @@ -109,6 +109,8 @@
>    bool isDS(uint16_t Opcode) const LLVM_READONLY;
>    bool isMIMG(uint16_t Opcode) const LLVM_READONLY;
>    bool isSMRD(uint16_t Opcode) const LLVM_READONLY;
> +  bool isMUBUF(uint16_t Opcode) const LLVM_READONLY;
> +  bool isMTBUF(uint16_t Opcode) const LLVM_READONLY;
>    bool isVOP1(uint16_t Opcode) const LLVM_READONLY;
>    bool isVOP2(uint16_t Opcode) const LLVM_READONLY;
>    bool isVOP3(uint16_t Opcode) const LLVM_READONLY;

> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list