<div dir="ltr">Hi,<div><br></div><div>This is super exciting :)</div><div><br></div><div>Feel free to CC River Riddle and myself on the PR!</div><div>We're interested to keep an eye on it from the perspective of the future maintenance when we're in the same repo (in the sense that MLIR Core changes will take care of updating FIR API usages and tests).</div><div><br></div><div>Cheers,</div><div><br></div><div>-- </div><div>Mehdi</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jan 28, 2020 at 1:24 PM Jean Perier via flang-dev <<a href="mailto:flang-dev@lists.llvm.org">flang-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_2670454958341594148WordSection1">
<p class="MsoNormal"><span style="font-size:11pt">Hello everyone,<u></u><u></u></span></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">This RFC proposes the process for moving FIR from its experiment branch to the flang mainline branch.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">FIR is a dialect of MLIR.  The adoption and evolution of both of these IRs has been discussed in many forums and generally met with acceptance and enthusiasm.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">MLIR, since its unveiling in April 2019, and its adoption as an LLVM subproject late 2019, has been a rapidly evolving target.  Such evolution is expected and should not be read as a criticism.  The FIR experimental
 branch started as an exploration to gauge the suitability of MLIR as an IR for Fortran, and, as positive result accrued, this branch evolved into the work that we propose to upstream to flang.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">Because the FIR branch started as an experiment branch, and because it has been chasing MLIR changes, the complete commit history is not of particular value.  Also, because the sum total of the work as it
 stands is too large to be properly reviewed</span> in one pull request<span style="font-size:11pt">, the patches will be presented as a series of incremental changes, each freestanding and logically organized.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">The actual series of patches will depend on review comments; however, currently, the rough organization is like this:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add clang-format files for FIR source code (MLIR style)</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add ASTBuilder structure to help lowering the parse-tree</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">The ASTBuilder structure is a transient data structure that</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">is meant to be built from the parse tree just before lowering to</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">FIR and that will be deleted just afterwards. It is not meant to perform</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">optimization analysis and transformations. It only provides temporary</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">information, such as label target information or parse tree parent nodes,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">that is meant to be used to lower the parse tree structure into</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">FIR operations.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">A pretty printer is available to visualize this data structure.</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Finish adding CMake files to build f18</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add cmake/modules files</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Update f18 tools CMakeLists.txt</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Update README.md with build instructions</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add a Version.h and <a href="http://Version.inic.in" target="_blank">Version.inic.in</a> files for flang</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- These CMake files are temporary; better versions are under development</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add Doxygen configuration to flang</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">  </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add Fortran IR (FIR) MLIR dialect implementation</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">Adds FIR library that implements an MLIR dialect to which Fortran</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">parse-tree will be lowered to.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">FIR is documented in FIRLangRef.md added with this commit.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">  </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add AbstractConverter interface and implement lowering of types to FIR</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add the AbstractConverter class that provides an interface to</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">lower expressions and types but does not provide any implementation.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add an implementation of lowering of front-end types to FIR types.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add lowering of parser::CharBlock to mlir::Location</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Lowering of Fortran Expression to FIR</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add helpers to manipulate MLIR OpBuilder and hide</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">  boilerplate.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Lower Fortran scalar intrinsic operations</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add a framework to describe runtime and insert runtime calls in FIR</span>.<u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">  It allows to create a constexpr map to describe the</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">  runtime.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Start Lowering of numerical intrinsics</span><s><u></u><u></u></s></p>
<p class="MsoNormal"><span style="font-size:11pt">    </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add bridge from AST to FIR</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add the class that implements the lowering of</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">the Fortran ASTs to FIR operations as described in</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">BurnsidetoFIR.md.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- The lowering of IO statements is done in another file</span><u></u><u></u></p>
<p class="MsoNormal">  <span style="font-size:11pt">to keep the bridge smaller.</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add FIR optimizer library</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">This library provides transformation passes that can be run of FIR</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">to perform several high-level optimizations.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add testing tools</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add bbc tool that takes a Fortran input file, drives parsing,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">semantic analysis, and then lowers the parse-tree to FIR. It can</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">then run transformation passes on the obtained MLIR before</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">generating LLVM IR. The bbc tool is used for testing.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add tco tool that is meant to process mlir input files and</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">drives transformations on it. The tco tool is used for testing.</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Update lit config for FIR tests</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">* Add FIR and lowering tests</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- A FIR round-trip tests (in test/fir)</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add new FIR lit tests (in test-lit/fir)</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">- Add expression lowering test (in test/lower)</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt">The patches will be sent in successive PRs into f18 master because the later patches depend on the first ones.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">The first patch will bring a dependency upon LLVM but not MLIR. Note that current CMake files already require LLVM package but no code was actually using it yet (apart from LIT tests). Subsequent patches will
 require MLIR and new CMake files.<u></u><u></u></span></p>
</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>

_______________________________________________<br>
flang-dev mailing list<br>
<a href="mailto:flang-dev@lists.llvm.org" target="_blank">flang-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/flang-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/flang-dev</a><br>
</blockquote></div>