[llvm] [GlobalISel] Add a GISelValueTracker printing pass (PR #139687)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Tue May 13 23:56:47 PDT 2025
================
@@ -875,20 +875,50 @@ unsigned GISelValueTracking::computeNumSignBits(Register R, unsigned Depth) {
return computeNumSignBits(R, DemandedElts, Depth);
}
-void GISelValueTrackingAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {
+void GISelValueTrackingAnalysisLegacy::getAnalysisUsage(
+ AnalysisUsage &AU) const {
AU.setPreservesAll();
MachineFunctionPass::getAnalysisUsage(AU);
}
-bool GISelValueTrackingAnalysis::runOnMachineFunction(MachineFunction &MF) {
+bool GISelValueTrackingAnalysisLegacy::runOnMachineFunction(
+ MachineFunction &MF) {
return false;
}
-GISelValueTracking &GISelValueTrackingAnalysis::get(MachineFunction &MF) {
+GISelValueTracking &GISelValueTrackingAnalysisLegacy::get(MachineFunction &MF) {
if (!Info) {
unsigned MaxDepth =
MF.getTarget().getOptLevel() == CodeGenOptLevel::None ? 2 : 6;
Info = std::make_unique<GISelValueTracking>(MF, MaxDepth);
}
return *Info;
}
+
+AnalysisKey GISelValueTrackingAnalysis::Key;
+
+GISelValueTracking
+GISelValueTrackingAnalysis::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ return Result(MF);
+}
+
+PreservedAnalyses
+GISelValueTrackingPrinterPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ auto &VTA = MFAM.getResult<GISelValueTrackingAnalysis>(MF);
+ OS << "name: " << MF.getName() << "\n";
+ for (MachineBasicBlock &BB : MF) {
+ for (MachineInstr &MI : BB) {
+ for (MachineOperand &MO : MI.defs()) {
+ if (!MO.isReg() || MO.getReg().isPhysical())
+ continue;
+ KnownBits Known = VTA.getKnownBits(MO.getReg());
+ unsigned SignedBits = VTA.computeNumSignBits(MO.getReg());
----------------
davemgreen wrote:
It was modelled after the CostModel printing (for example llvm/test/Analysis/CostModel/AArch64/shuffle-other.ll), where it prints the instruction at the end of the line. The instructions can be variable length and quite long.
For these it just prints the register name, as the instruction might have multiple outputs. The full instruction is already in the test. As it's short and not (very) variable length moving it to the front sounds OK to me, the KnownBits can be quite variable in length themselves.
https://github.com/llvm/llvm-project/pull/139687
More information about the llvm-commits
mailing list