[llvm] c8ea732 - [X86][tablgen] Set ShouldBeEmitted to false when isAsmParserOnly is true. NFCI

Shengchen Kan via llvm-commits llvm-commits at lists.llvm.org
Sat Mar 26 04:11:38 PDT 2022


Author: Shengchen Kan
Date: 2022-03-26T19:10:58+08:00
New Revision: c8ea7329377f5849205c775c78e5b00f9f52137f

URL: https://github.com/llvm/llvm-project/commit/c8ea7329377f5849205c775c78e5b00f9f52137f
DIFF: https://github.com/llvm/llvm-project/commit/c8ea7329377f5849205c775c78e5b00f9f52137f.diff

LOG: [X86][tablgen] Set ShouldBeEmitted to false when isAsmParserOnly is true. NFCI

In fact, an instruction can not be emitted to disassemble table when
`isAsmParserOnly` is true, so `isAsmParserOnly=true` implies
`ShouldBeEmitted=false`.

We check `isAsmParserOnly` in X86FoldTablesEmitter.cpp at a early stage
b/c none of them is foldable.

Added: 
    

Modified: 
    llvm/utils/TableGen/X86FoldTablesEmitter.cpp
    llvm/utils/TableGen/X86RecognizableInstr.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/utils/TableGen/X86FoldTablesEmitter.cpp b/llvm/utils/TableGen/X86FoldTablesEmitter.cpp
index c5f5ed8e084dc..5b377a05d540b 100644
--- a/llvm/utils/TableGen/X86FoldTablesEmitter.cpp
+++ b/llvm/utils/TableGen/X86FoldTablesEmitter.cpp
@@ -344,9 +344,7 @@ class IsMatch {
         RegRec->getValueAsBit("hasNoTrackPrefix") !=
             MemRec->getValueAsBit("hasNoTrackPrefix") ||
         RegRec->getValueAsBit("EVEX_W1_VEX_W0") !=
-            MemRec->getValueAsBit("EVEX_W1_VEX_W0") ||
-        RegRec->getValueAsBit("isAsmParserOnly") !=
-            MemRec->getValueAsBit("isAsmParserOnly"))
+            MemRec->getValueAsBit("EVEX_W1_VEX_W0"))
       return false;
 
     // Make sure the sizes of the operands of both instructions suit each other.
@@ -556,10 +554,10 @@ void X86FoldTablesEmitter::run(formatted_raw_ostream &OS) {
       Target.getInstructionsByEnumValue();
 
   for (const CodeGenInstruction *Inst : NumberedInstructions) {
-    if (!Inst->TheDef->getNameInit() || !Inst->TheDef->isSubClassOf("X86Inst"))
-      continue;
-
     const Record *Rec = Inst->TheDef;
+    if (!Rec->getNameInit() || !Rec->isSubClassOf("X86Inst") ||
+        Rec->getValueAsBit("isAsmParserOnly"))
+      continue;
 
     // - Do not proceed if the instruction is marked as notMemoryFoldable.
     // - Instructions including RST register class operands are not relevant

diff  --git a/llvm/utils/TableGen/X86RecognizableInstr.cpp b/llvm/utils/TableGen/X86RecognizableInstr.cpp
index 122074d411261..c2029d2693979 100644
--- a/llvm/utils/TableGen/X86RecognizableInstr.cpp
+++ b/llvm/utils/TableGen/X86RecognizableInstr.cpp
@@ -76,7 +76,9 @@ static uint8_t byteFromRec(const Record* rec, StringRef name) {
 }
 
 RecognizableInstrBase::RecognizableInstrBase(const CodeGenInstruction &insn)
-    : Rec(insn.TheDef), ShouldBeEmitted(Rec->isSubClassOf("X86Inst")) {
+    : Rec(insn.TheDef),
+      ShouldBeEmitted(Rec->isSubClassOf("X86Inst") &&
+                      !Rec->getValueAsBit("isAsmParserOnly")) {
   if (!ShouldBeEmitted)
     return;
 
@@ -134,10 +136,6 @@ void RecognizableInstr::processInstr(DisassemblerTables &tables,
                                      const CodeGenInstruction &insn,
                                      InstrUID uid)
 {
-  // Ignore "asm parser only" instructions.
-  if (insn.TheDef->getValueAsBit("isAsmParserOnly"))
-    return;
-
   RecognizableInstr recogInstr(tables, insn, uid);
 
   if (recogInstr.shouldBeEmitted()) {


        


More information about the llvm-commits mailing list