[llvm] [CodeGen][NewPM] Port `AsmPrinter` to new pass manager (PR #99320)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed May 21 08:08:54 PDT 2025


================
@@ -4489,22 +4537,38 @@ GCMetadataPrinter *AsmPrinter::getOrCreateGCPrinter(GCStrategy &S) {
   report_fatal_error("no GCMetadataPrinter registered for GC: " + Twine(Name));
 }
 
-void AsmPrinter::emitStackMaps() {
-  GCModuleInfo *MI = getAnalysisIfAvailable<GCModuleInfo>();
-  assert(MI && "AsmPrinter didn't require GCModuleInfo?");
+void AsmPrinter::emitStackMaps(Module &M) {
   bool NeedsDefault = false;
-  if (MI->begin() == MI->end())
-    // No GC strategy, use the default format.
-    NeedsDefault = true;
-  else
-    for (const auto &I : *MI) {
-      if (GCMetadataPrinter *MP = getOrCreateGCPrinter(*I))
-        if (MP->emitStackMaps(SM, *this))
-          continue;
-      // The strategy doesn't have printer or doesn't emit custom stack maps.
-      // Use the default format.
+  if (inNewPassManager()) {
+    auto &Map = MAM->getResult<CollectorMetadataAnalysis>(M);
+    if (Map.empty())
+      // No GC strategy, use the default format.
       NeedsDefault = true;
-    }
+    else
+      for (const auto &[Name, Strategy] : Map) {
+        if (GCMetadataPrinter *MP = getOrCreateGCPrinter(*Strategy))
+          if (MP->emitStackMaps(SM, *this))
+            continue;
+        // The strategy doesn't have printer or doesn't emit custom stack maps.
+        // Use the default format.
+        NeedsDefault = true;
+      }
+  } else {
+    GCModuleInfo *MI = getAnalysisIfAvailable<GCModuleInfo>();
+    assert(MI && "AsmPrinter didn't require GCModuleInfo?");
+    if (MI->begin() == MI->end())
+      // No GC strategy, use the default format.
+      NeedsDefault = true;
+    else
----------------
arsenm wrote:

Can avoid this condition by having it implied by the loop being entered or not 

https://github.com/llvm/llvm-project/pull/99320


More information about the llvm-commits mailing list