#
0a10e889 |
| 27-Oct-2023 |
jeanPerier <jperier@nvidia.com> |
[flang] Implement legacy %VAL and %REF actual arguments (#70343)
Update evaluate::ActualArgument to propagate the %VAL and %REF markers
until lowering.
Semantic checks are added to %VAL to ensure
[flang] Implement legacy %VAL and %REF actual arguments (#70343)
Update evaluate::ActualArgument to propagate the %VAL and %REF markers
until lowering.
Semantic checks are added to %VAL to ensure the argument is a numerical
or logical scalar.
I did not push these markers into the characteristics because other
compilers do not complain about inconsistent usages (e.g. using %VAL in
a call on a procedure with an interface without VALUE dummies is not
flagged by any compilers I tested, and it is not an issue for lowering,
so I decided to stay simple here and minimize the footprint of these
legacy features).
Lowering retrieves these markers and does the right thing: pass %VAL in
registers and pass %REF by address without adding any extra arguments
for characters.
show more ...
|
#
635656f4 |
| 16-Dec-2022 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Expunge needless semantics::ProcInterface
The ProcInterface structure is used only by ProcEntityDetails; it represents what a program might have put in parentheses in a procedure-declaration
[flang] Expunge needless semantics::ProcInterface
The ProcInterface structure is used only by ProcEntityDetails; it represents what a program might have put in parentheses in a procedure-declaration-stmt, either the name of a procedure interface or a declaration-type-spec.
If a procedure entity has an implicit interface, the function result type (if any) can be kept in EntityDetails::type_, which already exists and is currently redundant for ProcEntityDetails symbols.
All that is really needed is a nullable Symbol pointer in ProcEntityDetails to point to the procedure's explicit interface, when it has one.
Also, catch the case where a procedure has an explicit interface and a program attempts to also give it a type.
Differential Revision: https://reviews.llvm.org/D140134
show more ...
|
#
9e855a6c |
| 02-Dec-2022 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Map symbols in expressions when copying interface symbols
Given a MODULE SUBROUTINE or MODULE FUNCTION interface followed later by a corresponding separate module subprogram definition in a
[flang] Map symbols in expressions when copying interface symbols
Given a MODULE SUBROUTINE or MODULE FUNCTION interface followed later by a corresponding separate module subprogram definition in a MODULE PROCEDURE, the copies of the interface's dummy argument and function result symbols that populate the initial scope of that MODULE PROCEDURE need to have any symbol references in their types or bounds adjusted to point to their new counterparts.
Differential Revision: https://reviews.llvm.org/D139200
show more ...
|
#
3f10091c |
| 03-Aug-2022 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Allow pure function references in expandable scalar
F18 disallows function references and coarray references from appearing in scalar expressions that are to be expanded into arrays to confo
[flang] Allow pure function references in expandable scalar
F18 disallows function references and coarray references from appearing in scalar expressions that are to be expanded into arrays to conform with other operands or actual arguments in an elemental expression. This is too strong, as pure procedures can be safely used.
Differential Revision: https://reviews.llvm.org/D131096
show more ...
|
#
6052025b |
| 30-Jun-2022 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Add IsElementalProcedure() predicate
Replace most tests of the explicit Attr::ELEMENTAL symbol flag with a new predicate IsElementalProcedure() that works correctly for alternate ENTRY point
[flang] Add IsElementalProcedure() predicate
Replace most tests of the explicit Attr::ELEMENTAL symbol flag with a new predicate IsElementalProcedure() that works correctly for alternate ENTRY points and does the right thing for procedure interfaces that reference elemental intrinsic functions like SIN() whose elemental nature does not propagate.
Differential Revision: https://reviews.llvm.org/D129022
show more ...
|
#
b70f507c |
| 16-Jun-2022 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Fix folding of LEN(f(...))
LEN(f(...)), where "f" is a non-intrinsic function, should not be folded to anything else unless the result is a known constant value. While there are conceivable
[flang] Fix folding of LEN(f(...))
LEN(f(...)), where "f" is a non-intrinsic function, should not be folded to anything else unless the result is a known constant value. While there are conceivable cases in which we could do better (e.g., an internal function whose length is a host-associated INTENT(IN) dummy argument), there are other cases that we're getting wrong.
Differential Revision: https://reviews.llvm.org/D128759
show more ...
|
#
cd03e96f |
| 23-Mar-2022 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Add & use a better visit() (take 2)
Adds flang/include/flang/Common/log2-visit.h, which defines a Fortran::common::visit() template function that is a drop-in replacement for std::visit().
[flang] Add & use a better visit() (take 2)
Adds flang/include/flang/Common/log2-visit.h, which defines a Fortran::common::visit() template function that is a drop-in replacement for std::visit(). Modifies most use sites in the front-end and runtime to use common::visit().
The C++ standard mandates that std::visit() have O(1) execution time, which forces implementations to build dispatch tables. This new common::visit() is O(log2 N) in the number of alternatives in a variant<>, but that N tends to be small and so this change produces a fairly significant improvement in compiler build memory requirements, a 5-10% improvement in compiler build time, and a small improvement in compiler execution time.
Building with -DFLANG_USE_STD_VISIT causes common::visit() to be an alias for std::visit().
Calls to common::visit() with multiple variant arguments are referred to std::visit(), pending further work.
This change is enabled only for GCC builds with GCC >= 9; an earlier attempt (D122441) ran into bugs in some versions of clang and was reverted rather than simply disabled; and it is not well tested with MSVC. In non-GCC and older GCC builds, common::visit() is simply an alias for std::visit().
show more ...
|
#
4ca111d4 |
| 28-Mar-2022 |
Andrzej Warzynski <andrzej.warzynski@arm.com> |
Revert "[flang] Add & use a better visit()"
This reverts commit 2ab9990c9eb79682a4d4b183dfbc7612d3e55328. It has caused multiple build failures: * https://lab.llvm.org/buildbot/#/builders/177/build
Revert "[flang] Add & use a better visit()"
This reverts commit 2ab9990c9eb79682a4d4b183dfbc7612d3e55328. It has caused multiple build failures: * https://lab.llvm.org/buildbot/#/builders/177/builds/4346 * https://lab.llvm.org/buildbot/#/builders/180/builds/3803 * https://lab.llvm.org/buildbot/#/builders/175/builds/10419 * https://lab.llvm.org/buildbot/#/builders/191/builds/4318 * https://lab.llvm.org/buildbot/#/builders/173/builds/4274 * https://lab.llvm.org/buildbot/#/builders/181/builds/4297
All these bots failed with a time-out: ``` command timed out: 1200 seconds without output running [b'ninja', b'-j', b'32'], attempting to kill ``` I'm guessing that that's due to template instantiations failing at some point (https://reviews.llvm.org/D122441 introduced a custom implementation of std::visit). Everything seems fine when either: * building on X86 with GCC or Clang (tested with GCC 9.3 and Clang 12) * building on AArch64 with GCC (tested with GCC 11)
show more ...
|
#
2ab9990c |
| 23-Mar-2022 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Add & use a better visit()
Adds flang/include/flang/Common/visit.h, which defines a Fortran::common::visit() template function that is a drop-in replacement for std::visit(). Modifies most
[flang] Add & use a better visit()
Adds flang/include/flang/Common/visit.h, which defines a Fortran::common::visit() template function that is a drop-in replacement for std::visit(). Modifies most use sites in the front-end and runtime to use common::visit().
The C++ standard mandates that std::visit() have O(1) execution time, which forces implementations to build dispatch tables. This new common::visit() is O(log2 N) in the number of alternatives in a variant<>, but that N tends to be small and so this change produces a fairly significant improvement in compiler build memory requirements, a 5-10% improvement in compiler build time, and a small improvement in compiler execution time.
Building with -DFLANG_USE_STD_VISIT causes common::visit() to be an alias for std::visit().
Calls to common::visit() with multiple variant arguments are referred to std::visit(), pending further work.
Differential Revision: https://reviews.llvm.org/D122441
show more ...
|
#
49142dd4 |
| 12-Oct-2021 |
peter klausler <pklausler@nvidia.com> |
[flang][NFC] Address warnings from Windows build
An LLVM Flang build bot for Windows recently failed with a bunch of warning messages. None were from recent changes to the Fortran compiler; I suspe
[flang][NFC] Address warnings from Windows build
An LLVM Flang build bot for Windows recently failed with a bunch of warning messages. None were from recent changes to the Fortran compiler; I suspect that a newer (or maybe older) version of MSVC was being used, or perhaps a different set of compiler options were temporarily applied to the build, since the buildbot status went back to green shortly thereafter.
Most of the warnings looked bogus to me, but some are legitimate concerns and we might as well clean them up. This patch does so.
Differential Revision: https://reviews.llvm.org/D111677
show more ...
|
#
962e503c |
| 30-Sep-2021 |
Jean Perier <jperier@nvidia.com> |
[flang] Take into account SubprogramDetails in GetInterfaceSymbol
When the ProcRef is Symbol is a SubprogramDetails, the interface is the SubprogramDetails. Do not return nullptr.
Differential Revi
[flang] Take into account SubprogramDetails in GetInterfaceSymbol
When the ProcRef is Symbol is a SubprogramDetails, the interface is the SubprogramDetails. Do not return nullptr.
Differential Revision: https://reviews.llvm.org/D110853
show more ...
|
#
2de5ea3b |
| 21-Jan-2021 |
peter klausler <pklausler@nvidia.com> |
[flang] Fix bogus error message with binding
ProcedureDesignator::GetInterfaceSymbol() needs to return the procedure bound to a bindings.
Differential Revision: https://reviews.llvm.org/D95178
|
#
ae0d1d2e |
| 04-Jan-2021 |
Peter Steinfeld <psteinfeld@nvidia.com> |
[flang] Fix bogus message on internal subprogram with alternate return
Internal subprograms have explicit interfaces. If an internal subprogram has an alternate return, we check its explicit interf
[flang] Fix bogus message on internal subprogram with alternate return
Internal subprograms have explicit interfaces. If an internal subprogram has an alternate return, we check its explicit interface. But we were not putting the label values of alternate returns into the actual argument.
I fixed this by changing the definition of actual arguments to be able to contain a common::Label and putting the label for an alternate return into the actual argument.
I also verified that we were already doing all of the semantic checking required for alternate returns and removed a "TODO" for this.
I also added the test altreturn06.f90.
Differential Revision: https://reviews.llvm.org/D94017
show more ...
|
#
8a8bb078 |
| 09-Jul-2020 |
peter klausler <pklausler@nvidia.com> |
[flang] Fix frontend build with -DBUILD_SHARED_LIBS=On
Fix fronted shared library builds by eliminating dependences of the parser on other component libraries, moving some code around that wasn't in
[flang] Fix frontend build with -DBUILD_SHARED_LIBS=On
Fix fronted shared library builds by eliminating dependences of the parser on other component libraries, moving some code around that wasn't in the right library, and making some dependences explicit in the CMakeLists.txt files. The lowering library does not yet build as a shared library due to some undefined names.
Reviewed By: tskeith
Differential Revision: https://reviews.llvm.org/D83515
show more ...
|
#
4171f80d |
| 19-Jun-2020 |
peter klausler <pklausler@nvidia.com> |
[flang] DATA stmt processing (part 3/4): Remaining prep work
Rolls up small changes across the frontend to prepare for the large forthcoming patch (part 4/4) that completes DATA statement processing
[flang] DATA stmt processing (part 3/4): Remaining prep work
Rolls up small changes across the frontend to prepare for the large forthcoming patch (part 4/4) that completes DATA statement processing via conversion to initializers.
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D82137
show more ...
|
#
1f879005 |
| 29-Mar-2020 |
Tim Keith <tkeith@nvidia.com> |
[flang] Reformat with latest clang-format and .clang-format
Original-commit: flang-compiler/f18@9fe84f45d7fd685051004678d6b5775dcc4c6f8f Reviewed-on: https://github.com/flang-compiler/f18/pull/1094
|
#
e03b20e6 |
| 10-Mar-2020 |
peter klausler <pklausler@nvidia.com> |
[flang] Changes to get a clean build of f18 with latest clang
Prep for review
Original-commit: flang-compiler/f18@111f49061e07604670614250197a1064959fd981 Reviewed-on: https://github.com/flang-comp
[flang] Changes to get a clean build of f18 with latest clang
Prep for review
Original-commit: flang-compiler/f18@111f49061e07604670614250197a1064959fd981 Reviewed-on: https://github.com/flang-compiler/f18/pull/1059
show more ...
|
#
64ab3302 |
| 25-Feb-2020 |
CarolineConcatto <51754594+CarolineConcatto@users.noreply.github.com> |
[flang] [LLVMify F18] Compiler module folders should have capitalised names (flang-compiler/f18#980)
This patch renames the modules in f18 to use a capital letter in the
module name
Signed-off-b
[flang] [LLVMify F18] Compiler module folders should have capitalised names (flang-compiler/f18#980)
This patch renames the modules in f18 to use a capital letter in the
module name
Signed-off-by: Caroline Concatto <caroline.concatto@arm.com>
Original-commit: flang-compiler/f18@d2eb7a1c443d1539ef12b6f027074a0eb15b1ea0 Reviewed-on: https://github.com/flang-compiler/f18/pull/980
show more ...
|