[llvm-dev] FC : A MLIR+LLVM based Fortran front end

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 18 13:54:31 PST 2020


Thank you for the summary.  Don't know about anyone else, but this 
helped me a lot.  I'm only casually interested in the fortran efforts 
and had been getting lost as to which project was being referenced in 
various threads.

Philip

On 2/9/20 2:50 PM, Petr Penzin via llvm-dev wrote:
> Let me try to summarize what those are - hopefully this can be useful 
> for somebody. Please this write up with a grain of salt (particularly 
> on Fortran support), as I don't follow every project here very closely.
>
> In somewhat chronological order:
>
> *Flang (old)*
> https://github.com/llvm-flang/flang
> A deeply modified fork of Clang. Originally a GSoC project, but 
> received contributions from numerous people after. Uses Clang-like 
> AST, compiler diagnosics, tablegen, Lit for testing and so on. 
> Recursive descent parser, similar to Clang's. Abandoned in favor of 
> new Flang. Fortran support: F77, F90, and F03 (all partial)
>
> *Flang (new)*
> https://github.com/flang-compiler/flang
> Unrelated effort under the same name. Was publicly announced as 
> "derived from PGI Fortran compiler" [1], which is an existing (and 
> relatively old) code base with a lot more features. Uses two stage 
> compilation with two different executables (apart from the driver) 
> doing the work. It emits some form of textual IR between stages and 
> produces LLVM IR as text before handing it back to the rest of 
> toolchain (via Clang). This project does not use any LLVM libraries 
> directly. Its frontend employs its own parser generator [2]. If I 
> remember correctly, it might have some issues with more complex 
> features from Fortran 2003 or 2008 and newer standards, but is pretty 
> solid at everything older. Despite its quirks it is the most used and 
> most complete compiler on this list.
>
> [1]: 
> https://www.llnl.gov/news/nnsa-national-labs-team-nvidia-develop-open-source-fortran-compiler-technology
> [2]: 
> https://github.com/flang-compiler/flang/tree/master/tools/flang1/utils/prstab
>
> *f18*
> https://github.com/flang-compiler/f18
> Ground-up rework of (new) Flang. The only entry on the list that does 
> not perform full compilation yet. It was announced that it would 
> eventually emit MLIR. It looks like parser is the only complete 
> component as of today. As for internals, there is an evaluation [3] 
> with some slides [4] posted on flang-dev list - looks like covering 
> writing tools based on f18. A quick look at the sources shows some 
> interesting use of overloaded '>>' operator [5] resembling monadic 
> combination in functional programming, which is confirmed in one of 
> the bug reports [6]. The rest of the same bug report is worth reading 
> as well, as this programming style might lead to high resource usage 
> while building the compiler.
>
> [3]: http://lists.llvm.org/pipermail/flang-dev/2019-December/000089.html
> [4]: 
> http://lists.llvm.org/pipermail/flang-dev/attachments/20191202/6e7c1e51/attachment-0001.pdf
> [5]: 
> https://github.com/flang-compiler/f18/blob/master/lib/parser/stmt-parser.h#L24
> [6]: 
> https://github.com/flang-compiler/f18/issues/431#issuecomment-487664759
>
> *Fort*
> https://github.com/llvm-fortran/fort/
> Renamed fork of old flang. Compatible with lasted LLVM, some 
> improvements have been added. Probably the most Clang-like compiler on 
> the list. Uses AST based on Clang's, tablegen, Lit, mostly same LLVM 
> libraries which Clang uses. Just like its predecessor lacks driver. 
> Supports parts of Fortan 77, Fortan 90, and Fortran 2003.
>
> *FC*
> https://github.com/compiler-tree-technologies/fc
> Not related to any of the above, but seems to be in some ways similar 
> to Clang/(old)Flang/Fort. Recursive descent parser; emits MLIR. Does 
> not use tablegen, has a different way of throwing errors, has no 
> builtin diagnostics, also no driver. Project has only seven commits to 
> this date. Not clear on the Fortran standard support (has flags to 
> support f77 and f95), the claim that it can compile a couple of larger 
> application from SPEC, but I can't find which ones.
>
>
> On 1/13/20 9:02 AM, James Y Knight via llvm-dev wrote:
>> Neat, another fortran compiler option.
>>
>> Does anyone have a list/comparison of all the LLVM fortran compilers? 
>> I'm not really tracking this, since Fortran isn't really my area of 
>> expertise, but I've seen the following. Perhaps there are even more?
>>
>> "Flang". The original of the name, I think? Abandoned.
>> https://github.com/llvm-flang/flang
>> "Fort" -- fork of the above flang, renamed. Seems active.
>> https://github.com/llvm-fortran/fort/
>>
>> "Flag". Different from the other "flang". Active, but deprecated in 
>> favor of f18.
>> https://github.com/flang-compiler/flang
>> "f18". Rewrite-from-scratch (?) of adjacent "flang". Active, but not 
>> fully-functional yet (I think?).
>> https://github.com/flang-compiler/f18
>>
>> "FC". Newly-developed, independent of the other compilers. Active. 
>> (But this source-code dates from the previous announcement, not yet 
>> updated with latest developments):
>> https://github.com/compiler-tree-technologies/fc
>>
>> I don't know how any of these compare with each other, nor why we 
>> have so many. I have no opinion on which or whether any of these 
>> should be "blessed", nor do I really want to become educated enough 
>> on this topic to gain such an opinion personally.
>>
>> But, given that there appear to be at least 3 fortran compilers under 
>> active development by different people, I would love to be reassured 
>> that such a comparison has been done, and that we are selecting one 
>> of them for good reasons. It'd be great if someone (or multiple 
>> someones) could post a summary/comparison of what these things all 
>> are, and why one is the right path forward vs another.
>>
>> On Mon, Jan 13, 2020 at 2:46 AM Prashanth N R via llvm-dev 
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>>     Hi Chris-
>>     We are mostly cleaning up the code for open sourcing. Early code
>>     drop will happen in a day or two and will continue through this
>>     week. We would love to work with the rest of the community on this.
>>
>>     thanks,
>>     -Prashanth
>>
>>     On Mon, Jan 13, 2020 at 11:17 AM Chris Lattner
>>     <clattner at nondot.org <mailto:clattner at nondot.org>> wrote:
>>
>>         Agreed!  Is the code already available?  What are your plans
>>         for it, and are you interested in collaboration with the rest
>>         of the LLVM community?
>>
>>         -Chris
>>
>>>         On Jan 11, 2020, at 11:58 AM, Finkel, Hal J. via llvm-dev
>>>         <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>>
>>>         wrote:
>>>
>>>         Hi, Prashanth,
>>>
>>>         That's great news! It sounds like you've made a lot of
>>>         progress, and I certainly hope that you can make your source
>>>         available under the LLVM license and that we can all work
>>>         together going forward.
>>>
>>>          -Hal
>>>
>>>         On 1/11/20 12:52 PM, Prashanth N R via llvm-dev wrote:
>>>>         Hi-
>>>>
>>>>         In August we made an announcement  of "FC: A new fortran
>>>>         front end"  [1]. At that time to get an end-to-end
>>>>         solution, we made FC to emit LLVM IR directly.  At present,
>>>>         we have upgraded FC to emit MLIR. Currently the language
>>>>         supported is close to Fortran-95. Apart from 400+ unit test
>>>>         cases, out framework passes two SPEC-2017 benchmarks
>>>>         successfully.  Currently we are cleaning up the code and
>>>>         plan to open source the same in a week or so.
>>>>
>>>>         Apart from the front end changes, we have defined a new
>>>>         high level dialect in MLIR for representing Fortran. We
>>>>         have defined a new Loop Nest Optimization framework along
>>>>         with one Loop Nest Optimization in it for the time being.
>>>>         Also we have supported 4 OpenMP constructs and way to
>>>>         express the same in MLIR framework.
>>>>
>>>>         Entire code is in the spirit of LLVM. If the community is
>>>>         interested, we would like to work with the community and
>>>>         move forward.
>>>>
>>>>         thanks,
>>>>         -Prashanth
>>>>
>>>>         PS: We did try to use F18 for a while and hit the issues
>>>>         raised in [2], [3].
>>>>
>>>>         1.
>>>>         http://lists.llvm.org/pipermail/llvm-dev/2019-August/134620.html
>>>>         2.
>>>>         http://lists.llvm.org/pipermail/llvm-dev/2020-January/138069.html
>>>>         3.
>>>>         http://lists.llvm.org/pipermail/flang-dev/attachments/20191202/6e7c1e51/attachment-0001.pdf
>>>>         OR
>>>>         http://lists.llvm.org/pipermail/flang-dev/2019-December/000089.html
>>>>
>>>>
>>>>         _______________________________________________
>>>>         LLVM Developers mailing list
>>>>         llvm-dev at lists.llvm.org  <mailto:llvm-dev at lists.llvm.org>
>>>>         https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>         -- 
>>>         Hal Finkel
>>>         Lead, Compiler Technology and Programming Languages
>>>         Leadership Computing Facility
>>>         Argonne National Laboratory
>>>         _______________________________________________
>>>         LLVM Developers mailing list
>>>         llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>>         https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>     _______________________________________________
>>     LLVM Developers mailing list
>>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>     https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200218/13b8f82f/attachment.html>


More information about the llvm-dev mailing list