[llvm-dev] Produce x86 asm and run only the register allocator

Stefanos Baziotis via llvm-dev llvm-dev at lists.llvm.org
Sun May 30 19:51:35 PDT 2021


Hi,

Is there a way, given an LLVM IR file, to produce assembly and _only_ run
the register allocator?
Or, maybe the register allocation is coupled with, I don't know..
instruction selection. But I guess it's not coupled with many back-end
optimizations,
e.g., back-end LICM, CSE and DCE are not included.

I am writing some _middle-end_ passes and I'd like to check their actual
effect on
assembly and run-time, e.g., of the optimized vs unoptimized version. This
implies that
I should minimize the effect of back-end optimizations but also keep a
minimum code quality.
Right now, I'm producing an .ll file and I'm passing it to llc.

On the one hand, if I run no optimizations in llc (-O0), specifically due
to the
absence of regalloc, the code is pretty bad and as far as I can tell, I
won't be able
to ever see the effect of the middle-end optimizations because the
bottle-neck will be loading from and storing to stack.

On the other hand, if I run e.g., even -O1, it seems it does optimizations
like
LICM, CSE and DCE. Those are some of the optimizations of which I have
written my versions
in the middle-end and whose effect I want to check. If llc applies its own
version, then I can't
see any difference between my optimized and the "unoptimized" version.

Running: llc test.ll -regalloc=... doesn't work because the default
optimization level
is -O2 in llc.

I'm not familiar with the back-end and any help would be appreciated. Also,
feel free
to give advice on checking the effect of middle-end optimizations in
general.

Best,
Stefanos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210531/c547956f/attachment.html>


More information about the llvm-dev mailing list