From b33d6c412d3c2bfeb21ac2d208d43e5f9bf8249e Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 29 Jul 2014 18:51:56 +0000 Subject: [PATCH] R600/SI: Add isMUBUF / isMTBUF Also add missing comments about how the flags work. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214195 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/R600/SIDefines.h | 5 ++++- lib/Target/R600/SIInstrFormats.td | 7 +++++++ lib/Target/R600/SIInstrInfo.cpp | 8 ++++++++ lib/Target/R600/SIInstrInfo.h | 2 ++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/Target/R600/SIDefines.h b/lib/Target/R600/SIDefines.h index b7e7a2d000b..6ae580c8614 100644 --- a/lib/Target/R600/SIDefines.h +++ b/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 @@ enum { VOP2 = 1 << 6, VOP3 = 1 << 7, VOPC = 1 << 8, - SALU = 1 << 9 + SALU = 1 << 9, + MUBUF = 1 << 10, + MTBUF = 1 << 11 }; } diff --git a/lib/Target/R600/SIInstrFormats.td b/lib/Target/R600/SIInstrFormats.td index d7b593d4a60..a2d8ee67c3e 100644 --- a/lib/Target/R600/SIInstrFormats.td +++ b/lib/Target/R600/SIInstrFormats.td @@ -24,7 +24,10 @@ class InstSI pattern> : 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 @@ class InstSI pattern> : 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 @@ class MUBUF op, dag outs, dag ins, string asm, list pattern> : let VM_CNT = 1; let EXP_CNT = 1; + let MUBUF = 1; let neverHasSideEffects = 1; let UseNamedOperandTable = 1; @@ -513,6 +519,7 @@ class MTBUF op, dag outs, dag ins, string asm, list pattern> : let VM_CNT = 1; let EXP_CNT = 1; + let MTBUF = 1; let neverHasSideEffects = 1; } diff --git a/lib/Target/R600/SIInstrInfo.cpp b/lib/Target/R600/SIInstrInfo.cpp index 872b7cef859..0bd54ec3370 100644 --- a/lib/Target/R600/SIInstrInfo.cpp +++ b/lib/Target/R600/SIInstrInfo.cpp @@ -483,6 +483,14 @@ bool SIInstrInfo::isSMRD(uint16_t Opcode) const { 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; } diff --git a/lib/Target/R600/SIInstrInfo.h b/lib/Target/R600/SIInstrInfo.h index 914138bfb6a..5b9b5a59126 100644 --- a/lib/Target/R600/SIInstrInfo.h +++ b/lib/Target/R600/SIInstrInfo.h @@ -98,6 +98,8 @@ public: bool isDS(uint16_t Opcode) const; bool isMIMG(uint16_t Opcode) const; bool isSMRD(uint16_t Opcode) const; + bool isMUBUF(uint16_t Opcode) const; + bool isMTBUF(uint16_t Opcode) const; bool isVOP1(uint16_t Opcode) const; bool isVOP2(uint16_t Opcode) const; bool isVOP3(uint16_t Opcode) const; -- 2.34.1