[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