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

Petr Penzin via llvm-dev llvm-dev at lists.llvm.org
Sun Feb 9 14:50:25 PST 2020


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200209/008f159d/attachment.html>


More information about the llvm-dev mailing list