<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hello Steve,<br>
<br>
Thanks for your mail.<br>
<br>
Yes, we will use the OpenMPIR builder to outline. I have briefly mentioned this in the parallel construct example (including that below for your reference). Note that using the OpenMP IRBuilder will be the last step before LLVM IR generation. After this point,
 there is no going back to MLIR. Any transformation or optimisation in MLIR has to be done before this step. This can involve constant propagation and other code motion to reduce the bad effects that outlining brings. But this is new code that will have to
 be written.<br>
<br>
<font face="Calibri, Helvetica, sans-serif" style="margin: 0px; background-color: rgb(255, 255, 255)">Example 1: Parallel construct<br>
</font><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important"></span>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">1) Example OpenMP code</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><Fortran code></span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">!$omp parallel</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">c = a + b</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">!$omp end parallel</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><More Fortran code></span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"><span style="margin: 0px"> </span></span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"></span><br>
</p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">2) Parse tree (omitted)</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"></span><br>
</p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">3) The first lowering will be to a mix of FIR dialect and OpenMP dialect. The OpenMP dialect has an operation called parallel with a nested region of code. The nested region will have FIR (and standard dialect) operations.</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"></span><br>
</p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">Mlir.region(…) {</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">%1 = fir.x(…)</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">…</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">%20 = omp.parallel {</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px">       <span> </span></span>%1 = addf %2, %3 : f32</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px">     <span> </span></span>}</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">%21 = <more fir></span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">…</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">}</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"></span><br>
</p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"></span><br>
</p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">4) The next lowering will be to OpenMP and LLVM dialect</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">Mlir.region(…) {</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">%1 =<span> </span><a href="http://llvm.xyz/" target="_blank" rel="nofollow" style="margin: 0px; color: rgb(102, 17, 204); cursor: pointer">llvm.xyz</a>(...)</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">…</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">%20 = omp.parallel {</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px">       <span> </span></span>%1 = llvm.fadd %2, %3 : !llvm.float</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px">     <span> </span></span>}</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px"> </span>%21 = <more llvm dialect></span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">…</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">}</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"></span><br>
</p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"></span><br>
</p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">5) The next conversion will be to LLVM IR. Here the OpenMP dialect will be lowered using the OpenMP IRBuilder and the translation library of the LLVM dialect. The IR Builder will see that there is a region under the OpenMP construct
 omp.parallel. It will collect all the basic blocks inside that region and then generate outlined code using those basic blocks. Suitable calls will be inserted to the OpenMP API.<span style="margin: 0px"> </span></span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"><span style="margin: 0px"> </span></span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">define @outlined_parallel_fn(...)</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">{</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px"> <span> </span></span>....</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px"> <span> </span></span>%1 = fadd float %2, %3</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px"> <span> </span></span>...</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">}</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier; min-height: 14px">
<span style="margin: 0px"><span style="margin: 0px"> </span></span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">define @xyz(…)</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">{</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px"> <span> </span></span>%1 = alloca float</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px"> <span> </span></span>....</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px"><span style="margin: 0px"> <span> </span></span>call kmpc_fork_call(...,outlined_<wbr>parallel_fn,...)</span></p>
<p style="margin: 0px; background-color: rgb(255, 255, 255); font-size: 12px; font-family: Courier">
<span style="margin: 0px">}<br>
</span></p>
<br>
<br>
Regards,<br>
Kiran</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Stephen Scalpone <sscalpone@nvidia.com><br>
<b>Sent:</b> 06 December 2019 17:42<br>
<b>To:</b> Kiran Chandramohan <Kiran.Chandramohan@arm.com>; flang-dev@lists.llvm.org <flang-dev@lists.llvm.org><br>
<b>Cc:</b> Doerfert, Johannes <jdoerfert@anl.gov>; Roger Ferrer Ibáñez <rofirrim@gmail.com>; Richard Barton <Richard.Barton@arm.com>; Will Lovett <Will.Lovett@arm.com><br>
<b>Subject:</b> Re: Summary of F18 OpenMP design</font>
<div> </div>
</div>
<style>
<!--
@font-face
        {font-family:"Cambria Math"}
@font-face
        {font-family:Calibri}
@font-face
        {font-family:Consolas}
@font-face
        {font-family:"Segoe UI"}
p.x_MsoNormal, li.x_MsoNormal, div.x_MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif}
a:link, span.x_MsoHyperlink
        {color:blue;
        text-decoration:underline}
