[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.
This commit is contained in:
Aiden Grossman 2025-05-20 14:48:17 -07:00 committed by GitHub
parent 98595cfd6f
commit a690852b29
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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();
}