[LLVMdev] LLVM Register allocation

Andrew Trick atrick at apple.com
Mon Mar 21 13:22:08 PDT 2011


On Mar 15, 2011, at 7:48 AM, Vijayaraghavan Murali wrote:
> I'm relatively a newcomer to this forum and LLVM. I wish to do the 
> following:
> 
> 1) play with LLVM's register allocation without any other optimizations 
> performed, such as inlining. This is because I'm trying to observe the 
> effects of our path-sensitive tool on register allocation but other 
> optimizations could influence the results. In other words, I would like 
> to perform register allocation with -O0, if that's possible.
> 
> 2) view the results of register allocation. That is, the mapping of 
> variables to physical registers. I'm comfortable with reading dwarf 
> information. For eg, using gcc I would do: gcc -c -g hello.c ; dwarfdump 
> hello.o
> 
> Kindly guide me in performing the above steps. If they are not possible, 
> is there any workaround?

I'm not sure the best way to do what you're asking, but I haven't seen
any other responses...

For regalloc experiments, you probably want to suppress individual
optimizations rather than using -O0. I always refer to the gcc docs
and assume clang supports the option, because I haven't found any
equivalent doc for clang. You can get some undocumented help text
using the secret command "clang -cc1 -help", which is kind of like
"gcc -v -help t.c".

e.g. clang -fno-inline ...

If you want more control, you can split up the compilation path into
these steps:

I'm not sure if -O0 is needed here but it should ensure clang won't inline
before generating bitcode.
$ clang -O0 -emit-llvm -c t.c -o t.bc

-emit-llvm is the equivalent of -flto that shows up in --help.

Normally, you would optimize bitcode using this.
$ opt -std-compile-opts t.bc -o t.bc

But for true -O0, you can skip "opt" altogether.

For regalloc, I suggest at least running "opt -mem2reg". See opt -help
for more passes.

You may then want to run optimal codegen:
llc -O3 t.bc -o t.s

If not, you can override regalloc:
llc -O0 -regalloc=linearscan t.bc -o t.s

See llc -help for more options.

You can trace regalloc using:
$ llc -debug-only=regalloc

Other traceable modules are: liveintervals, virtregmap, spiller, virtregrewriter

-Andy



More information about the llvm-dev mailing list