pre
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New"}
span.x_HTMLPreformattedChar
        {font-family:Consolas}
span.x_EmailStyle21
        {font-family:"Calibri",sans-serif;
        color:windowtext}
.x_MsoChpDefault
        {font-size:10.0pt}
@page WordSection1
        {margin:1.0in 1.0in 1.0in 1.0in}
div.x_WordSection1
        {}
-->
</style>
<div lang="EN-US" link="blue" vlink="purple">
<div class="x_WordSection1">
<p class="x_MsoNormal">Hi Kiran,</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">Thank you for the detailed explanation and investigation of the OpenMP framework for lowering and code-generation.  It all looks good to me, in particular the introduction of an OpenMP MLIR dialect and the placement of OpenMP IRBuilder
 in the overall scheme.</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">Brian’s proposal for OpenMP symbol tables says that explicit symbol table entries will be created for entities that have different attributes inside of OpenMP regions.  E.g. if there’s an X in an outer scope that becomes thread private,
 then there’s an additional symbol table entry in the OpenMP region scope for that symbol.  That new symbol has the additional OpenMP attributes and a link back to the original entity in the outer scope.  We think this organization will simplify outlining.</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">I don’t recall much discussion about outlining.  Do you think OpenMP IRBuilder will drive the decisions about when and what to outline?  After outlining, will the compiler be able to run the outlined code back through the MLIR+ transformations
 and optimizations?  Are there situations where the outlined code presents more opportunities for optimization?</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">- Steve</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal"> </p>
<div style="border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0in 0in 0in">
<p class="x_MsoNormal"><b><span style="font-size:12.0pt; color:black">From: </span>
</b><span style="font-size:12.0pt; color:black">Kiran Chandramohan <Kiran.Chandramohan@arm.com><br>
<b>Date: </b>Friday, November 22, 2019 at 9:26 AM<br>
<b>To: </b>"flang-dev@lists.llvm.org" <flang-dev@lists.llvm.org><br>
<b>Cc: </b>"Doerfert, Johannes" <jdoerfert@anl.gov>, Roger Ferrer Ibáñez <rofirrim@gmail.com>, Stephen Scalpone <sscalpone@nvidia.com>, Richard Barton <Richard.Barton@arm.com>, Will Lovett <Will.Lovett@arm.com><br>
<b>Subject: </b>RFC: Summary of F18 OpenMP design</span></p>
</div>
<div>
<p class="x_MsoNormal"> </p>
</div>
<div>
<div>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; color:black; background:white">Hi all,</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:black"></span></p>
</div>
<div>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; color:black; background:white"><br>
We gave a presentation [1] a few months back regarding the OpenMP design for F18 during the Flang/F18 technical call, also sent a summary mail [2] and a set of walkthroughs [3] to the mailing list. We received some feedback and have incorporated that into the
 design. </span><span style="font-size:12.0pt; color:black">A summary of the design and status of the OpenMP implementation in F18 from lowering of the parse tree to LLVM IR generation is presented in this mail. (Note that Semantic and Structural checks are
 not covered. Refer to Gary's biweekly mail for the status.)<br>
</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:black"><br>
</span><span style="font-size:12.0pt; color:black">The proposed design can be seen in slide 10 of the presentation [1]. The design summary is as follows.<br>
i) Uses the following two components.<br>
a) MLIR [4]: Necessary since MLIR has already been chosen as the framework for building the Fortran IR (FIR) for Flang. By using MLIR for OpenMP we have a common representation for OpenMP and Fortran constructs in the MLIR framework and thereby take advantage
 of optimisations and avoid black boxes.<br>
b) OpenMP IRBuilder [5]: For sharing of OpenMP codegen with Clang.<br>
<br>
ii) Current and Proposed Flow<br>
a) The current sequential code flow in Flang (Slide 5) of the presentation [1] can be summarised as follows,</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:black"><br>
</span><span style="font-size:12.0pt; color:black">[Fortran code] -> Parser -> [AST] -> Lowering -> [FIR MLIR] -> Conversion -> [LLVM MLIR] -> Translation -> [LLVM IR]</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:black"><br>
</span><span style="font-size:12.0pt; color:black">b) The modified flow with OpenMP (Slide 10) will have lowering of the AST to a mix of FIR and OpenMP dialects. These are then optimised and finally converted to mix of OpenMP and LLVM MLIR dialects. The mix
 is translated to LLVM IR using the existing translation library for LLVM MLIR and the OpenMP IRBuilder currently under construction.</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:black"><br>
