<div dir="ltr">I am looking forward to trying this out when it is ready!<div><br></div><div>-viral<br><br>On Wednesday, June 22, 2016 at 7:39:54 AM UTC-7, Tobias Grosser wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">On Wed, Jun 22, 2016, at 02:15 AM, Matthias Reisinger via llvm-dev
<br>wrote:
<br>> Dear Community,
<br>
<br>Hi Matthias,
<br>
<br>thank you a lot for this update!
<br> 
<br>> in an earlier post, students working on LLVM were asked to provide a
<br>> short 
<br>> report on
<br>> their GSoC project. in the following I want to give an overview on the 
<br>> current status of my
<br>> GSoC project and outline my next planned activities. Since my mentoring 
<br>> organization is Julia,
<br>> I also send this to the according mailing list.
<br>> 
<br>> *1. Activities so far:*
<br>> 
<br>> As described in my proposal [1], I am working on making available Polly's 
<br>> optimizations on Julia.
<br>> Within the pull-requests [2] and [3] I integrated Polly into Julia's 
<br>> LLVM-based JIT infrastructure.
<br>> Polly can now be explicitly used to optimize Julia functions that are 
<br>> annotated with the newly
<br>> introduced `@polly` macro. You may also read my blog post [4] on this 
<br>> topic, which illustrates how
<br>> these new features can be used in Julia. In a next step I used first
<br>> micro 
<br>> benchmarks to analyze
<br>> the LLVM code that Julia produces internally and tried to determine 
<br>> characteristics of the produced
<br>> code that prevents Polly from applying its optimizations. For a more 
<br>> comprehensive evaluation,
<br>> I ported the PolyBench benchmark suite to Julia. My recent blog post [5] 
<br>> provides more details on this.
<br>> 
<br>> These benchmarks helped to identify Julia constructs which hinder Polly's 
<br>> SCoP detection. `for`-loops
<br>> for which both the lower and the upper bound are parametric are lowered
<br>> to 
<br>> LLVM code that restrain
<br>> ScalarEvolution analysis and has been discussed in the bug report at [6]. 
<br>> It was possible to solve
<br>> this problem and I will shortly supply a patch for this. Another language 
<br>> construct that is lowered to
<br>> LLVM IR that limits the optimization potential are Julia's `StepRange`s. 
<br>> More concretely, this regards
<br>> loops of the form `for i = lower_bound:step:upper_bound`. They will
<br>> prevent 
<br>> optimizations especially
<br>> when occurring inside other loops.
<br>
<br>Very good work indeed! Thanks for upstreaming the first patches and for
<br>tracking down all the mismatches that today make optimizations more
<br>difficult than necessary! It seems -- despite it certainly requiring
<br>effort -- most of the changes look tracktable. Looking forward to see
<br>them resolved one-by-one.
<br>
<br>Also, thank you for writing a PollyBench-Julia version. This is indeed a
<br>great tool to test your work and
<br>obviously gives some nice data to talk about in your blog post.
<br>
<br>Best,
<br>Tobias
<br></blockquote></div></div>