[llvm-dev] [RFC] Add IR level interprocedural outliner for code size.
Quentin Colombet via llvm-dev
llvm-dev at lists.llvm.org
Wed Jul 26 21:59:27 PDT 2017
> On Jul 26, 2017, at 12:07 PM, Sanjoy Das <sanjoy at google.com> wrote:
>
> Hi,
>
> On Wed, Jul 26, 2017 at 10:10 AM, Quentin Colombet via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
>> No, I mean in terms of enabling other optimizations in the pipeline like
>> vectorizer. Outliner does not expose any of that.
>
> I have not made a lot of effort to understand the full discussion here (so what
> I say below may be off-base), but I think there are some cases where outlining
> (especially working with function-attrs) can make optimization easier.
>
> It can help transforms that duplicate code (like loop unrolling and inlining) be
> more profitable -- I'm thinking of cases where unrolling/inlining would have to
> duplicate a lot of code, but after outlining would require duplicating only a
> few call instructions.
>
>
> It can help EarlyCSE do things that require GVN today:
>
> void foo() {
> ... complex computation that computes func()
> ... complex computation that computes func()
> }
>
> outlining=>
>
> int func() { ... }
>
> void foo() {
> int x = func();
> int y = func();
> }
>
> functionattrs=>
>
> int func() readonly { ... }
>
> void foo(int a, int b) {
> int x = func();
> int y = func();
> }
>
> earlycse=>
>
> int func(int t) readnone { ... }
>
> void foo(int a, int b) {
> int x = func(a);
> int y = x;
> }
>
> GVN will catch this, but EarlyCSE is (at least supposed to be!) cheaper.
>
>
> Once we have an analysis that can prove that certain functions can't trap,
> outlining can allow LICM etc. to speculate entire outlined regions out of loops.
>
>
> Generally, I think outlining exposes information that certain regions of the
> program are doing identical things. We should expect to get some mileage out of
> this information.
That’s a fair point.
Using outlining is one possible way of doing that, indeed.
We could get that out of some analysis or improve the different passes. Because generally speaking, I don’t think you want to add call indirections in performance sensitive areas.
>
> -- Sanjoy
More information about the llvm-dev
mailing list