<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Feb 3, 2016, at 4:05 AM, Gleison Souza <<a href="mailto:gleison14051994@gmail.com" class="">gleison14051994@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Thanks Mehdi,</div><div class=""><br class=""></div><div class="">I tried to use this, but some debug information can be lost in these optimizations.</div><div class="">I need write in the source file to insert information before the loops, and in</div><div class="">some cases, I'm writing after the loop header.</div></div></div></blockquote><div><br class=""></div><div><div class="">I’m not sure what you mean.</div><div class=""><br class=""></div></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Please, take a look:</div><div class=""><br class=""></div><div class="">int foo1 (int *a, int *b, int n) {                                               </div><div class="">  int i, s= 0;                                                                   </div><div class="">  for (i = 0; i < n; i++) {                                                      </div><div class="">    s = s * a[i];                                                                </div><div class="">  }                                                                              </div><div class="">                                                                               </div><div class="">  for (i = 0; i < n; i++) {                                                      </div><div class="">    b[i] = a[i] + 3;                                                             </div><div class="">    s += a[i];                                                                   </div><div class="">   }                                                                              </div><div class="">  return s;                                                                      </div><div class="">} </div><div class=""><br class=""></div></div></div></blockquote><div><br class=""></div><div>What is the problem with the code generated on this example? </div><div>You were asking a specific question related to global variable before, now there is none.</div><div><br class=""></div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">In this case, using the line obtained by this one in the LLVM's IR:</div><div class=""><br class=""></div><div class="">Line = l->getStartLoc().getLine(); </div><div class=""><br class=""></div><div class="">The source file is cloned, and I'm writing my annotations inside the loop now.</div><div class="">I can't do several modifications in the struct of code, just the necessary, thats the problem.</div></div></div></blockquote><div><br class=""></div><div>This is all getting even more confusing to me…</div><div><br class=""></div><div>— </div><div>Mehdi</div><div><br class=""></div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Regards,</div><div class=""><br class=""></div><div class="">    Gleison</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">2016-02-03 1:07 GMT-02:00 Mehdi Amini <span dir="ltr" class=""><<a href="mailto:mehdi.amini@apple.com" target="_blank" class="">mehdi.amini@apple.com</a>></span>:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><br class=""><div class=""><span class=""><blockquote type="cite" class=""><div class="">On Feb 2, 2016, at 8:35 AM, Gleison Souza via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class=""><div class=""><div dir="ltr" class=""><div style="font-size:13px" class="">Dear LLVMers,</div><div style="font-size:13px" class=""><br class=""></div><div style="font-size:13px" class="">    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:</div><div style="font-size:13px" class=""><br class=""></div><div style="font-size:13px" class="">int *vectorE;</div><div style="font-size:13px" class=""><br class=""></div><div style="font-size:13px" class="">void foo (int n) {       </div><div style="font-size:13px" class="">  int i;</div><div style="font-size:13px" class="">  for (i = 0; i < n; i++)</div><div style="font-size:13px" class="">    vectorE[i] = i;</div><div style="font-size:13px" class="">}</div><div style="font-size:13px" class=""><br class=""></div><div style="font-size:13px" class="">into this one:</div><div style="font-size:13px" class=""><br class=""></div><div style="font-size:13px" class="">int *vectorE;</div><div style="font-size:13px" class=""><br class=""></div><div style="font-size:13px" class="">void foo (int n) {       </div><div style="font-size:13px" class="">  int i;</div><div style="font-size:13px" class="">  int* aux = vectorE;</div><div style="font-size:13px" class="">  for (i = 0; i < n; i++)</div><div style="font-size:13px" class="">    aux[i] = i;</div><div style="font-size:13px" class="">}</div></div></div></blockquote><div class=""><br class=""></div><div class=""><br class=""></div></span><div class="">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.</div><div class=""><br class=""></div><div class="">Try: clang -O1 -S -o - -mllvm -print-after-all</div><div class=""><br class=""></div><div class="">— </div><span class="HOEnZb"><font color="#888888" class=""><div class="">Mehdi</div><div class=""><br class=""></div><div class=""><br class=""></div></font></span></div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></body></html>