[llvm-dev] Pass and Transformation-level debugging in LLVM
David Greene via llvm-dev
llvm-dev at lists.llvm.org
Thu Sep 20 09:56:49 PDT 2018
Zhizhou Yang via llvm-dev <llvm-dev at lists.llvm.org> writes:
> To bring it to the next level, DebugCounter provides features for me
> to have an in-pass (transformation) level limit to tell which
> transform in the pass exactly caused the error. When we set StopAfter
> value for a DebugCounter, it will eventually stop there as a limit.
>
> And in D50031 and rL337748, I added a method to print DebugCounter
> info: the `-print-debug-counter` flag. With this, writing a
> transformation level bisection script will be more straightforward.
>
> I have already built a bisection tool to help Android toolchain debug
> on our side. So I will say that the bisecting idea with OptBisect and
> DebugCounter helps us save time while debugging mis-compilations.
There is already a DebugCounter bisect tool in utils/bisect-skip-count.
It is not documented, unfortunately. I had to figure it out by
inspection, but you use it by including "%(skip)d" and "$(count)d" in
the command you specify to bisect-skip-count. Then those values get
filled in and your command should respond to them appropriately. For
example:
bisect-skip-count bisect-command.sh "%(skip)d" "%(count)d" 2>&1 | tee bisect.out
bisect-command.sh presumably looks something like this:
#!/bin/bash
skip=$1
count=$2
opt --debug-counter=my-counter-skip=${skip},my-counter-count=${count}
...
I recently used bisect-skip-count in this way very successfully to track
down an aliasing bug deep in the machine scheduler. I'm working on
documenting bisect-skip-count so people know about it. I can add
comments to the script but I haven't looked at updating web page sources
yet. I was thinking of adding something to the existing opt-bisect
page. Guidance here would be helpful.
I agree that anyone who adds DebugCounters should propose those changes
on Phabricator. We can incrementally improve the debuggability of LLVM
with such a process.
-David
More information about the llvm-dev
mailing list