<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 19, 2017 at 11:46 AM, Mehdi Amini via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On Jan 19, 2017, at 11:36 AM, Adve, Vikram Sadanand via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
><br>
> Hi Johannes,<br>
><br>
>> I am especially curious where you get your data from. Tapir [0] (and to<br>
>> some degree PIR [1]) have shown that, counterintuitively, only a few changes<br>
>> to LLVM passes are needed. Tapir was recently used in an MIT class with a<br>
>> lot of students and it seemed to work well with only minimal changes<br>
>> to analysis and especially transformation passes.<br>
><br>
> TAPIR is an elegant, small extension and, in particular, I think the idea of asymmetric parallel tasks and control flow is a clever way to express parallelism with serial semantics, as in Cilk.  Encoding the control flow extensions as explicit instructions is orthogonal to that, though arguably more elegant than using region tags + metadata.<br>
><br>
> However, Cilk is a tiny language compared with the full complexity of other languages, like OpenMP.  To take just one example, TAPIR cannot express the ORDERED construct of OpenMP.  A more serious concern, IMO, is that TAPIR (like Cilk) requires serial semantics, whereas there are many parallel languages, OpenMP included, that do not obey that restriction.  Third, OpenMP has *numerous* clauses, e.g., REDUCTION or PRIVATE,  that are needed because without that, you’d be dependent on fundamentally hard compiler analyses to extract the same information for satisfactory parallel performance; realistic applications cannot depend on the success of such analyses.<br>
<br>
</span>I agree with this, but I’m also wondering if it needs to be first class in the IR?<br>
For example we know our alias analysis is very basic, and C/C++ have a higher constraint thanks to their type system, but we didn’t inject this higher level information that helps the optimizer as first class IR constructs.<br></blockquote><div><br></div><div>FWIW, while i agree with the general point, i wouldn't use this example.</div><div>Because we pretty much still suffer to this day because of it (both in AA, and devirt, and ...)  :)</div><div>We can't always even tell fields apart</div><div><br></div><div><br></div></div></div></div>