I am trying to understand the SelectionDAG construction from LLVM IR. I have gone through the doc “The LLVM Target-Independent Code Generator” on LLVM site. This gives a great initial overview. However I am unable to catch the actual control flow for the llvm->selectionDag conversion.
The flags “-view-sched-dags”… described in the doc doesn’t seem to work. ( “llc -help” doesn’t list it ).
To understand the codeflow, I was trying to use gdb over llc. Where should I put the breakpoints where I can see llvm->selectionDag conversion happening e.g. SDNode being generated out of llvm instructions.
Any pointer to detailed level doc will also help. Doxygen doesnt help till I am a bit familiar with Codeflow.
Thanks.
I am trying to understand the SelectionDAG construction from LLVM IR. I have
gone through the doc "The LLVM Target-Independent Code Generator" on LLVM
site. This gives a great initial overview. However I am unable to catch the
actual control flow for the llvm->selectionDag conversion.
The flags "-view-sched-dags".. described in the doc doesn't seem to work. (
"llc -help" doesn't list it ).
See LLVM Programmer’s Manual — LLVM 18.0.0git documentation ... and the
option is listed in -help-hidden.
To understand the codeflow, I was trying to use gdb over llc. Where should I
put the breakpoints where I can see llvm->selectionDag conversion happening
e.g. SDNode being generated out of llvm instructions.
Setting a breakpoint on SelectionDAGISel::SelectBasicBlock wouldn't be
a bad place to start (although most of the relevant code is actually
in SelectionDAGBuilder.cpp).
Any pointer to detailed level doc will also help. Doxygen doesnt help till I
am a bit familiar with Codeflow.
There really aren't any docs more detailed than the one you mentioned.
-Eli
The -view options are only available in llvm builds with assertions. Also graphiz must be installed on your system (and in path) at configure time.
Hi Ankur,
The flags "-view-sched-dags".. described in the doc doesn't seem to work. (
"llc -help" doesn't list it ).
as far as I remember, displaying DAGs during compilation is only enabled
in "debug builds" [1] of LLVM. You probably have to re-configure and
re-compile LLVM to enable this feature.
Best regards,
Christoph
[1] Getting Started with the LLVM System — LLVM 18.0.0git documentation
Hi everyone,
Thanks for the help. I did some gdbing and found some code flow which explains the formation of SelectionDAG.
I am including few of my steps which helped me understanding the code-flow. This information is aimed at someone like searching about SelectionDAG and no clue where to start looking. I hope this will help someone.
My appologies if someone finds this post annoying.