[llvm-dev] Particular type of loop optimization

Gleison Souza via llvm-dev llvm-dev at lists.llvm.org
Wed Feb 3 04:05:10 PST 2016


Thanks Mehdi,

I tried to use this, but some debug information can be lost in these
optimizations.
I need write in the source file to insert information before the loops, and
in
some cases, I'm writing after the loop header.

Please, take a look:

int foo1 (int *a, int *b, int n) {

  int i, s= 0;

  for (i = 0; i < n; i++) {

    s = s * a[i];

  }



  for (i = 0; i < n; i++) {

    b[i] = a[i] + 3;

    s += a[i];

   }

  return s;

}

In this case, using the line obtained by this one in the LLVM's IR:

Line = l->getStartLoc().getLine();

The source file is cloned, and I'm writing my annotations inside the loop
now.
I can't do several modifications in the struct of code, just the necessary,
thats the problem.

Regards,

    Gleison

2016-02-03 1:07 GMT-02:00 Mehdi Amini <mehdi.amini at apple.com>:

>
> On Feb 2, 2016, at 8:35 AM, Gleison Souza via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
> Dear LLVMers,
>
>     I am trying to implement a particular type of loop optimization, but I
> am having problems with global variables. To solve this problem, I would
> like to know if LLVM has some pass that moves loads outside loops. I will
> illustrate with an example. I want to transform this code below. I am
> writing in C for readability, but I am analysing LLVM IR:
>
> int *vectorE;
>
> void foo (int n) {
>   int i;
>   for (i = 0; i < n; i++)
>     vectorE[i] = i;
> }
>
> into this one:
>
> int *vectorE;
>
> void foo (int n) {
>   int i;
>   int* aux = vectorE;
>   for (i = 0; i < n; i++)
>     aux[i] = i;
> }
>
>
>
> Have you looked at the output of clang with optimization enabled (even
> O1)? For this C++ code the optimizer moves the access to the global in the
> loop preheader, and then the loop itself does not access the global at all,
> which seems to be what you’re looking for.
>
> Try: clang -O1 -S -o - -mllvm -print-after-all
>
>> Mehdi
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160203/fcd7ac2b/attachment.html>


More information about the llvm-dev mailing list