<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">HI Markus.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I made some attempts to print both class name and pass name earlier this year.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">One problem was that the getPassNameForClassName data base didn’t use a 1-1 mapping, so many “pass names” where mapped to the same “class name”.<o:p></o:p></p>
<p class="MsoNormal">I made some patches for that, but there might still be some 1-n mappings left (for example
<a href="https://reviews.llvm.org/D105007">https://reviews.llvm.org/D105007</a> was never accepted so it remains to be dealt with).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Below are parts of the patch I was working on to print the pass names.<o:p></o:p></p>
<p class="MsoNormal">Might notice that we need replace the logic in shouldPopulateClassToPassNames in some better way and not just use “true” to always populate the database(or can we always do that?).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And there is still a limitation that for passes with params we still won’t print the params (had perhaps been nice to at least indicate that by printing “pass-name<…>” to show that the pass use params but that they aren’t shown for passes
 with params).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h<o:p></o:p></p>
<p class="MsoNormal">index 9011c52f20c1..df4004b10525 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/llvm/include/llvm/Passes/StandardInstrumentations.h<o:p></o:p></p>
<p class="MsoNormal">+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h<o:p></o:p></p>
<p class="MsoNormal">@@ -102,6 +102,7 @@ private:<o:p></o:p></p>
<p class="MsoNormal">   bool Enabled;<o:p></o:p></p>
<p class="MsoNormal">   PrintPassOptions Opts;<o:p></o:p></p>
<p class="MsoNormal">   int Indent = 0;<o:p></o:p></p>
<p class="MsoNormal">+  PassInstrumentationCallbacks *PIC;<o:p></o:p></p>
<p class="MsoNormal">};<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"> class PreservedCFGCheckerInstrumentation {<o:p></o:p></p>
<p class="MsoNormal">diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp<o:p></o:p></p>
<p class="MsoNormal">index 54c3289f538f..7fec0e63cb88 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/llvm/lib/Passes/PassBuilder.cpp<o:p></o:p></p>
<p class="MsoNormal">+++ b/llvm/lib/Passes/PassBuilder.cpp<o:p></o:p></p>
<p class="MsoNormal">@@ -445,7 +445,7 @@ AnalysisKey NoOpLoopAnalysis::Key;<o:p></o:p></p>
<p class="MsoNormal">/// it. This should be updated if new pass instrumentation wants to use the map.<o:p></o:p></p>
<p class="MsoNormal">/// We currently only use this for --print-before/after.<o:p></o:p></p>
<p class="MsoNormal">bool shouldPopulateClassToPassNames() {<o:p></o:p></p>
<p class="MsoNormal">-  return !printBeforePasses().empty() || !printAfterPasses().empty();<o:p></o:p></p>
<p class="MsoNormal">+  return !printBeforePasses().empty() || !printAfterPasses().empty() || true;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"> } // namespace<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp<o:p></o:p></p>
<p class="MsoNormal">index a03e0d4b597e..3745c922579c 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/llvm/lib/Passes/StandardInstrumentations.cpp<o:p></o:p></p>
<p class="MsoNormal">+++ b/llvm/lib/Passes/StandardInstrumentations.cpp<o:p></o:p></p>
<p class="MsoNormal">@@ -870,6 +871,8 @@ raw_ostream &PrintPassInstrumentation::print() {<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"> void PrintPassInstrumentation::registerCallbacks(<o:p></o:p></p>
<p class="MsoNormal">     PassInstrumentationCallbacks &PIC) {<o:p></o:p></p>
<p class="MsoNormal">+  this->PIC = &PIC;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">   if (!Enabled)<o:p></o:p></p>
<p class="MsoNormal">     return;<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">@@ -884,7 +887,9 @@ void PrintPassInstrumentation::registerCallbacks(<o:p></o:p></p>
<p class="MsoNormal">         assert(!isSpecialPass(PassID, SpecialPasses) &&<o:p></o:p></p>
<p class="MsoNormal">                "Unexpectedly skipping special pass");<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">-        print() << "Skipping pass: " << PassID << " on " << getIRName(IR)<o:p></o:p></p>
<p class="MsoNormal">+        print() << "Skipping pass: " << PassID<o:p></o:p></p>
<p class="MsoNormal">+                << " (" << this->PIC->getPassNameForClassName(PassID) << ")"<o:p></o:p></p>
<p class="MsoNormal">+                << " on " << getIRName(IR)<o:p></o:p></p>
<p class="MsoNormal">                 << "\n";<o:p></o:p></p>
<p class="MsoNormal">       });<o:p></o:p></p>
<p class="MsoNormal">   PIC.registerBeforeNonSkippedPassCallback([this, SpecialPasses](<o:p></o:p></p>
<p class="MsoNormal">@@ -892,7 +897,9 @@ void PrintPassInstrumentation::registerCallbacks(<o:p></o:p></p>
<p class="MsoNormal">     if (isSpecialPass(PassID, SpecialPasses))<o:p></o:p></p>
<p class="MsoNormal">       return;<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">-    print() << "Running pass: " << PassID << " on " << getIRName(IR) << "\n";<o:p></o:p></p>
<p class="MsoNormal">+    print() << "Running pass: " << PassID<o:p></o:p></p>
<p class="MsoNormal">+            << " (" << this->PIC->getPassNameForClassName(PassID) << ")"<o:p></o:p></p>
<p class="MsoNormal">+            << " on " << getIRName(IR) << "\n";<o:p></o:p></p>
<p class="MsoNormal">     Indent += 2;<o:p></o:p></p>
<p class="MsoNormal">   });<o:p></o:p></p>
<p class="MsoNormal">   PIC.registerAfterPassCallback(<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> <b>On Behalf Of
</b>Markus Lavin via llvm-dev<br>
<b>Sent:</b> den 2 augusti 2021 11:18<br>
<b>To:</b> Arthur Eubanks <aeubanks@google.com><br>
<b>Cc:</b> llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> Re: [llvm-dev] Pass reduction with new PM<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I firmly believe that something that almost works is a lot better than nothing that certainly won’t work at all so I suggest we go for the short term hack as you described.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I can try giving it a go but please provide all the details you have on that option.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">So as far as I can see getting pass names using `PIC->getPassNameForClassName(PassID)` seems straight forward. Looks like we can get printouts when a PassManager and PassAdopter starts but I cannot see any callbacks that would be called
 when it is finished so maybe that needs to be added to be able to get the nesting right.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I think that reduction of the passes string can be handled by an external tool and for starters I would be happy to do it manually.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">br<o:p></o:p></p>
<p class="MsoNormal">-Markus<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b>From:</b> Arthur Eubanks <<a href="mailto:aeubanks@google.com">aeubanks@google.com</a>>
<br>
<b>Sent:</b> den 30 juli 2021 20:54<br>
<b>To:</b> Markus Lavin <<a href="mailto:markus.lavin@ericsson.com">markus.lavin@ericsson.com</a>><br>
<b>Cc:</b> llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> Re: [llvm-dev] Pass reduction with new PM<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span lang="SV">There still is nothing like bugpoint's pass list reduce for the new PM.<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span lang="SV">The issue is that ideally we'd be able to map a pass pipeline to the string version of it. But we can't really do that right now. We could attempt to do that, but a generated argument list won't be exact since passes added
 via code (e.g. PassManagerBuilder/PassBuilder.cpp) often have parameters that can't be represented via opt arguments. Maybe getting an approximate textual representation of the pipeline is good enough for some cases? But that doesn't seem ideal.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV">We could also go down the route of making all pipelines representable via text, but that's a non-trivial project.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV">Note that even the legacy PM has this problem, and I've heard that this has bitten people in the past.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV">Perhaps as a short term hack, we could get an approximation of the pipeline by hacking PrintPassInstrumentation to print the textual name of each pass that's run via `PIC->getPassNameForClassName(PassID)` (like PrintIRInstrumentation).
 Then run `opt -debug-pass-manager with that hacked up version of PrintPassInstrumentation. We'd also need another version of -debug-pass-manager that prints adaptors/pass managers but doesn't print analyses. We'd run `opt` over a file with one function that
 contains one loop, e.g. the IR in new-pm-defaults.ll. Then cleanup the output of -debug-pass-manager with proper pass nesting.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV">Or of course you could attempt to manually recreate the proper textual representation by looking at PassBuilder.cpp.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV">Then we'd need something that reduces the textual pass pipeline.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="SV">Let me know if you'd like more details.<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
<div>
<div>
<p class="MsoNormal"><span lang="SV">On Fri, Jul 30, 2021 at 12:25 AM Markus Lavin via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hi,<span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Right now I am trying to analyze a bug that appears with new PM pipeline as follows<span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">$ opt -enable-new-pm=1 -disable-basic-aa -tbaa -O1 -o /dev/null reduced.ll<span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">the crashing pass is LICM but simply exporting IR before that pass and then running just that pass does not seem to capture enough state to reproduce the problem.<span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">So here one would either want bugpoint to help automatically reduce the pass list or simply use -debug-pass=Arguments and do it manually but as I understand it neither of those
 options work with the new PM.<span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">This has already been brought up in
<span lang="SV"><a href="https://protect2.fireeye.com/v1/url?k=f586695a-aa1d5188-f58629c1-866132fe445e-6110e351e37b7346&q=1&e=2ba6e21d-2217-4037-91d5-479923a5d53a&u=https%3A%2F%2Flists.llvm.org%2Fpipermail%2Fllvm-dev%2F2021-March%2F148994.html" target="_blank"><span lang="EN-US">[llvm-dev]
 How to get from "opt -O3" to "opt <a-single-pass>" with the new PM?</span></a> <o:p>
</o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Has there been any progress since then?<span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">br<span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Markus<span lang="SV"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <span lang="SV"><o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span lang="SV">_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://protect2.fireeye.com/v1/url?k=6737c3b4-38acfb66-6737832f-866132fe445e-1cee692663522fcb&q=1&e=2ba6e21d-2217-4037-91d5-479923a5d53a&u=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fllvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></span></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>