</span><span style="font-size:12.0pt; color:black">[Fortran code] -> Parser -> [AST] -> Lowering -> [FIR + OpenMP MLIR] -> Conversion -> [LLVM + OpenMP MLIR] -> Translation (Use OpenMP IRBuilder) -> [LLVM IR]<br>
c) The MLIR infrastructure provides a lot of optimisation passes for loops. It is desirable that we take advantage of some of these. But the LLVM infrastructure also provides several optimisations. So there exist some questions regarding where the optimisations
 should be carried out. We will decide on which framework to choose only after some experimentation. If we decide that the OpenMP construct (for e.g. collapse) can be handled fully in MLIR and that is the best place to do it (based on experiments) then we will
 not use the OpenMP IRBuilder for these constructs.<br>
<br>
iii) OpenMP MLIR dialect<br>
The proposed plan involves writing an MLIR dialect for OpenMP. Operations of the dialect will be a mix of fine and coarse-grained. e.g. Coarse: omp.parallel, omp.target, Fine: omp.flush. The operations in MLIR can have regions, hence there is no need for outlining
 at the MLIR level. While the detailed design of the dialect is TBD, the next section provides links to walkthrough examples which provides a summary of the full flow as well as use of MLIR operations for OpenMP directives, and attributes for representing clauses
 which are constant.  The proposed plan involves a) lowering F18 AST with OpenMP directly to a mix of OpenMP and FIR dialects. b) converting this finally to a mix of OpenMP and LLVM dialects. This requires that OpenMP dialect can coexist and operate with other
 dialects. The design is also intended to be modular so that other frontends (C/C++) can reuse the OpenMP dialect in the future. <br>
<br>
iv) Examples<br>
A few walkthroughs have been sent before [3]. These walkthroughs illustrate with an example, the flow for a few constructs (parallel, target, collapse, simd). For the parallel and target constructs will use the OpenMP IRBuilder for lowering to LLVM IR. MLIR
 offers infrastructure to do loop transformations hence for the collapse clause the transformation is done inside the MLIR framework. While both LLVM and MLIR offers infrastructure for vectorisation the LLVM vectoriser is more mature and hence LLVM is preferred.
 For details refer to the links [3].<br>
<br>
v) Progress<br>
i) OpenMP MLIR<br>
-> Sent a few walkthroughs which illustrate the flow from AST to LLVM IR. <br>
-> First patch [6] which registers the OpenMP dialect with MLIR has been submitted.<br>
-> Design of a minimal dialect with a single construct (barrier) is in progress.<br>
ii) OpenMP IRBuilder</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:black"><br>
</span><span style="font-size:12.0pt; color:black">-> <a href="mailto:jdoerfert@anl.gov" target="_blank">@Doerfert, Johannes</a> has a series of patches [7] introducing preliminary support for the OpenMP IRBuilder which are either approved or under review.
 The initial set adds support for the parallel and barrier construct.<br>
