<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<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);">
<span style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important">"3.
 This is where the real action is presently. It would be great to have more</span><br style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255)">
<span style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important">volunteers,
 who want to contribute to the project, jump in and assist here.</span><br style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255)">
<span style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important">There
 is plenty that can be worked on. Please contact me, if interested."<br>
</span><br>
Eric, would it be possible to create a projects page (<a href="https://github.com/orgs/flang-compiler/projects" style="margin: 0px; font-size: 12pt; font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255)" id="LPNoLP461124">https://github.com/orgs/flang-compiler/projects</a>)
 if you believe there is work that others can do to help here? </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
It would also be helpful if there are public instructions on how to build the f18 compiler, mlir repo and llvm together. Which repos/branches should we be using? And are PRs being accepted to these repos/branches? Or are you talking about contributions to upstream
 MLIR repo for the llvm dialect?<br>
<br>
Is (<span style="margin: 0px; font-size: 14.6667px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(50, 49, 48); background-color: rgb(255, 255, 255); display: inline !important">3)
 AST -> FIR -> MLIR LLVM-IR -> LLVM-IR)</span> in a shape where we can generate LLVM IR now?  <br>
<br>
<br>
Thanks,<br>
Kiran</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> flang-dev <flang-dev-bounces@lists.llvm.org> on behalf of Eric Schweitz (PGI) via flang-dev <flang-dev@lists.llvm.org><br>
<b>Sent:</b> 02 December 2019 20:51<br>
<b>To:</b> Doerfert, Johannes <jdoerfert@anl.gov><br>
<b>Cc:</b> flang-dev@lists.llvm.org <flang-dev@lists.llvm.org><br>
<b>Subject:</b> Re: [flang-dev] MLIR LLVM-IR dialect -- status and lowering questions</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">On 11/25, Johannes Doefert wrote:<br>
> On 11/25, Mehdi AMINI wrote:<br>
> > On Mon, Nov 25, 2019 at 4:25 PM Doerfert, Johannes via flang-dev <<br>
> > flang-dev@lists.llvm.org> wrote:<br>
> > <br>
> > > (I BCC'ed flang-dev as they might be interested in this as well.)<br>
> > ><br>
> > > Last week at SC we were discussing what the fastest and safest way to<br>
> > > get a working (=stable) F18 compiler is. Designing FIR and two (or<br>
> > > three) lowerings (AST -(1)-> FIR -(2)-> (MLIR LLVM-IR -(3)->) LLVM-IR)<br>
> > > seems to be something we want to end up eventually but it might not be<br>
> > > the fastest solution.<br>
> > ><br>
> > > The options I'm currently evaluating wrt. complexity to stable solution,<br>
> > > and which I will discuss in more detail on the flang-dev list, are:<br>
> > >   1) AST -> LLVM-IR<br>
> > >   2) AST -> MLIR LLVM-IR -> LLVM-IR<br>
> > >   3) AST -> FIR -> MLIR LLVM-IR -> LLVM-IR<br>
> > ><br>
> > <br>
> > I suspect 2 makes sense over 1 only if you include more MLIR construct<br>
> > (like the OpenMP dialect), otherwise I don't see the difference between 1<br>
> > and 2?<br>
> <br>
> It depends. I think 1 is "less" work but more "wasted" work.<br>
<br>
1. Trying to bridge from the f18 parse trees straight to LLVM-IR will be a ton<br>
of work and should be throw-away work at that.<br>
<br>
2. has problems in that semantics from Fortran cannot be represented in generic<br>
off-the-shelf MLIR. It would've been great, but alas. :)<br>
<br>
3. This is where the real action is presently. It would be great to have more<br>
volunteers, who want to contribute to the project, jump in and assist here.<br>
There is plenty that can be worked on. Please contact me, if interested.<br>
<br>
> <br>
> > > My questions/statements here are concerning the MLIR LLVM-IR dialect and<br>
> > > the lowerings to/from it, as well as the interplay of MLIR dialects and<br>
> > > LLVM-IR. I formulated some parts as statements and I would appreciate it<br>
> > > if you could comment on my understanding. If I missed the appropriate<br>
> > > documentation page, please forgive me.<br>
> > ><br>
> > > 1) Can I lower different dialects into LLVM-IR at the same time or do I<br>
> > >    need to lower to MLIR LLVM-IR first? When I ask if "I can do that" I<br>
> > >    mean if it is a use case that should conceptually work and also if it<br>
> > >    is already done by someone, thus actually working right now.<br>
> > ><br>
> > <br>
> > You can export to LLVM IR on your own from any dialect (ultimately Clang<br>
> > does it while traversing its AST, so you can traverse your own IR the same<br>
> > way).<br>
> <br>
> Perfect. That is needed for the FIR + OpenMP dialect already since the<br>
> latter shall not be lowered to MLIR LLVM-IR first.<br>
<br>
The Tilikum bridge lowers the bulk of FIR (modulo bugs and NYI features) and<br>
the standard MLIR dialect both in one big dialect conversion. Much of Tilikum<br>
is prototyped now.<br>
<br>
But that's the beginning of the story, as there are features to be completed<br>
in the MLIR LLVM-IR dialect as well (which is where your subsequent conversion<br>
goes).  Furthermore, features to support Fortran will need to find their way<br>
into LLVM (proper) itself.<br>
<br>
> <br>
> > The point of the LLVM dialect is to make this easier and more re-usable /<br>
> > composable though.<br>
> <br>
> That makes sense.<br>
> <br>
>  <br>
> > > 2) I browsed the LLVM-IR MLIR dialect and it looks like the<br>
> > >    instructions, attributes, etc. are hard coded, correct? (I mean we<br>
> > >    need to add them one by one to match LLVM-IR and keep them in-sync).<br>
> > ><br>
> > <br>
> > Yes.<br>
> > <br>
> > We have this longer term idea to generate the LLVM IR constructs (at least<br>
> > the verifiers, etc.) from the same tablegen as the MLIR dialect (it can be<br>
> > generating the MLIR dialect from a TableGen in LLVM for instance), that's<br>
> > gonna take more discussions within LLVM though.<br>
> <br>
> I think that is reasonable, probably takes a while to prepare though.<br>
> <br>
>  <br>
> > > 3) As far as I can tell,<br>
> > >    a) various instructions are present already (in their basic form,<br>
> > >       e.g., no nsw/nuw, inbounds, ...) but there seems to be some<br>
> > >       missing (switch was one I didn't find immediatly). Is there a<br>
> > >       list?<br>
> > ><br>
> > <br>
> > I don't think we have a list, we discussed this recently:<br>
> > <a href="https://groups.google.com/a/tensorflow.org/d/msg/mlir/gUTcuFex7eA/Ebj38saiBQAJ">
https://groups.google.com/a/tensorflow.org/d/msg/mlir/gUTcuFex7eA/Ebj38saiBQAJ</a><br>
> > It'd be nice to compute the full list indeed.<br>
> <br>
> Thanks for the reference. I read this thread a month ago but forgot<br>
> about it again.<br>
> <br>
> <br>
> > >    c) I also did only find a handful of attributes (noalias &<br>
> > > nosideeffect).<br>
> > ><br>
> > <br>
> > I don't even think that "nosideeffect" maps to anything when exporting to<br>
> > LLVM IR at the moment.<br>
> <br>
> Right. So noalias is the blueprint it seems.<br>
> <br>
> <br>
> > >    d) Global symbols seems to be very restricted right now e.g.,<br>
> > >       variables are internal only, functions external, right?<br>
> > ><br>
> > <br>
> > Right, we haven't yet added Linkage and ThreadLocalMode attributes on<br>
> > these. The dialect has been brought as the need came for lowering from<br>
> > higher-level dialects.<br>
> > The more interesting part is handling these in the general FuncOp.<br>
> <br>
> What do you mean with the last sentence? Is there some bigger design<br>
> question here to add linkage types (etc.) to the MLIR LLVM-IR dialect?<br>
> <br>
> Cheers,<br>
>   Johannes<br>
<br>
--<br>
Eric<br>
<br>
<br>
-----------------------------------------------------------------------------------<br>
This email message is for the sole use of the intended recipient(s) and may contain<br>
confidential information.  Any unauthorized review, use, disclosure or distribution<br>
is prohibited.  If you are not the intended recipient, please contact the sender by<br>
reply email and destroy all copies of the original message.<br>
-----------------------------------------------------------------------------------<br>
_______________________________________________<br>
flang-dev mailing list<br>
flang-dev@lists.llvm.org<br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/flang-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/flang-dev</a><br>
</div>
</span></font></div>
</body>
</html>