<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
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.<br>
<br>
In somewhat chronological order:<br>
<br>
*Flang (old)*<br>
<a class="moz-txt-link-freetext" href="https://github.com/llvm-flang/flang">https://github.com/llvm-flang/flang</a><br>
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)<br>
<br>
*Flang (new)*<br>
<a class="moz-txt-link-freetext" href="https://github.com/flang-compiler/flang">https://github.com/flang-compiler/flang</a><br>
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.<br>
<br>
[1]:
<a class="moz-txt-link-freetext" href="https://www.llnl.gov/news/nnsa-national-labs-team-nvidia-develop-open-source-fortran-compiler-technology">https://www.llnl.gov/news/nnsa-national-labs-team-nvidia-develop-open-source-fortran-compiler-technology</a><br>
[2]:
<a class="moz-txt-link-freetext" href="https://github.com/flang-compiler/flang/tree/master/tools/flang1/utils/prstab">https://github.com/flang-compiler/flang/tree/master/tools/flang1/utils/prstab</a><br>
<br>
*f18*<br>
<a class="moz-txt-link-freetext" href="https://github.com/flang-compiler/f18">https://github.com/flang-compiler/f18</a><br>
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.<br>
<br>
[3]:
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/pipermail/flang-dev/2019-December/000089.html">http://lists.llvm.org/pipermail/flang-dev/2019-December/000089.html</a><br>
[4]:
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/pipermail/flang-dev/attachments/20191202/6e7c1e51/attachment-0001.pdf">http://lists.llvm.org/pipermail/flang-dev/attachments/20191202/6e7c1e51/attachment-0001.pdf</a><br>
[5]:
<a class="moz-txt-link-freetext" href="https://github.com/flang-compiler/f18/blob/master/lib/parser/stmt-parser.h#L24">https://github.com/flang-compiler/f18/blob/master/lib/parser/stmt-parser.h#L24</a><br>
[6]:
<a class="moz-txt-link-freetext" href="https://github.com/flang-compiler/f18/issues/431#issuecomment-487664759">https://github.com/flang-compiler/f18/issues/431#issuecomment-487664759</a><br>
<br>
*Fort*<br>
<a class="moz-txt-link-freetext" href="https://github.com/llvm-fortran/fort/">https://github.com/llvm-fortran/fort/</a><br>
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. <br>
<br>
*FC*<br>
<a class="moz-txt-link-freetext" href="https://github.com/compiler-tree-technologies/fc">https://github.com/compiler-tree-technologies/fc</a><br>
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.<br>
<br>
<br>
<div class="moz-cite-prefix">On 1/13/20 9:02 AM, James Y Knight via
llvm-dev wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAA2zVHqSOy5=j+802coGBRuhtXNqb0S2JKKhPEu5Db+-4=hx7A@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">Neat, another fortran compiler option.
<div><br>
</div>
<div>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?
<div>
<div><br>
</div>
<div>"Flang". The original of the name, I think?
Abandoned.<br>
<a href="https://github.com/llvm-flang/flang"
target="_blank" moz-do-not-send="true">https://github.com/llvm-flang/flang</a><br>
"Fort" -- fork of the above flang, renamed. Seems
active.<br>
<a href="https://github.com/llvm-fortran/fort/"
target="_blank" moz-do-not-send="true">https://github.com/llvm-fortran/fort/</a><br>
<br>
</div>
<div>"Flag". Different from the other "flang". Active,
but deprecated in favor of f18.</div>
<div><a href="https://github.com/flang-compiler/flang"
target="_blank" moz-do-not-send="true">https://github.com/flang-compiler/flang</a><br>
</div>
<div>"f18". Rewrite-from-scratch (?) of adjacent
"flang". Active, but not fully-functional yet (I
think?).</div>
<div><a href="https://github.com/flang-compiler/f18"
target="_blank" moz-do-not-send="true">https://github.com/flang-compiler/f18</a><br>
</div>
<div><br>
</div>
<div>
<div>"FC". Newly-developed, independent of the other
compilers. Active. (But this source-code dates from
the previous announcement, not yet updated with
latest developments):<br>
<a
href="https://github.com/compiler-tree-technologies/fc"
target="_blank" moz-do-not-send="true">https://github.com/compiler-tree-technologies/fc</a><br>
</div>
</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon, Jan 13, 2020 at 2:46
AM Prashanth N R via llvm-dev <<a
href="mailto:llvm-dev@lists.llvm.org"
moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Hi Chris-
<div>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. </div>
<div><br>
</div>
<div>thanks,</div>
<div>-Prashanth</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon, Jan 13, 2020 at
11:17 AM Chris Lattner <<a
href="mailto:clattner@nondot.org" target="_blank"
moz-do-not-send="true">clattner@nondot.org</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>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?
<div><br>
</div>
<div>-Chris<br>
<div><br>
<blockquote type="cite">
<div>On Jan 11, 2020, at 11:58 AM, Finkel, Hal
J. via llvm-dev <<a
href="mailto:llvm-dev@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
wrote:</div>
<br>
<div>
<div>
<p>Hi, Prashanth,</p>
<p>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.</p>
<p> -Hal<br>
</p>
<div>On 1/11/20 12:52 PM, Prashanth N R via
llvm-dev wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi-
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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. </div>
<div><br>
</div>
<div>Entire code is in the spirit of
LLVM. If the community is interested,
we would like to work with the
community and move forward. </div>
<div><br>
</div>
<div>thanks,</div>
<div>-Prashanth</div>
<div><br>
</div>
<div>PS: We did try to use F18 for a
while and hit the issues raised in
[2], [3].</div>
<div><br>
</div>
<div>1. <a
href="http://lists.llvm.org/pipermail/llvm-dev/2019-August/134620.html"
target="_blank"
moz-do-not-send="true">http://lists.llvm.org/pipermail/llvm-dev/2019-August/134620.html</a></div>
<div>2. <a
href="http://lists.llvm.org/pipermail/llvm-dev/2020-January/138069.html"
target="_blank"
moz-do-not-send="true">http://lists.llvm.org/pipermail/llvm-dev/2020-January/138069.html</a></div>
<div>3. <a
href="http://lists.llvm.org/pipermail/flang-dev/attachments/20191202/6e7c1e51/attachment-0001.pdf"
target="_blank"
moz-do-not-send="true">http://lists.llvm.org/pipermail/flang-dev/attachments/20191202/6e7c1e51/attachment-0001.pdf</a></div>
<div>OR <a
href="http://lists.llvm.org/pipermail/flang-dev/2019-December/000089.html"
target="_blank"
moz-do-not-send="true">http://lists.llvm.org/pipermail/flang-dev/2019-December/000089.html</a></div>
<div><br>
</div>
</div>
<br>
<fieldset></fieldset>
<pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
<pre cols="72">--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
</div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
<a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
target="_blank" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
</div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank"
moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
<a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
rel="noreferrer" target="_blank" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
</body>
</html>