<div dir="auto">Today it is entirely in llvm. It is even more costly than -print-after-all as it:<div dir="auto">  - print to file</div><div dir="auto">  - print the entire module (after each basic block, for basic block passes, it will still print the entire module where only one basic block changed)</div><div dir="auto">  - call git 2 times (add then commit) and wait for them to finish (I even save all the empty commits)</div><div dir="auto"><br></div><div dir="auto">The reason I print the entire module is so that git is able to show/compress the change properly. Then a simple git log --patch show the change of each pass.</div><div dir="auto"><br></div><div dir="auto">Ideally, the -debug output of each pass would be piped as the git commit message, and the passes name+options would be the commit title. But I didn't have time to do that.</div><div dir="auto"><br></div><div dir="auto">My goal was not particularly to be efficient but to be thorough so as to preserve the maximum of behavioral information of each pass while not affecting their order and behavior.</div><div dir="auto"><br></div><div dir="auto">You are right, there could be major speed improvement gained by doing so as external processing. For instance, the output would be in the format that git patch takes as input. Could this be a GSoC?</div><div dir="auto"><br></div><div dir="auto">Today I use git filter-branch + opt as a post processing tool to generate the reg.dot files of the region info. In any way, the feature is a breath of fresh air in our development here. That's why I wanted to share. It will quickly become my reflex to debug with it... probably because I am at ease with git though.</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Mar 7, 2018, 06:19 Alex Bradbury <<a href="mailto:asb@asbradbury.org">asb@asbradbury.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 6 March 2018 at 18:43, Alexandre Isoard via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" rel="noreferrer">llvm-dev@lists.llvm.org</a>> wrote:<br>
> Hello,<br>
><br>
> I had a stupid idea recently that turned out not so stupid after all. I<br>
> wanted to be able to "see" an entire pass pipeline in action to find<br>
> unnecessary transformations and/or missed opportunities and generally<br>
> improve the debug-ability of LLVM.<br>
><br>
> So as the title suggest, I implemented an equivalent of "-print-after-all"<br>
> but instead of printing into stdout I dump into a file that get commit into<br>
> a temporary git. There are some quirks with it but it's working and is<br>
> actually awesome. For example, at first sight, I see multiple time lcssa and<br>
> instcombine cancelling each other's work.<br>
><br>
> Of course, that has a big impact on compile time when enabled, but that's<br>
> still practical (git being quite good at its job) when debugging.<br>
><br>
> There are improvement I can make, but would you guys be interested in such<br>
> feature?<br>
<br>
Hi Alexandre. I can definitely see how it could be useful to track<br>
changes through git commits, and take advantage of your favourite repo<br>
history viewer to see changes. How much of your current implementation<br>
is handled via modifications to LLVM vs an external helper script? For<br>
instance, I might imagine trying to achieve something similar through<br>
a script that parses the output of -print-after-all in order to create<br>
the desired files+commits.<br>
<br>
Best,<br>
<br>
Alex<br>
</blockquote></div>