[llvm] 5988c79 - [X86][tablgen] Add assertions when emitting NF transform table

Shengchen Kan via llvm-commits llvm-commits at lists.llvm.org
Tue May 28 06:10:42 PDT 2024


Author: Shengchen Kan
Date: 2024-05-28T21:09:36+08:00
New Revision: 5988c798de617cb35491c42de388b98b4c175421

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

LOG: [X86][tablgen] Add assertions when emitting NF transform table

Added: 
    

Modified: 
    llvm/utils/TableGen/X86InstrMappingEmitter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/utils/TableGen/X86InstrMappingEmitter.cpp b/llvm/utils/TableGen/X86InstrMappingEmitter.cpp
index a8970d8bcbacd..d89a1f078328b 100644
--- a/llvm/utils/TableGen/X86InstrMappingEmitter.cpp
+++ b/llvm/utils/TableGen/X86InstrMappingEmitter.cpp
@@ -277,8 +277,22 @@ void X86InstrMappingEmitter::emitNFTransformTable(
     if (Pos == std::string::npos)
       continue;
 
-    if (auto *NewRec = Records.getDef(Name.erase(Pos, 3)))
+    if (auto *NewRec = Records.getDef(Name.erase(Pos, 3))) {
+#ifndef NDEBUG
+      auto ClobberEFLAGS = [](const Record *R) {
+        return llvm::any_of(
+            R->getValueAsListOfDefs("Defs"),
+            [](const Record *Def) { return Def->getName() == "EFLAGS"; });
+      };
+      if (ClobberEFLAGS(Rec))
+        report_fatal_error("EFLAGS should not be clobbered by " +
+                           Rec->getName());
+      if (!ClobberEFLAGS(NewRec))
+        report_fatal_error("EFLAGS should be clobbered by " +
+                           NewRec->getName());
+#endif
       Table.push_back(std::pair(&Target.getInstruction(NewRec), Inst));
+    }
   }
   printTable(Table, "X86NFTransformTable", "GET_X86_NF_TRANSFORM_TABLE", OS);
 }


        


More information about the llvm-commits mailing list