[llvm] [NFC][TableGen] Use StringRef in X86RecognizableInstr (PR #139648)

Shengchen Kan via llvm-commits llvm-commits at lists.llvm.org
Tue May 13 22:02:05 PDT 2025


================
@@ -1020,433 +1020,430 @@ void RecognizableInstr::emitDecodePath(DisassemblerTables &tables) const {
 #undef MAP
 }
 
-#define TYPE(str, type)                                                        \
-  if (s == str)                                                                \
-    return type;
-OperandType RecognizableInstr::typeFromString(const std::string &s,
-                                              bool hasREX_W, uint8_t OpSize) {
+#define TYPE(Str, Expected, Type)                                              \
+  if (Str == Expected)                                                         \
+    return Type;
+
+OperandType RecognizableInstr::typeFromString(StringRef Str, bool hasREX_W,
+                                              uint8_t OpSize) {
   if (hasREX_W) {
     // For instructions with a REX_W prefix, a declared 32-bit register encoding
     // is special.
-    TYPE("GR32", TYPE_R32)
+    TYPE(Str, "GR32", TYPE_R32)
   }
   if (OpSize == X86Local::OpSize16) {
     // For OpSize16 instructions, a declared 16-bit register or
     // immediate encoding is special.
-    TYPE("GR16", TYPE_Rv)
+    TYPE(Str, "GR16", TYPE_Rv)
   } else if (OpSize == X86Local::OpSize32) {
     // For OpSize32 instructions, a declared 32-bit register or
     // immediate encoding is special.
-    TYPE("GR32", TYPE_Rv)
+    TYPE(Str, "GR32", TYPE_Rv)
   }
-  TYPE("i16mem", TYPE_M)
-  TYPE("i16imm", TYPE_IMM)
-  TYPE("i16i8imm", TYPE_IMM)
-  TYPE("GR16", TYPE_R16)
-  TYPE("GR16orGR32orGR64", TYPE_R16)
-  TYPE("i32mem", TYPE_M)
-  TYPE("i32imm", TYPE_IMM)
-  TYPE("i32i8imm", TYPE_IMM)
-  TYPE("GR32", TYPE_R32)
-  TYPE("GR32orGR64", TYPE_R32)
-  TYPE("i64mem", TYPE_M)
-  TYPE("i64i32imm", TYPE_IMM)
-  TYPE("i64i8imm", TYPE_IMM)
-  TYPE("GR64", TYPE_R64)
-  TYPE("i8mem", TYPE_M)
-  TYPE("i8imm", TYPE_IMM)
-  TYPE("u4imm", TYPE_UIMM8)
-  TYPE("u8imm", TYPE_UIMM8)
-  TYPE("i16u8imm", TYPE_UIMM8)
-  TYPE("i32u8imm", TYPE_UIMM8)
-  TYPE("i64u8imm", TYPE_UIMM8)
-  TYPE("GR8", TYPE_R8)
-  TYPE("VR128", TYPE_XMM)
-  TYPE("VR128X", TYPE_XMM)
-  TYPE("f128mem", TYPE_M)
-  TYPE("f256mem", TYPE_M)
-  TYPE("f512mem", TYPE_M)
-  TYPE("FR128", TYPE_XMM)
-  TYPE("FR64", TYPE_XMM)
-  TYPE("FR64X", TYPE_XMM)
-  TYPE("f64mem", TYPE_M)
-  TYPE("sdmem", TYPE_M)
-  TYPE("FR16X", TYPE_XMM)
-  TYPE("FR32", TYPE_XMM)
-  TYPE("FR32X", TYPE_XMM)
-  TYPE("f32mem", TYPE_M)
-  TYPE("f16mem", TYPE_M)
-  TYPE("ssmem", TYPE_M)
-  TYPE("shmem", TYPE_M)
-  TYPE("RST", TYPE_ST)
-  TYPE("RSTi", TYPE_ST)
-  TYPE("i128mem", TYPE_M)
-  TYPE("i256mem", TYPE_M)
-  TYPE("i512mem", TYPE_M)
-  TYPE("i512mem_GR16", TYPE_M)
-  TYPE("i512mem_GR32", TYPE_M)
-  TYPE("i512mem_GR64", TYPE_M)
-  TYPE("i64i32imm_brtarget", TYPE_REL)
-  TYPE("i8imm_brtarget", TYPE_REL)
-  TYPE("i16imm_brtarget", TYPE_REL)
-  TYPE("i32imm_brtarget", TYPE_REL)
-  TYPE("ccode", TYPE_IMM)
-  TYPE("cflags", TYPE_IMM)
-  TYPE("AVX512RC", TYPE_IMM)
-  TYPE("brtarget32", TYPE_REL)
-  TYPE("brtarget16", TYPE_REL)
-  TYPE("brtarget8", TYPE_REL)
-  TYPE("f80mem", TYPE_M)
-  TYPE("lea64_8mem", TYPE_M)
-  TYPE("lea64_16mem", TYPE_M)
-  TYPE("lea64_32mem", TYPE_M)
-  TYPE("lea64mem", TYPE_M)
-  TYPE("VR64", TYPE_MM64)
-  TYPE("i64imm", TYPE_IMM)
-  TYPE("anymem", TYPE_M)
-  TYPE("opaquemem", TYPE_M)
-  TYPE("sibmem", TYPE_MSIB)
-  TYPE("SEGMENT_REG", TYPE_SEGMENTREG)
-  TYPE("DEBUG_REG", TYPE_DEBUGREG)
-  TYPE("CONTROL_REG", TYPE_CONTROLREG)
-  TYPE("srcidx8", TYPE_SRCIDX)
-  TYPE("srcidx16", TYPE_SRCIDX)
-  TYPE("srcidx32", TYPE_SRCIDX)
-  TYPE("srcidx64", TYPE_SRCIDX)
-  TYPE("dstidx8", TYPE_DSTIDX)
-  TYPE("dstidx16", TYPE_DSTIDX)
-  TYPE("dstidx32", TYPE_DSTIDX)
-  TYPE("dstidx64", TYPE_DSTIDX)
-  TYPE("offset16_8", TYPE_MOFFS)
-  TYPE("offset16_16", TYPE_MOFFS)
-  TYPE("offset16_32", TYPE_MOFFS)
-  TYPE("offset32_8", TYPE_MOFFS)
-  TYPE("offset32_16", TYPE_MOFFS)
-  TYPE("offset32_32", TYPE_MOFFS)
-  TYPE("offset32_64", TYPE_MOFFS)
-  TYPE("offset64_8", TYPE_MOFFS)
-  TYPE("offset64_16", TYPE_MOFFS)
-  TYPE("offset64_32", TYPE_MOFFS)
-  TYPE("offset64_64", TYPE_MOFFS)
-  TYPE("VR256", TYPE_YMM)
-  TYPE("VR256X", TYPE_YMM)
-  TYPE("VR512", TYPE_ZMM)
-  TYPE("VK1", TYPE_VK)
-  TYPE("VK1WM", TYPE_VK)
-  TYPE("VK2", TYPE_VK)
-  TYPE("VK2WM", TYPE_VK)
-  TYPE("VK4", TYPE_VK)
-  TYPE("VK4WM", TYPE_VK)
-  TYPE("VK8", TYPE_VK)
-  TYPE("VK8WM", TYPE_VK)
-  TYPE("VK16", TYPE_VK)
-  TYPE("VK16WM", TYPE_VK)
-  TYPE("VK32", TYPE_VK)
-  TYPE("VK32WM", TYPE_VK)
-  TYPE("VK64", TYPE_VK)
-  TYPE("VK64WM", TYPE_VK)
-  TYPE("VK1Pair", TYPE_VK_PAIR)
-  TYPE("VK2Pair", TYPE_VK_PAIR)
-  TYPE("VK4Pair", TYPE_VK_PAIR)
-  TYPE("VK8Pair", TYPE_VK_PAIR)
-  TYPE("VK16Pair", TYPE_VK_PAIR)
-  TYPE("vx32mem", TYPE_MVSIBX)
-  TYPE("vx64mem", TYPE_MVSIBX)
-  TYPE("vy32mem", TYPE_MVSIBY)
-  TYPE("vy64mem", TYPE_MVSIBY)
-  TYPE("vx32xmem", TYPE_MVSIBX)
-  TYPE("vx64xmem", TYPE_MVSIBX)
-  TYPE("vy32xmem", TYPE_MVSIBY)
-  TYPE("vy64xmem", TYPE_MVSIBY)
-  TYPE("vz32mem", TYPE_MVSIBZ)
-  TYPE("vz64mem", TYPE_MVSIBZ)
-  TYPE("BNDR", TYPE_BNDR)
-  TYPE("TILE", TYPE_TMM)
-  TYPE("TILEPair", TYPE_TMM_PAIR)
-  errs() << "Unhandled type string " << s << "\n";
+  TYPE(Str, "i16mem", TYPE_M)
----------------
KanRobert wrote:

This PR does more things than it describes. And adding a duplicated `Str`  to the macro `Type` is not improvement .

https://github.com/llvm/llvm-project/pull/139648


More information about the llvm-commits mailing list