Revision tags: llvmorg-21-init, llvmorg-19.1.7 |
|
#
1fcb6a97 |
| 19-Dec-2024 |
Leandro Lupori <leandro.lupori@linaro.org> |
[flang][OpenMP] Initialize allocatable members of derived types (#120295)
Allocatable members of privatized derived types must be allocated,
with the same bounds as the original object, whenever th
[flang][OpenMP] Initialize allocatable members of derived types (#120295)
Allocatable members of privatized derived types must be allocated,
with the same bounds as the original object, whenever that member
is also allocated in it, but Flang was not performing such
initialization.
The `Initialize` runtime function can't perform this task unless
its signature is changed to receive an additional parameter, the
original object, that is needed to find out which allocatable
members, with their bounds, must also be allocated in the clone.
As `Initialize` is used not only for privatization, sometimes this
other object won't even exist, so this new parameter would need
to be optional.
Because of this, it seemed better to add a new runtime function:
`InitializeClone`.
To avoid unnecessary calls, lowering inserts a call to it only for
privatized items that are derived types with allocatable members.
Fixes https://github.com/llvm/llvm-project/issues/114888
Fixes https://github.com/llvm/llvm-project/issues/114889
show more ...
|
Revision tags: 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 |
|
#
8ebf4084 |
| 15-Mar-2024 |
Slava Zakharin <szakharin@nvidia.com> |
[NFC][flang] Reorder const and RT_API_ATTRS.
Clean-up to keep the type qualifier next to the type.
Reviewers: klausler
Reviewed By: klausler
Pull Request: https://github.com/llvm/llvm-project/pul
[NFC][flang] Reorder const and RT_API_ATTRS.
Clean-up to keep the type qualifier next to the type.
Reviewers: klausler
Reviewed By: klausler
Pull Request: https://github.com/llvm/llvm-project/pull/85180
show more ...
|
Revision tags: 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 |
|
#
76facde3 |
| 28-Dec-2023 |
Slava Zakharin <szakharin@nvidia.com> |
[flang][runtime] Enable more APIs in the offload build. (#76486)
|
#
b4b23ff7 |
| 20-Dec-2023 |
Slava Zakharin <szakharin@nvidia.com> |
[flang][runtime] Enable more APIs in the offload build. (#75996)
This patch enables more numeric (mod, sum, matmul, etc.) APIs,
and some others.
I added new macros to disable warnings about usin
[flang][runtime] Enable more APIs in the offload build. (#75996)
This patch enables more numeric (mod, sum, matmul, etc.) APIs,
and some others.
I added new macros to disable warnings about using C++ STD methods
like operators of std::complex, which do not have __device__ attribute.
This may probably result in unresolved references, if the header files
implementation relies on libstdc++. I will need to follow up on this.
show more ...
|
Revision tags: llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4 |
|
#
dffd93b3 |
| 17-Oct-2023 |
Peter Klausler <35819229+klausler@users.noreply.github.com> |
[flang][runtime] Fix SAME_TYPE_AS()/EXTENDS_TYPE_OF() for CLASS(*) (#67727)
Ensure that the f18Addendum flag is preserved in AllocatableApplyMold(),
that raw().type is reinitialized in AllocatableD
[flang][runtime] Fix SAME_TYPE_AS()/EXTENDS_TYPE_OF() for CLASS(*) (#67727)
Ensure that the f18Addendum flag is preserved in AllocatableApplyMold(),
that raw().type is reinitialized in AllocatableDeallocatePolymorphic(),
and that the implementations of SameTypeAs() and ExtendsTypeOf() handle
unallocated unlimited polymorphic arguments correctly.
show more ...
|
Revision tags: llvmorg-17.0.3, llvmorg-17.0.2 |
|
#
ab1db262 |
| 22-Sep-2023 |
Slava Zakharin <szakharin@nvidia.com> |
[flang][hlfir] Fixed some finalization/deallocation issues. (#67047)
This set of commits resolves some of the issues with elemental calls producing
results that may require finalization, and also s
[flang][hlfir] Fixed some finalization/deallocation issues. (#67047)
This set of commits resolves some of the issues with elemental calls producing
results that may require finalization, and also some memory leak issues due to
the missing deallocation of allocatable components of the temporary buffers
created by the bufferization pass.
- [flang][runtime] Expose Finalize API for derived types.
- [flang][hlfir] Add 'finalize' attribute for DestroyOp.
- [flang][hlfir] Postpone result finalization for elemental calls.
The results of elemental calls generated inside hlfir.elemental must not
be finalized/destructed before they are copied into the resulting
array. The finalization must be done on the array as a whole
(e.g. there might be different scalar and array finalization routines).
The finalization work is left to the hlfir.destroy corresponding
to this hlfir.elemental.
- [flang][hlfir] Tighten requirements on hlfir.end_associate operand.
If component deallocation might be required for the operand of
hlfir.end_associate, we have to be able to get the variable
shape/params to create a descriptor for calling the runtime.
This commit adds verification that we can do so.
- [flang][hlfir] Lower argument clean-ups using valid hlfir.end_associate.
The operand must be a Fortran entity, when allocatable component
deallocation may be required.
- [flang][hlfir] Properly clean-up temporary buffers in bufferization pass.
This commit combines changes for proper finalization and component
deallocation of the temporary buffers. The finalization part
relates to hlfir.destroy operations with 'finalize' attribute.
The component deallocation might be invoked for both hlfir.destroy
and hlfir.end_associate, if the operand is of a derived type
with allocatable component(s).
The changes are mostly in one function, so I decided not to split them.
- [flang][hlfir] Disable optimizations for hlfir.elemental requiring finalization.
If hlfir.elemental is coupled with hlfir.destroy with 'finalize' attribute,
the temporary array result of hlfir.elemental needs to be created
for the purpose of finalization. We cannot do certain optimizations
on such hlfir.elemental operations.
I was not able to come up with a test for the OptimizedBufferization pass,
but I put the check there as well.
show more ...
|
Revision tags: llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2 |
|
#
b21c24c3 |
| 29-Jul-2023 |
Peter Klausler <pklausler@nvidia.com> |
[flang][runtime] Recognize and handle FINAL subroutines with contiguous dummy arrays when data are not so
When a FINAL subroutine is being invoked for a discontiguous array, which can happen for INT
[flang][runtime] Recognize and handle FINAL subroutines with contiguous dummy arrays when data are not so
When a FINAL subroutine is being invoked for a discontiguous array, which can happen for INTENT(OUT) dummy arguments and for some left-hand side variables in intrinsic assignment statements, it may be the case that the subroutine being called was defined with a dummy argument that requires contiguous data.
Extend the derived type descriptions used by the runtime to signify when a special procedure binding requires contiguity; set the flags accordingly; check them in the runtime support library, and, when necessary, use a temporary shallow copy of the finalized array data in the call to the final subroutine.
Differential Revision: https://reviews.llvm.org/D156760
show more ...
|
Revision tags: llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5 |
|
#
da60b9e7 |
| 23-May-2023 |
Slava Zakharin <szakharin@nvidia.com> |
[flang] Fixed managing copy-in/copy-out temps.
There are several observations regarding the copy-in/copy-out: * Actual argument associated with INTENT(OUT) dummy argument that requires finaliz
[flang] Fixed managing copy-in/copy-out temps.
There are several observations regarding the copy-in/copy-out: * Actual argument associated with INTENT(OUT) dummy argument that requires finalization (7.5.6.3 p. 7) may be read by the finalization function, so a copy-in is required. * A temporary created for the copy-in/copy-out must be destroyed without finalization after the call (or after the corresponding copy-out), otherwise, memory leaks may occur. * The copy-out assignment must not perform finalization for the LHS. * The copy-out assignment from the temporary to the actual argument may or may not need to initialize the LHS.
This change-set introduces new runtime methods: CopyOutAssign and DestroyWithoutFinalization. They are called by the compiler generated code to match the behavior described above.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D151135
show more ...
|
Revision tags: 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 |
|
#
9470169f |
| 10-Mar-2023 |
Valentin Clement <clementval@gmail.com> |
[flang] Handle unlimited polymorphic with intrinsic dynamic type in extends_type_of
Unlimited polymorphic entities can have an intrinsic dynamic type. Update the code of extends_type_of to compare t
[flang] Handle unlimited polymorphic with intrinsic dynamic type in extends_type_of
Unlimited polymorphic entities can have an intrinsic dynamic type. Update the code of extends_type_of to compare the CFI_type in these case.
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D145722
show more ...
|
#
188c02da |
| 09-Mar-2023 |
Valentin Clement <clementval@gmail.com> |
[flang] Simplify same_type_as condition
Restore the behavior changed in D145384 and add proper unit tests.
Unallocated unlimited poymorphic allocatable and disassociated unlimited polymorphic point
[flang] Simplify same_type_as condition
Restore the behavior changed in D145384 and add proper unit tests.
Unallocated unlimited poymorphic allocatable and disassociated unlimited polymorphic pointer should return false.
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D145674
show more ...
|
#
173e54c3 |
| 08-Mar-2023 |
Valentin Clement <clementval@gmail.com> |
[flang] Align same_type_as result to other compilers
Unallocated unlimited polymorphic entities do not have a dynamic type set and do not have declared type. The standard notes that the result is pr
[flang] Align same_type_as result to other compilers
Unallocated unlimited polymorphic entities do not have a dynamic type set and do not have declared type. The standard notes that the result is processor dependent when one of the arguments of same_type_as is in this case. Align the result to other compiler (gfortran, nvfortran).
Reviewed By: jeanPerier, PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D145384
show more ...
|
Revision tags: llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2 |
|
#
755535b5 |
| 01-Feb-2023 |
Peter Klausler <pklausler@nvidia.com> |
[flang][runtime] Handle aliasing in Assign()
Detect and handle LHS/RHS aliasing when effecting intrinsic assignments via the Assign() runtime function.
Also: don't apply special handling for alloca
[flang][runtime] Handle aliasing in Assign()
Detect and handle LHS/RHS aliasing when effecting intrinsic assignments via the Assign() runtime function.
Also: don't apply special handling for allocatable LHS when calling a user-defined type-bound ASSIGNMENT(=) generic procedure for a polymorphic type, and refactor some code into utility functions to make Assign() more comprehensible.
Differential Revision: https://reviews.llvm.org/D144026
show more ...
|
Revision tags: llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7 |
|
#
87bd9461 |
| 11-Jan-2023 |
Valentin Clement <clementval@gmail.com> |
[flang] Lowering and implementation for extends_type_of
Add implementation and loweirng for the extends_type_of intrinsic.
The standard mentions this: otherwise if the dynamic type of A or MOLD is
[flang] Lowering and implementation for extends_type_of
Add implementation and loweirng for the extends_type_of intrinsic.
The standard mentions this: otherwise if the dynamic type of A or MOLD is extensible, the result is true if and only if the dynamic type of A is an extension type of the dynamic type of MOLD. Which could be interpreted that `extends_type_of(a, a)` could be false since a type is not an extension of itself. Gfortran result for this is `true` so the same behavior is applied here as well.
Depends on D141364
Reviewed By: jeanPerier, PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D141376
show more ...
|
#
4bb17511 |
| 11-Jan-2023 |
Valentin Clement <clementval@gmail.com> |
[flang] Lowering and implementation for same_type_as
The test performed by same_type_as does not consider kind type parameters. If an exact match is not found, the name of the derived type is compar
[flang] Lowering and implementation for same_type_as
The test performed by same_type_as does not consider kind type parameters. If an exact match is not found, the name of the derived type is compared. The name in the runtime info does not include the kind type parameters as it does in the mangled name.
Reviewed By: jeanPerier, PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D141364
show more ...
|
Revision tags: llvmorg-15.0.6 |
|
#
8dfd8835 |
| 18-Nov-2022 |
Valentin Clement <clementval@gmail.com> |
[flang] Add ClassIs runtime function
Add a `ClassIs` function that takes a descriptor and a type desc to implement the check needed by the CLASS IS type guard in SELECT TYPE construct. Since the kin
[flang] Add ClassIs runtime function
Add a `ClassIs` function that takes a descriptor and a type desc to implement the check needed by the CLASS IS type guard in SELECT TYPE construct. Since the kind type parameter are directly folded in the type itself in Flang and the type descriptor is a global, the function just check if the type descriptor address of the descriptor is equivalent to the type descriptor address of the global. If not, it check in the parents of the descriptor's type descriptor.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D138279
show more ...
|
Revision tags: llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, working, 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, llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3 |
|
#
830c0b90 |
| 01-Sep-2021 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Move runtime API headers to flang/include/flang/Runtime
Move the closure of the subset of flang/runtime/*.h header files that are referenced by source files outside flang/runtime (apart from
[flang] Move runtime API headers to flang/include/flang/Runtime
Move the closure of the subset of flang/runtime/*.h header files that are referenced by source files outside flang/runtime (apart from unit tests) into a new directory (flang/include/flang/Runtime) so that relative include paths into ../runtime need not be used.
flang/runtime/pgmath.h.inc is moved to flang/include/flang/Evaluate; it's not used by the runtime.
Differential Revision: https://reviews.llvm.org/D109107
show more ...
|
Revision tags: llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init |
|
#
a48e4168 |
| 19-Jul-2021 |
peter klausler <pklausler@nvidia.com> |
[flang] Run-time derived type initialization and destruction
Use derived type information tables to drive default component initialization (when needed), component destruction, and calls to final su
[flang] Run-time derived type initialization and destruction
Use derived type information tables to drive default component initialization (when needed), component destruction, and calls to final subroutines. Perform these operations automatically for ALLOCATE()/DEALLOCATE() APIs for allocatables, automatics, and pointers. Add APIs for use in lowering to perform these operations for non-allocatable/automatic non-pointer variables. Data pointer component initialization supports arbitrary constant designators, a F'2008 feature, which may be a first for Fortran implementations.
Differential Revision: https://reviews.llvm.org/D106297
show more ...
|