[LLVMdev] Loop localize global variables (original) (raw)

Charlie Turner charlesturner7c5 at gmail.com
Tue Jul 21 07:22:04 PDT 2015


Hi Sundeep,

I am also interested in the load-store lifting transformation.

For static globals as-in your example, the transformation in general would rely on a better static global aliasing information that is currently in review http://reviews.llvm.org/D10059

For non-static globals, one problem with loop-based analysis alone is that in a popular embedded benchmark suite, you get serious gains if you can localize the globals in code like

int *G1; int *G2;

foo () { G1 = malloc(...); for (...) { // Lots of stuff with G1 and G2 worth localizing } }

That malloc is very important to consider when doing an alias query because now the aliasing infrastructure knows G1, G2 don't alias, and you won't see it from a loop pass. If you were to try and modify LICM to localize the globals for example, it would have to assume G1 and G2 MayAlias. I believe this implies we must use a FunctionPass, and I have a prototype that catches cases like the above, as well as the simpler ones. I can't commit myself however to when that will be ready, so I'm just sharing what I've found out, maybe it's helpful.

I'd be interested to hear your thoughts / approach in greater detail.

Thanks! --Charlie.

On 21 July 2015 at 06:10, <sundeepk at codeaurora.org> wrote:

typo corrected

lclvar = gblvar; for () { ...access lclvar... } gblvar = lclvar;

Hello all, I am writing to get some feedback on an optimization that I would like to upstream. The basic idea is to localize global variables inside loops so that it can be allocated into registers. For example, transform the following sequence static int gblvar; void foo() { for () { ...access gblvar... } } into something like static int gblvar; void foo() { int lclvar; lclvar = gblvar; for () { ...access clcvar... } gblvar = lclvar; } This transformation helps a couple of EEMBC benchmarks on both Aarch64 and Hexagon backends. I was wondering if there is interest to get this optimization upstreamed or if there is a better way of doing this. Thanks, Sundeep Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation


LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev



More information about the llvm-dev mailing list