[llvm] [Instrumentation] Support verifying machine function (PR #90931)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 2 23:38:18 PDT 2024
https://github.com/paperchalice updated https://github.com/llvm/llvm-project/pull/90931
>From 4c847d299cf76789f61841d836b5ee2effcf54eb Mon Sep 17 00:00:00 2001
From: PaperChalice <liujunchang97 at outlook.com>
Date: Fri, 3 May 2024 10:04:28 +0800
Subject: [PATCH 1/3] [Instrumentation] Support verifying machine function
---
llvm/lib/Passes/StandardInstrumentations.cpp | 6 ++++++
llvm/test/tools/llc/new-pm/verify.mir | 10 ++++++++++
llvm/tools/llc/NewPMDriver.cpp | 2 +-
3 files changed, 17 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/tools/llc/new-pm/verify.mir
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index 63490c83e85f05..1d6c464c80b1e4 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -1486,6 +1486,12 @@ void VerifyInstrumentation::registerCallbacks(
"\"{0}\", compilation aborted!",
P));
}
+
+ // TODO: Use complete MachineVerifierPass.
+ if (auto *MF = unwrapIR<MachineFunction>(IR)) {
+ dbgs() << "Verifying machine function " << MF->getName() << '\n';
+ verifyMachineFunction("", *MF);
+ }
}
});
}
diff --git a/llvm/test/tools/llc/new-pm/verify.mir b/llvm/test/tools/llc/new-pm/verify.mir
new file mode 100644
index 00000000000000..71c25b14d7c858
--- /dev/null
+++ b/llvm/test/tools/llc/new-pm/verify.mir
@@ -0,0 +1,10 @@
+# RUN: llc -mtriple=x86_64-pc-linux-gnu -x mir -passes=no-op-machine-function -filetype=null < %s 2>&1 | FileCheck %s
+
+# CHECK: Verifying machine function f
+
+---
+name: f
+body: |
+ bb.0:
+ RET 0
+...
diff --git a/llvm/tools/llc/NewPMDriver.cpp b/llvm/tools/llc/NewPMDriver.cpp
index 6d9956ea07d356..fb1959c6457f4a 100644
--- a/llvm/tools/llc/NewPMDriver.cpp
+++ b/llvm/tools/llc/NewPMDriver.cpp
@@ -115,7 +115,7 @@ int llvm::compileModuleWithNewPM(
MachineModuleInfo MMI(&LLVMTM);
PassInstrumentationCallbacks PIC;
- StandardInstrumentations SI(Context, Opt.DebugPM);
+ StandardInstrumentations SI(Context, Opt.DebugPM, !NoVerify);
SI.registerCallbacks(PIC);
registerCodeGenCallback(PIC, LLVMTM);
>From ebda9d6de8f3d0e29a80eae55adeaf55876129fa Mon Sep 17 00:00:00 2001
From: PaperChalice <liujunchang97 at outlook.com>
Date: Fri, 3 May 2024 12:44:41 +0800
Subject: [PATCH 2/3] print "Verifying machine function" in when debug logging
is true
---
llvm/lib/Passes/StandardInstrumentations.cpp | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index 1d6c464c80b1e4..3fadad3ac90c2a 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -1489,8 +1489,12 @@ void VerifyInstrumentation::registerCallbacks(
// TODO: Use complete MachineVerifierPass.
if (auto *MF = unwrapIR<MachineFunction>(IR)) {
- dbgs() << "Verifying machine function " << MF->getName() << '\n';
- verifyMachineFunction("", *MF);
+ if (DebugLogging)
+ dbgs() << "Verifying machine function " << MF->getName() << '\n';
+ verifyMachineFunction(formatv("Broken module found after pass "
+ "\"{0}\", compilation aborted!",
+ P),
+ *MF);
}
}
});
>From 0260bdbce496ac71edb6be587663ea49925ad5ef Mon Sep 17 00:00:00 2001
From: PaperChalice <liujunchang97 at outlook.com>
Date: Fri, 3 May 2024 14:33:30 +0800
Subject: [PATCH 3/3] extend TriggerVerifierErrorPass
---
llvm/include/llvm/Passes/MachinePassRegistry.def | 1 +
llvm/lib/Passes/PassBuilder.cpp | 9 +++++++++
llvm/lib/Passes/StandardInstrumentations.cpp | 9 +++++----
llvm/test/tools/llc/new-pm/verify.mir | 4 ++--
4 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def
index 5a14d619ea076f..380bffe75b3099 100644
--- a/llvm/include/llvm/Passes/MachinePassRegistry.def
+++ b/llvm/include/llvm/Passes/MachinePassRegistry.def
@@ -128,6 +128,7 @@ MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
MACHINE_FUNCTION_PASS("print", PrintMIRPass())
MACHINE_FUNCTION_PASS("require-all-machine-function-properties",
RequireAllMachineFunctionPropertiesPass())
+MACHINE_FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass())
#undef MACHINE_FUNCTION_PASS
// After a pass is converted to new pass manager, its entry should be moved from
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 30d3e7a1ec05b8..d3366eec650d7b 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -93,6 +93,7 @@
#include "llvm/CodeGen/MIRPrinter.h"
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
#include "llvm/CodeGen/MachinePassManager.h"
+#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/SafeStack.h"
#include "llvm/CodeGen/SelectOptimize.h"
#include "llvm/CodeGen/ShadowStackGCLowering.h"
@@ -362,6 +363,14 @@ class TriggerVerifierErrorPass
return PreservedAnalyses::none();
}
+ PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &) {
+ // Intentionally create a virtual register and set NoVRegs property.
+ auto &MRI = MF.getRegInfo();
+ MRI.createGenericVirtualRegister(LLT::scalar(8));
+ MF.getProperties().set(MachineFunctionProperties::Property::NoVRegs);
+ return PreservedAnalyses::all();
+ }
+
static StringRef name() { return "TriggerVerifierErrorPass"; }
};
diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index 3fadad3ac90c2a..d57e06b3501197 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -1491,10 +1491,11 @@ void VerifyInstrumentation::registerCallbacks(
if (auto *MF = unwrapIR<MachineFunction>(IR)) {
if (DebugLogging)
dbgs() << "Verifying machine function " << MF->getName() << '\n';
- verifyMachineFunction(formatv("Broken module found after pass "
- "\"{0}\", compilation aborted!",
- P),
- *MF);
+ verifyMachineFunction(
+ formatv("Broken machine function found after pass "
+ "\"{0}\", compilation aborted!",
+ P),
+ *MF);
}
}
});
diff --git a/llvm/test/tools/llc/new-pm/verify.mir b/llvm/test/tools/llc/new-pm/verify.mir
index 71c25b14d7c858..5c16664e988c01 100644
--- a/llvm/test/tools/llc/new-pm/verify.mir
+++ b/llvm/test/tools/llc/new-pm/verify.mir
@@ -1,7 +1,7 @@
-# RUN: llc -mtriple=x86_64-pc-linux-gnu -x mir -passes=no-op-machine-function -filetype=null < %s 2>&1 | FileCheck %s
+# RUN: not --crash llc -mtriple=x86_64-pc-linux-gnu -debug-pass-manager -passes='module(function(machine-function(trigger-verifier-error)))' -filetype=null %s 2>&1 | FileCheck %s
# CHECK: Verifying machine function f
-
+# CHECK: Broken machine function found after pass
---
name: f
body: |
More information about the llvm-commits
mailing list