[llvm] a690852 - [llvm-exegesis] Error instead of aborting on verification failure (#137581)

via llvm-commits llvm-commits at lists.llvm.org
Tue May 20 14:48:21 PDT 2025


Author: Aiden Grossman
Date: 2025-05-20T14:48:17-07:00
New Revision: a690852b290fc9c843933f95d1c8ebb6d7b97adb

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

LOG: [llvm-exegesis] Error instead of aborting on verification failure (#137581)

This patch makes llvm-exegesis emit an error when the machine function
fails in MachineVerification rather than aborting. This allows
downstream users (particularly https://github.com/google/gematria) to
handle these errors rather than having the entire process crash. This
essentially be NFC from the user perspective minus the addition of the
new error message.

Added: 
    

Modified: 
    llvm/tools/llvm-exegesis/lib/Assembler.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/tools/llvm-exegesis/lib/Assembler.cpp b/llvm/tools/llvm-exegesis/lib/Assembler.cpp
index f638478e0c51d..67f3d75a5e879 100644
--- a/llvm/tools/llvm-exegesis/lib/Assembler.cpp
+++ b/llvm/tools/llvm-exegesis/lib/Assembler.cpp
@@ -29,6 +29,7 @@
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/Object/SymbolSize.h"
 #include "llvm/Support/Alignment.h"
+#include "llvm/Support/Error.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/raw_ostream.h"
 
@@ -323,10 +324,8 @@ Error assembleToStream(const ExegesisTarget &ET,
   TPC->printAndVerify("After ExegesisTarget::addTargetSpecificPasses");
   // Adding the following passes:
   // - postrapseudos: expands pseudo return instructions used on some targets.
-  // - machineverifier: checks that the MachineFunction is well formed.
   // - prologepilog: saves and restore callee saved registers.
-  for (const char *PassName :
-       {"postrapseudos", "machineverifier", "prologepilog"})
+  for (const char *PassName : {"postrapseudos", "prologepilog"})
     if (addPass(PM, PassName, *TPC))
       return make_error<Failure>("Unable to add a mandatory pass");
   TPC->setInitialized();
@@ -337,6 +336,10 @@ Error assembleToStream(const ExegesisTarget &ET,
     return make_error<Failure>("Cannot add AsmPrinter passes");
 
   PM.run(*Module); // Run all the passes
+  bool MFWellFormed =
+      MF.verify(nullptr, "llvm-exegesis Assembly", &outs(), false);
+  if (!MFWellFormed)
+    return make_error<Failure>("The machine function failed verification.");
   return Error::success();
 }
 


        


More information about the llvm-commits mailing list