[llvm-dev] How to write a interprocedural optimization in LLVM backend?
zan jyu Wong via llvm-dev
llvm-dev at lists.llvm.org
Mon Aug 17 19:27:54 PDT 2015
Hi,
I'm wondering how can I write a global optimization pass in the LLVM
backend.
What I'm going to do is to merge constant pool entries that are shared
between different machine functions and emit these shared entries
in proper places between the functions.
For example, if `foo` and `bar` use the same global variable `var`, I'd
like to
generate something like the following:
foo:
# code of foo
# ....
load r0, .LCPI_0
load r0, r0 # load var
# other code of foo
.LCPI_0:
.long var # address of var
bar:
# code of bar
# ....
load r0, .LCPI_0
load r0, r0 # load var
# other code of bar
The reason doing this is to reduce the code size as much as possible.
Our backend has a very limited PC-relative displacement for load/store
instructions.
I've tried the way that ARM and MIPS backend do (ConstantIslandPass),
but it does not share constant pool entries between functions and
increases code size in general.
It is possible to write a moudle pass in machine instruction level? If
possible,
how to do it? Any help is welcome. Thanks.
Cheers,
Huang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150818/8b961b0e/attachment.html>
More information about the llvm-dev
mailing list