|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
53804e42 |
| 07-Jul-2022 |
Valentin Clement <[email protected]> |
[flang][NFC] Make LEN parameters homogenous
This patch is part of the upstreaming effort from fir-dev branch. This is the last patch for the upstreaming effort.
Reviewed By: jeanPerier
Differentia
[flang][NFC] Make LEN parameters homogenous
This patch is part of the upstreaming effort from fir-dev branch. This is the last patch for the upstreaming effort.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D129187
Co-authored-by: Eric Schweitz <[email protected]>
show more ...
|
| #
39377d52 |
| 01-Jul-2022 |
Valentin Clement <[email protected]> |
[flang] Fix APFloat conversion cases
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D128935
Co-author
[flang] Fix APFloat conversion cases
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D128935
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Peter Steinfeld <[email protected]>
show more ...
|
| #
411f839a |
| 30-Jun-2022 |
Valentin Clement <[email protected]> |
[flang] Fix for array upper bounds with *
Even though the array is declared with '*' upper bounds, it has an initial value that has a statically known shape. Use the shape from the type of the initi
[flang] Fix for array upper bounds with *
Even though the array is declared with '*' upper bounds, it has an initial value that has a statically known shape. Use the shape from the type of the initializer when the declared size is '*'.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D128889
Co-authored-by: Eric Schweitz <[email protected]>
show more ...
|
| #
10b23ae8 |
| 22-Jun-2022 |
Valentin Clement <[email protected]> |
[flang] Handle BINC(C) variables and add TODO for corner cases
- BIND(C) was ignored in lowering for objects (it can be used on module and common blocks): use the bind name as the fir.global name.
[flang] Handle BINC(C) variables and add TODO for corner cases
- BIND(C) was ignored in lowering for objects (it can be used on module and common blocks): use the bind name as the fir.global name.
- When an procedure is declared BIND(C) indirectly via an interface, it should have a BIND(C) name. This was not the case because GetBindName()/bindingName() return nothing in this case: detect this case in mangler.cpp and use the symbol name.
Add TODOs for corner cases:
- BIND(C) module variables may be initialized on the C side. This does not fit well with the current linkage strategy. Add a TODO until this is revisited.
- BIND(C) internal procedures should not have a binding label (see Fortran 2018 section 18.10.2 point 2), yet we currently lower them as if they were BIND(C) external procedure. I think this and the indirect interface case should really be handled by symbol.GetBindName instead of adding more logic in lowering to deal with this case: add a TODO.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D128340
Co-authored-by: Jean Perier <[email protected]>
show more ...
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5 |
|
| #
5b66cc10 |
| 10-Jun-2022 |
Valentin Clement <[email protected]> |
[flang][NFC] Move Todo.h from Lower to Optimizer
Remove a backwards dependence from Optimizer -> Lower by moving Todo.h to the optimizer and out of lowering.
This patch is part of the upstreaming e
[flang][NFC] Move Todo.h from Lower to Optimizer
Remove a backwards dependence from Optimizer -> Lower by moving Todo.h to the optimizer and out of lowering.
This patch is part of the upstreaming effort from fir-dev branch.
Co-authored-by: Eric Schweitz <[email protected]>
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D127292
show more ...
|
| #
d91735b5 |
| 08-Jun-2022 |
jeanPerier <[email protected]> |
[flang][NFC] Move genMaxWithZero into fir:::factory
Move tthe function to allow its usage in the Optimizer/Builder functions.
This patch is part of the upstreaming effort from fir-dev branch.
Revi
[flang][NFC] Move genMaxWithZero into fir:::factory
Move tthe function to allow its usage in the Optimizer/Builder functions.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D127295
show more ...
|
|
Revision tags: llvmorg-14.0.4 |
|
| #
1e1f60c6 |
| 24-May-2022 |
V Donaldson <[email protected]> |
[flang] Alternate entry points with unused arguments
A dummy argument in an entry point of a subprogram with multiple entry points need not be defined in other entry points. It is only legal to refe
[flang] Alternate entry points with unused arguments
A dummy argument in an entry point of a subprogram with multiple entry points need not be defined in other entry points. It is only legal to reference such an argument when calling an entry point that does have a definition. An entry point without such a definition needs a local "substitute" definition sufficient to generate code. It is nonconformant to reference such a definition at runtime. Most such definitions and associated code will be deleted as dead code at compile time. However, that is not always possible, as in the following code. This code is conformant if all calls to entry point ss set m=3, and all calls to entry point ee set n=3.
subroutine ss(a, b, m, d, k) ! no x, y, n integer :: a(m), b(a(m)), m, d(k) integer :: x(n), y(x(n)), n integer :: k 1 print*, m, k print*, a print*, b print*, d if (m == 3) return entry ee(x, y, n, d, k) ! no a, b, m print*, n, k print*, x print*, y print*, d if (n /= 3) goto 1 end
integer :: xx(3), yy(5), zz(3) xx = 5 yy = 7 zz = 9 call ss(xx, yy, 3, zz, 3) call ss(xx, yy, 3, zz, 3) end
Lowering currently generates fir::UndefOp's for all unused arguments. This is usually ok, but cases such as the one here incorrectly access unused UndefOp arguments for m and n from an entry point that doesn't have a proper definition.
The problem is addressed by creating a more complete definition of an unused argument in most cases. This is implemented in large part by moving the definition of an unused argument from mapDummiesAndResults to mapSymbolAttributes. The code in mapSymbolAttributes then chooses one of three code generation options, depending on information available there.
This patch deals with dummy procedures in alternate entries, and adds a TODO for procedure pointers (the PFTBuilder is modified to analyze procedure pointer symbol so that they are not silently ignored, and instead hits proper TODOs).
BoxAnalyzer is also changed because assumed-sized arrays were wrongfully categorized as constant shape arrays. This had no impact, except when there were unused entry points.
Co-authored-by: jeanPerier <[email protected]>
Differential Revision: https://reviews.llvm.org/D125867
show more ...
|
| #
5a793640 |
| 29-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Fix build bot problem
A recent change is eliciting a valid warning from the out-of-tree flang build bot; fix by using a reference in a range-based for().
Differential Revision: https://revi
[flang] Fix build bot problem
A recent change is eliciting a valid warning from the out-of-tree flang build bot; fix by using a reference in a range-based for().
Differential Revision: https://reviews.llvm.org/D124682
show more ...
|
| #
2c8cb9ac |
| 29-Apr-2022 |
Jean Perier <[email protected]> |
[flang] Handle common block with different sizes in same file
Semantics is not preventing a named common block to appear with different size in a same file (named common block should always have the
[flang] Handle common block with different sizes in same file
Semantics is not preventing a named common block to appear with different size in a same file (named common block should always have the same storage size (see Fortran 2018 8.10.2.5), but it is a common extension to accept different sizes).
Lowering was not coping with this well, since it just use the first common block appearance, starting with BLOCK DATAs to define common blocks (this also was an issue with the blank common block, which can legally appear with different size in different scoping units).
Semantics is also not preventing named common from being initialized outside of a BLOCK DATA, and lowering was dealing badly with this, since it only gave an initial value to common blocks Globals if the first common block appearance, starting with BLOCK DATAs had an initial value.
Semantics is also allowing blank common to be initialized, while lowering was assuming this would never happen, and was never creating an initial value for it.
Lastly, semantics was not complaining if a COMMON block was initialized in several scoping unit in a same file, while lowering can only generate one of these initial value.
To fix this, add a structure to keep track of COMMON block properties (biggest size, and initial value if any) at the Program level. Once the size of a common block appearance is know, the common block appearance is checked against this information. It allows semantics to emit an error in case of multiple initialization in different scopes of a same common block, and to warn in case named common blocks appears with different sizes. Lastly, this allows lowering to use the Program level info about common blocks to emit the right GlobalOp for a Common Block, regardless of the COMMON Block appearances order: It emits a GlobalOp with the biggest size, whose lowest bytes are initialized with the initial value if any is given in a scope where the common block appears.
Lowering is updated to go emit the common blocks before anything else so that the related GlobalOps are available when lowering the scopes where common block appear. It is also updated to not assume that blank common are never initialized.
Differential Revision: https://reviews.llvm.org/D124622
show more ...
|
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1 |
|
| #
5bc9ee1b |
| 25-Mar-2022 |
Jean Perier <[email protected]> |
[flang][lowering] Handle zero extent case in LBOUND
Follow up of https://reviews.llvm.org/D121488. Ensure lower bounds are `1` when the related dimension extent is zero. Note that lower bounds from
[flang][lowering] Handle zero extent case in LBOUND
Follow up of https://reviews.llvm.org/D121488. Ensure lower bounds are `1` when the related dimension extent is zero. Note that lower bounds from descriptors are now guaranteed to fulfill this property after the runtime/codegen patches.
Also fixes explicit shape array extent lowering when instantiating variables to deal with negative extent cases (issue found while testing LBOUND edge case). This notably caused allocation crashes when dealing with automatic arrays with reversed bounds or negative size specification expression. The standard specifies that the extent of such arrays is zero. This change has some ripple effect in the current lit tests.
Add move two helpers as part of this change: - Add a helper to tell if a fir::ExtendedValue describes an assumed size array (last dimension extent is unknown to the compiler, both at compile time and runtime).
- Move and share getIntIfConstant from Character.cpp so that it can be used elsewhere (NFC).
Differential Revision: https://reviews.llvm.org/D122467
show more ...
|
| #
6ce82eae |
| 24-Mar-2022 |
Peixin-Qiao <[email protected]> |
[NFC][flang] Remove unused code in lowerExplicitLowerBounds
There is no need to lower the implicit lower bounds for assumed-shape array in lowerExplicitLowerBounds. Remove the unused code.
Reviewed
[NFC][flang] Remove unused code in lowerExplicitLowerBounds
There is no need to lower the implicit lower bounds for assumed-shape array in lowerExplicitLowerBounds. Remove the unused code.
Reviewed By: Jean Perier
Differential Revision: https://reviews.llvm.org/D122280
show more ...
|
| #
fe252f8e |
| 22-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Lower boxed procedure
In FIR, we want to wrap function pointers in a special box known as a boxproc value. Fortran has a limited form of dynamic scoping [https://tinyurl.com/2p8v2hw7] betwee
[flang] Lower boxed procedure
In FIR, we want to wrap function pointers in a special box known as a boxproc value. Fortran has a limited form of dynamic scoping [https://tinyurl.com/2p8v2hw7] between "host procedures" and "internal procedures". There are a number of implementations possible.
Boxproc typed values abstract away the implementation details of when a function pointer can be passed directly (as a raw address) and when a function pointer has to account for the presence of a dynamic scope. When lowering Fortran syntax to FIR, all function pointers are emboxed as boxproc values.
When creating LLVM IR, we must strip away the abstraction and produce low-level LLVM "assembly" code. This patch implements that transformation as converting the boxproc values to either raw function pointers or executable trampolines on the stack as needed. The trampoline then captures the dynamic scope context within an executable thunk that can be passed instead of the function's raw address.
Some extra handling is required for Fortran functions that return a character value to deal with LEN values here.
Some of the code in Bridge.cpp and ConvertExpr.cpp and be re-arranged to faciliate the upstreaming effort.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: jeanPerier, PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D122223
Co-authored-by: mleair <[email protected]> Co-authored-by: Jean Perier <[email protected]> Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: V Donaldson <[email protected]> Co-authored-by: Kiran Chandramohan <[email protected]>
show more ...
|
| #
a1425019 |
| 15-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Lower more pointer assignments/disassociation cases
This patch lowers more cases of pointer assignments and disassociations.
This patch is part of the upstreaming effort from fir-dev branch
[flang] Lower more pointer assignments/disassociation cases
This patch lowers more cases of pointer assignments and disassociations.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld, schweitz
Differential Revision: https://reviews.llvm.org/D121697
Co-authored-by: V Donaldson <[email protected]> Co-authored-by: Jean Perier <[email protected]> Co-authored-by: mleair <[email protected]> Co-authored-by: Eric Schweitz <[email protected]>
show more ...
|
| #
5d25267d |
| 14-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Lower common block
This patch lowers common block variable to FIR.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld
Differential Revision: http
[flang] Lower common block
This patch lowers common block variable to FIR.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D121610
Co-authored-by: V Donaldson <[email protected]> Co-authored-by: Jean Perier <[email protected]>
show more ...
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4 |
|
| #
80f8c6dd |
| 11-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Lower of elemental calls in array expression
This patch adds tests and missing lowering code to lower elemental function/subroutine calls in array expression
This patch is part of the upstr
[flang] Lower of elemental calls in array expression
This patch adds tests and missing lowering code to lower elemental function/subroutine calls in array expression
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D121474
Co-authored-by: Jean Perier <[email protected]> Co-authored-by: Eric Schweitz <[email protected]>
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc3 |
|
| #
72276bda |
| 10-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Lower pointer component in derived type
This patch lowers pointer component part of derived types to FIR.
This patch is part of the upstreaming effort from fir-dev branch.
Depends on D1213
[flang] Lower pointer component in derived type
This patch lowers pointer component part of derived types to FIR.
This patch is part of the upstreaming effort from fir-dev branch.
Depends on D121383
Reviewed By: PeteSteinfeld, schweitz
Differential Revision: https://reviews.llvm.org/D121384
Co-authored-by: V Donaldson <[email protected]> Co-authored-by: Jean Perier <[email protected]> Co-authored-by: Eric Schweitz <[email protected]>
show more ...
|
| #
764f95a8 |
| 07-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Add lowering for host association
This patches adds the code to handle host association for inner subroutines and functions.
This patch is part of the upstreaming effort from fir-dev branch
[flang] Add lowering for host association
This patches adds the code to handle host association for inner subroutines and functions.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D121134
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]> Co-authored-by: V Donaldson <[email protected]>
show more ...
|
| #
859d4a18 |
| 02-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Lower more cases of assignments on allocatable variables
This patch enables the lowering of various allocatable assignements for character type and numeric types.
This patch is part of the
[flang] Lower more cases of assignments on allocatable variables
This patch enables the lowering of various allocatable assignements for character type and numeric types.
This patch is part of the upstreaming effort from fir-dev branch.
Depends on D120819
Reviewed By: PeteSteinfeld, schweitz
Differential Revision: https://reviews.llvm.org/D120820
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]>
show more ...
|
| #
17d71347 |
| 02-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Handle module in lowering pass
This patch enables the lowering of basic modules and functions/subroutines in modules.
This patch is part of the upstreaming effort from fir-dev branch.
Revi
[flang] Handle module in lowering pass
This patch enables the lowering of basic modules and functions/subroutines in modules.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D120819
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]>
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc2 |
|
| #
96d9df41 |
| 01-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Add test for allocatable on the callee side
This patch adds couple of tests for allocatable on the callee side. Lowering for some missing underlying features is added as well.
This patch is
[flang] Add test for allocatable on the callee side
This patch adds couple of tests for allocatable on the callee side. Lowering for some missing underlying features is added as well.
This patch is part of the upstreaming effort from fir-dev branch.
Depends on D120744
Reviewed By: PeteSteinfeld, schweitz
Differential Revision: https://reviews.llvm.org/D120746
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]> Co-authored-by: V Donaldson <[email protected]>
show more ...
|
| #
d88dfd2b |
| 01-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Handle dynamic array lowering
This patch enables dynamic array lowering and use the funcationality inside some IO tests.
This patch is part of the upstreaming effort from fir-dev branch.
D
[flang] Handle dynamic array lowering
This patch enables dynamic array lowering and use the funcationality inside some IO tests.
This patch is part of the upstreaming effort from fir-dev branch.
Depends on D120743
Reviewed By: PeteSteinfeld, schweitz
Differential Revision: https://reviews.llvm.org/D120744
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]> Co-authored-by: V Donaldson <[email protected]>
show more ...
|
| #
8c22cb84 |
| 01-Mar-2022 |
Valentin Clement <[email protected]> |
[flang] Lower basic IO statement
This patch enables the lowering of the print, read and write IO statements.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteStei
[flang] Lower basic IO statement
This patch enables the lowering of the print, read and write IO statements.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld, schweitz
Differential Revision: https://reviews.llvm.org/D120743
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]> Co-authored-by: V Donaldson <[email protected]> Co-authored-by: Kiran Chandramohan <[email protected]>
show more ...
|
| #
37e84d9b |
| 25-Feb-2022 |
Valentin Clement <[email protected]> |
[flang] Lower simple character return
Handles function with character return.
Character scalar results are passed as arguments in lowering so that an assumed length character function callee can ac
[flang] Lower simple character return
Handles function with character return.
Character scalar results are passed as arguments in lowering so that an assumed length character function callee can access the result length.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld, schweitz
Differential Revision: https://reviews.llvm.org/D120558
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]> Co-authored-by: V Donaldson <[email protected]>
show more ...
|
| #
f9704f0c |
| 24-Feb-2022 |
Valentin Clement <[email protected]> |
[flang] Simple array assignment lowering
This patch handles lowering of simple array assignment.
``` a(:) = 10 ```
or
``` a(1) = 1 ```
This patch is part of the upstreaming effort from fir-dev b
[flang] Simple array assignment lowering
This patch handles lowering of simple array assignment.
``` a(:) = 10 ```
or
``` a(1) = 1 ```
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: PeteSteinfeld, schweitz
Differential Revision: https://reviews.llvm.org/D120501
Co-authored-by: Jean Perier <[email protected]> Co-authored-by: V Donaldson <[email protected]> Co-authored-by: Eric Schweitz <[email protected]>
show more ...
|
| #
2a59ead1 |
| 24-Feb-2022 |
Valentin Clement <[email protected]> |
[flang] Lower allocatable assignment for scalar
Add lowering for simple assignement on allocatable scalars.
This patch is part of the upstreaming effort from fir-dev branch.
Depends on D120483
Re
[flang] Lower allocatable assignment for scalar
Add lowering for simple assignement on allocatable scalars.
This patch is part of the upstreaming effort from fir-dev branch.
Depends on D120483
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D120488
Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]>
show more ...
|