-> Others (Roger Ferrer, Kiran) have tried it for other constructs like taskwait and flush.</span></p>
</div>
<div>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; font-family:"Segoe UI"; color:black"> </span></p>
</div>
<div>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; color:black">vi) Next Steps<br>
-> Send the design to the MLIR mailing list to get approval and to enable code review.<br>
-> Implement the accepted plan on a construct by construct basis starting with the parallel construct.</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:#201F1E"></span></p>
</div>
</div>
<blockquote style="margin-left:30.0pt; margin-right:0in">
<div>
<div>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; color:black">-> Represent construct in OpenMP MLIR</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:#201F1E"></span></p>
</div>
</div>
<div>
<div>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; color:black">-> Refactor the code for the construct in OpenMP IRBuilder</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:#201F1E"></span></p>
</div>
</div>
<div>
<div>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; color:black">-> Set up the translation library for OpenMP in MLIR to call the OpenMP IRBuilder</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:#201F1E"></span></p>
</div>
</div>
<div>
<div>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; color:black">-> Set up the transformation from the frontend to OpenMP MLIR for this construct<br>
-> Upstream changes</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:#201F1E"></span></p>
</div>
</div>
</blockquote>
<div>
<div>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">1) <a href="https://drive.google.com/file/d/1vU6LsblsUYGA35B_3y9PmBvtKOTXj1Fu/view?usp=sharing" target="_blank">https://drive.google.com/file/d/1vU6LsblsUYGA35B_3y9PmBvtKOTXj1Fu/view?usp=sharing</a></span></pre>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">2) </span><span style="color:#201F1E"><a href="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-August/000264.html" target="_blank"><span style="font-family:"Calibri",sans-serif; color:black">http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-August/000264.html</span></a></span><span style="color:black"></span></pre>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">3) Links for walkthroughs</span></pre>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">parallel: </span><span style="color:black"><a href="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-August/000269.html" target="_blank"><span style="font-family:"Calibri",sans-serif">http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-August/000269.html</span></a></span><span style="font-family:"Calibri",sans-serif; color:black"></span></pre>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">collapse: </span><span style="color:black"><a href="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000273.html" target="_blank" title="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000273.html"><span style="font-family:"Calibri",sans-serif">http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000273.html</span></a></span></pre>
<div>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">collapse, Modification after feedback: </span><span style="color:black"><a href="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000277.html" target="_blank" title="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000277.html"><span style="font-family:"Calibri",sans-serif">http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000277.html</span></a></span></pre>
</div>
<div>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">simd: </span><span style="color:black"><a href="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000278.html" target="_blank" title="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000278.html"><span style="font-family:"Calibri",sans-serif">http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000278.html</span></a></span></pre>
</div>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">target: </span><span style="color:black"><a href="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000285.html" target="_blank"><span style="font-family:"Calibri",sans-serif">http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-September/000285.html</span></a></span></pre>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">4) </span><span style="color:black"><a href="https://github.com/tensorflow/mlir" target="_blank"><span style="font-family:"Calibri",sans-serif">https://github.com/tensorflow/mlir</span></a></span></pre>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">5) </span><span style="color:black"><a href="http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-May/000197.html" target="_blank"><span style="font-family:"Calibri",sans-serif">http://lists.flang-compiler.org/pipermail/flang-dev_lists.flang-compiler.org/2019-May/000197.html</span></a></span></pre>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">6) </span><span style="color:#201F1E"><a href="https://github.com/tensorflow/mlir/pull/244" target="_blank"><span style="font-family:"Calibri",sans-serif">https://github.com/tensorflow/mlir/pull/244</span></a></span></pre>
<pre style="background:white"><span style="font-family:"Calibri",sans-serif; color:black">7) OpenMP IRBuilder (only a few included here)</span><span style="color:#201F1E"></span></pre>
<pre style="background:white"><span style="color:#201F1E"><a href="https://reviews.llvm.org/D69785" target="_blank"><span style="font-family:"Calibri",sans-serif">https://reviews.llvm.org/D69785</span></a></span></pre>
<pre style="background:white"><span style="color:#201F1E"><a href="https://reviews.llvm.org/D70290" target="_blank"><span style="font-family:"Calibri",sans-serif">https://reviews.llvm.org/D70290</span></a></span></pre>
<pre style="background:white"><span style="color:#201F1E"><a href="https://reviews.llvm.org/D69853" target="_blank"><span style="font-family:"Calibri",sans-serif">https://reviews.llvm.org/D69853</span></a></span></pre>
<pre style="background:white"><span style="color:#201F1E"><a href="https://reviews.llvm.org/D70290" target="_blank"><span style="font-family:"Calibri",sans-serif">https://reviews.llvm.org/D70290</span></a></span></pre>
<p class="x_MsoNormal" style="background:white"><span style="font-size:12.0pt; color:black">Thanks,</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:#201F1E"><br>
</span><span style="font-size:12.0pt; color:black">Kiran</span><span style="font-size:12.0pt; font-family:"Segoe UI"; color:#201F1E"></span></p>
</div>
<p class="x_MsoNormal"><span style="font-size:12.0pt; color:black"> </span></p>
</div>
</div>
<div>
<hr>
</div>
<div>This email message is for the sole use of the intended recipient(s) and may contain confidential information.  Any unauthorized review, use, disclosure or distribution is prohibited.  If you are not the intended recipient, please contact the sender by
 reply email and destroy all copies of the original message. </div>
<div>
<hr>
</div>
</div>
</body>
</html>