Revision tags: llvmorg-21-init |
|
#
f023da12 |
| 16-Jan-2025 |
Matthias Springer <me@m-sp.org> |
[mlir][IR] Remove factory methods from `FloatType` (#123026)
This commit removes convenience methods from `FloatType` to make it
independent of concrete interface implementations.
See discussion
[mlir][IR] Remove factory methods from `FloatType` (#123026)
This commit removes convenience methods from `FloatType` to make it
independent of concrete interface implementations.
See discussion here:
https://discourse.llvm.org/t/rethink-on-approach-to-low-precision-fp-types/82361
Note for LLVM integration: Replace `FloatType::getF32(` with
`Float32Type::get(` etc.
show more ...
|
#
d305fd0b |
| 14-Jan-2025 |
Kelvin Li <kkwli@users.noreply.github.com> |
[flang][AIX] filter out __builtin_c_devptr for generating packed type (#122812)
|
Revision tags: llvmorg-19.1.7 |
|
#
79e788d0 |
| 13-Jan-2025 |
Kelvin Li <kkwli@users.noreply.github.com> |
[flang][AIX] BIND(C) derived type alignment for AIX (#121505)
This patch is to handle the alignment requirement for the `bind(c)`
derived type component that is real type and larger than 4 bytes. T
[flang][AIX] BIND(C) derived type alignment for AIX (#121505)
This patch is to handle the alignment requirement for the `bind(c)`
derived type component that is real type and larger than 4 bytes. The
alignment of such component is 4-byte.
show more ...
|
#
fc97d2e6 |
| 18-Dec-2024 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Add UNSIGNED (#113504)
Implement the UNSIGNED extension type and operations under control of a
language feature flag (-funsigned).
This is nearly identical to the UNSIGNED feature that h
[flang] Add UNSIGNED (#113504)
Implement the UNSIGNED extension type and operations under control of a
language feature flag (-funsigned).
This is nearly identical to the UNSIGNED feature that has been available
in Sun Fortran for years, and now implemented in GNU Fortran for
gfortran 15, and proposed for ISO standardization in J3/24-116.txt.
See the new documentation for details; but in short, this is C's
unsigned type, with guaranteed modular arithmetic for +, -, and *, and
the related transformational intrinsic functions SUM & al.
show more ...
|
Revision tags: llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2 |
|
#
c4204c0b |
| 03-Oct-2024 |
jeanPerier <jperier@nvidia.com> |
[flang] replace fir.complex usages with mlir complex (#110850)
Core patch of
https://discourse.llvm.org/t/rfc-flang-replace-usages-of-fir-complex-by-mlir-complex-type/82292.
After that, the last s
[flang] replace fir.complex usages with mlir complex (#110850)
Core patch of
https://discourse.llvm.org/t/rfc-flang-replace-usages-of-fir-complex-by-mlir-complex-type/82292.
After that, the last step is to remove fir.complex from FIR types.
show more ...
|
Revision tags: 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 |
|
#
4abbf995 |
| 20-Jun-2024 |
jeanPerier <jperier@nvidia.com> |
[flang] lower assumed-ranks captured in internal procedures (#96106)
Note: the added test fails because it needs the `associateMutableBox`
change from https://github.com/llvm/llvm-project/pull/9608
[flang] lower assumed-ranks captured in internal procedures (#96106)
Note: the added test fails because it needs the `associateMutableBox`
change from https://github.com/llvm/llvm-project/pull/96082. I will
rebase this PR once the other is merged.
show more ...
|
#
77d8cfb3 |
| 17-Jun-2024 |
Alexander Shaposhnikov <6532716+alexander-shaposhnikov@users.noreply.github.com> |
[Flang] Switch to common::visit more call sites (#90018)
Switch to common::visit more call sites.
Test plan: ninja check-all
|
Revision tags: 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 |
|
#
d0829fbd |
| 19-Mar-2024 |
jeanPerier <jperier@nvidia.com> |
[flang] Enable polymorphic lowering by default (#83285)
Polymorphic entity lowering status is good. The main remaining TODO is
to allow lowering of vector subscripted polymorphic entity, but this
[flang] Enable polymorphic lowering by default (#83285)
Polymorphic entity lowering status is good. The main remaining TODO is
to allow lowering of vector subscripted polymorphic entity, but this
does not deserve blocking all application using polymorphism.
Remove experimental option and enable lowering of polymorphic entity by
default.
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 |
|
#
84564e10 |
| 01-Feb-2024 |
jeanPerier <jperier@nvidia.com> |
[flang][NFC] Cache derived type translation in lowering (#80179)
Derived type translation is proving expensive in modern fortran apps
with many big derived types with dozens of components and paren
[flang][NFC] Cache derived type translation in lowering (#80179)
Derived type translation is proving expensive in modern fortran apps
with many big derived types with dozens of components and parents.
Extending the cache that prevent recursion is proving to have little
cost on apps with small derived types and significant gain (can divide
compile time by 2) on modern fortran apps.
It is legal since the cache lifetime is less than the MLIRContext
lifetime that owns the cached mlir::Type.
Doing so also exposed that the current caching was incorrect, the type
symbol is the same for kind parametrized derived types regardless of the
kind parameters. Instances with different kinds should lower to
different MLIR types. See added test.
Using the type scopes fixes the problem.
show more ...
|
Revision tags: llvmorg-18.1.0-rc1, llvmorg-19-init |
|
#
c373f581 |
| 19-Dec-2023 |
jeanPerier <jperier@nvidia.com> |
[flang] Lower procedure pointer components (#75453)
Lower procedure pointer components, except in the context of structure
constructor (left TODO).
Procedure pointer components lowering share mo
[flang] Lower procedure pointer components (#75453)
Lower procedure pointer components, except in the context of structure
constructor (left TODO).
Procedure pointer components lowering share most of the lowering logic
of procedure poionters with the following particularities:
- They are components, so an hlfir.designate must be generated to
retrieve the procedure pointer address from its derived type base.
- They may have a PASS argument. While there is no dispatching as with
type bound procedure, special care must be taken to retrieve the derived
type component base in this case since semantics placed it in the
argument list and not in the evaluate::ProcedureDesignator.
These components also bring a new level of recursive MLIR types since a
fir.type may now contain a component with an MLIR function type where
one of the argument is the fir.type itself. This required moving the
"derived type in construction" stackto the converter so that the object
and function type lowering utilities share the same state (currently the
function type utilty would end-up creating a new stack when lowering its
arguments, leading to infinite loops). The BoxedProcedurePass also
needed an update to deal with this recursive aspect.
show more ...
|
Revision tags: llvmorg-17.0.6 |
|
#
af09219e |
| 22-Nov-2023 |
Daniel Chen <cdchen@ca.ibm.com> |
[Flang] Add partial support for lowering procedure pointer assignment. (#70461)
**Scope of the PR:** 1. Lowering global and local procedure pointer declaration statement with explicit or implicit in
[Flang] Add partial support for lowering procedure pointer assignment. (#70461)
**Scope of the PR:** 1. Lowering global and local procedure pointer declaration statement with explicit or implicit interface. The explicit interface can be from an interface block, a module procedure or an internal procedure. 2. Lowering procedure pointer assignment, where the target procedure could be external, module or internal procedures. 3. Lowering reference to procedure pointers so that it works end to end.
**PR notes:** 1. The first commit of the PR does not include testing. I would like to collect some comments first, which may alter the output. Once I confirm the implementation, I will add some testing as a follow up commit to this PR. 2. No special handling of the host-associated entities when an internal procedure is the target of a procedure pointer assignment in this PR.
**Implementation notes:** 1. The implementation is using the HLFIR path. 2. Flang currently uses `getUntypedBoxProcType` to get the `fir::BoxProcType` for `ProcedureDesignator` when getting the address of a procedure in order to pass it as an actual argument. This PR inherits the same design decision for procedure pointer as the `fir::StoreOp` requires the same memory type.
Note: this commit is actually resubmitting the original commit from PR #70461 that was reverted. See PR #73221.
show more ...
|
#
49f55d10 |
| 23-Nov-2023 |
Muhammad Omair Javaid <omair.javaid@linaro.org> |
Revert "[Flang] Add partial support for lowering procedure pointer assignment. (#70461)"
This reverts commit e07fec10ac208c2868a24c5c0be88e45778b297e.
This change appears to have broken following b
Revert "[Flang] Add partial support for lowering procedure pointer assignment. (#70461)"
This reverts commit e07fec10ac208c2868a24c5c0be88e45778b297e.
This change appears to have broken following buildbots: https://lab.llvm.org/buildbot/#/builders/176 https://lab.llvm.org/buildbot/#/builders/179 https://lab.llvm.org/buildbot/#/builders/184 https://lab.llvm.org/buildbot/#/builders/197 https://lab.llvm.org/buildbot/#/builders/198
All bots fails in testsuite where following tests seems broken: (eg: https://lab.llvm.org/buildbot/#/builders/176/builds/7131)
test-suite::gfortran-regression-compile-regression__proc_ptr_46_f90.test test-suite::gfortran-regression-compile-regression__proc_ptr_37_f90.test
show more ...
|
#
e07fec10 |
| 22-Nov-2023 |
Daniel Chen <cdchen@ca.ibm.com> |
[Flang] Add partial support for lowering procedure pointer assignment. (#70461)
**Scope of the PR:**
1. Lowering global and local procedure pointer declaration statement
with explicit or implicit
[Flang] Add partial support for lowering procedure pointer assignment. (#70461)
**Scope of the PR:**
1. Lowering global and local procedure pointer declaration statement
with explicit or implicit interface. The explicit interface can be from
an interface block, a module procedure or an internal procedure.
2. Lowering procedure pointer assignment, where the target procedure
could be external, module or internal procedures.
3. Lowering reference to procedure pointers so that it works end to end.
**PR notes:**
1. The first commit of the PR does not include testing. I would like to
collect some comments first, which may alter the output. Once I confirm
the implementation, I will add some testing as a follow up commit to
this PR.
2. No special handling of the host-associated entities when an internal
procedure is the target of a procedure pointer assignment in this PR.
**Implementation notes:**
1. The implementation is using the HLFIR path.
2. Flang currently uses `getUntypedBoxProcType` to get the
`fir::BoxProcType` for `ProcedureDesignator` when getting the address of
a procedure in order to pass it as an actual argument. This PR inherits
the same design decision for procedure pointer as the `fir::StoreOp`
requires the same memory type.
show more ...
|
Revision tags: llvmorg-17.0.5, llvmorg-17.0.4 |
|
#
e45f6e93 |
| 20-Oct-2023 |
jeanPerier <jperier@nvidia.com> |
[flang][hlfir] Make the parent type the first component (#69348)
Type extension is currently handled in FIR by inlining the parents
components as the first member of the record type.
This is not
[flang][hlfir] Make the parent type the first component (#69348)
Type extension is currently handled in FIR by inlining the parents
components as the first member of the record type.
This is not correct from a memory layout point of view since the storage
size of the parent type may be bigger than the sum of the size of its
component (due to alignment requirement). To avoid making FIR types
target dependent and fix this issue, make the parent component a single
component with the parent type at the beginning of the record type.
This also simplifies addressing since parent component is now a "normal"
component that can be designated with hlfir.designate.
StructureComponent lowering however is a bit more complex since the
symbols in the structure component may refer to subcomponents of parent
types.
Notes:
1. The fix is only done in HLFIR for now, a similar fix should be done
in ConvertExpr.cpp to fix the path without HLFIR (I will likely still do
it in a new patch since it would be an annoying bug to investigate for
people testing flang without HLFIR).
2. The private component extra mangling is useless after this patch. I
will remove it after 1.
3. The "parent component" TODO in constant CTOR is free to implement for
HLFIR after this patch, but I would rather remove it and test it in a
different patch.
show more ...
|
Revision tags: llvmorg-17.0.3 |
|
#
4ccd57dd |
| 06-Oct-2023 |
jeanPerier <jperier@nvidia.com> |
[flang][nfc] replace fir.dispatch_table with more generic fir.type_info (#68309)
The goal is to progressively propagate all the derived type info that is
currently in the runtime type info globals
[flang][nfc] replace fir.dispatch_table with more generic fir.type_info (#68309)
The goal is to progressively propagate all the derived type info that is
currently in the runtime type info globals into a FIR operation that can
be easily queried and used by FIR/HLFIR passes.
When this will be complete, the last step will be to stop generating the
runtime info global in lowering, but to do that later in or just before
codegen to keep the FIR files readable (on the added type-info.f90
tests, the lowered runtime info globals takes a whooping 2.6 millions
characters on 1600 lines of the FIR textual output. The fir.type_info that
contains all the info required to generate those globals for such
"trivial" types takes 1721 characters on 9 lines).
So far this patch simply starts by replacing the fir.dispatch_table
operation by the fir.type_info operation and to add the noinit/
nofinal/nodestroy flags to it. These flags will soon be used in HLFIR to
better rewrite hlfir.assign with derived types.
show more ...
|
Revision tags: llvmorg-17.0.2 |
|
#
be30cd62 |
| 28-Sep-2023 |
jeanPerier <jperier@nvidia.com> |
[flang][lowering] Move PDT TODO before length param type lowering (#67650)
There is a crash before hitting the TODO when the length parameter kind
depends on a KIND parameter. I do not want to fix
[flang][lowering] Move PDT TODO before length param type lowering (#67650)
There is a crash before hitting the TODO when the length parameter kind
depends on a KIND parameter. I do not want to fix it since I cannot test
it because of the TODO, so I just moved to TODO up and added a comment.
show more ...
|
Revision tags: llvmorg-17.0.1 |
|
#
99a54b83 |
| 18-Sep-2023 |
jeanPerier <jperier@nvidia.com> |
[flang] Lower PRIVATE component names safely (#66076)
It is possible for a derived type extending a type with private
components to define components with the same name as the private
components.
[flang] Lower PRIVATE component names safely (#66076)
It is possible for a derived type extending a type with private
components to define components with the same name as the private
components.
This was not properly handled by lowering where several fir.record type
component names could end-up being the same, leading to bad generated
code (only the first component was accessed via fir.field_index, leading
to bad generated code).
This patch handles the situation by adding the derived type mangled name
to private component.
show more ...
|
Revision tags: llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3 |
|
#
0c0b2ea9 |
| 11-Aug-2023 |
Peter Klausler <pklausler@nvidia.com> |
[flang] Check procedure pointer initializations; clean up ELEMENTAL
Implements compatibility checking for initializers in procedure pointer declarations. This work exposed some inconsistency in how
[flang] Check procedure pointer initializations; clean up ELEMENTAL
Implements compatibility checking for initializers in procedure pointer declarations. This work exposed some inconsistency in how ELEMENTAL interfaces were handled and checked, from both unrestricted intrinsic functions and others, and some refinements needed for function result compatbility checking; these have also been ironed out. Some new warnings are now emitted, and this affected a dozen or so tests.
Differential Revision: https://reviews.llvm.org/D159026
show more ...
|
Revision tags: llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5 |
|
#
ef934174 |
| 23-May-2023 |
Kelvin Li <kli@ca.ibm.com> |
[flang] Support for PowerPC vector type
The following PowerPC vector type syntax is added:
VECTOR ( element-type-spec )
where element-type-sec is integer-type-spec, real-type-sec or unsigned-typ
[flang] Support for PowerPC vector type
The following PowerPC vector type syntax is added:
VECTOR ( element-type-spec )
where element-type-sec is integer-type-spec, real-type-sec or unsigned-type-spec.
Two opaque types (__VECTOR_PAIR and __VECTOR_QUAD) are also added.
A finite set of functionalities are implemented in order to support the new types: 1. declare objects 2. declare function result 3. declare type dummy arguments 4. intrinsic assignment between the new type objects (e.g. v1=v2) 5. reference functions that return the new types
Submit on behalf of @tislam @danielcchen
Authors: @tislam @danielcchen
Differential Revision: https://reviews.llvm.org/D150876
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 |
|
#
2c143345 |
| 27-Feb-2023 |
V Donaldson <vdonaldson@nvidia.com> |
[flang] Block construct
A block construct is an execution control construct that supports declaration scopes contained within a parent subprogram scope or another block scope. (blocks may be nested.
[flang] Block construct
A block construct is an execution control construct that supports declaration scopes contained within a parent subprogram scope or another block scope. (blocks may be nested.) This is implemented by applying basic scope processing to the block level.
Name uniquing/mangling is extended to support this. The term "block" is heavily overloaded in Fortran standards. Prior name uniquing used tag `B` for common block objects. Existing tag choices were modified to free up `B` for block construct entities, and `C` for common blocks, and resolve additional issues with other tags. The "old tag -> new tag" changes can be summarized as:
-> B -- block construct -> new B -> C -- common block C -> YI -- intrinsic type descriptor; not currently generated CT -> Y -- nonintrinsic type descriptor; not currently generated G -> N -- namelist group L -> -- block data; not needed -> deleted
Existing name uniquing components consist of a tag followed by a name from user source code, such as a module, subprogram, or variable name. Block constructs are different in that they may be anonymous. (Like other constructs, a block may have a `block-construct-name` that can be used in exit statements, but this name is optional.) So blocks are given a numeric compiler-generated preorder index starting with `B1`, `B2`, and so on, on a per-procedure basis.
Name uniquing is also modified to include component names for all containing procedures rather than for just the immediate host. This fixes an existing name clash bug with same-named entities in same-named host subprograms contained in different-named containing subprograms, and variations of the bug involving modules and submodules.
F18 clause 9.7.3.1 (Deallocation of allocatable variables) paragraph 1 has a requirement that an allocated, unsaved allocatable local variable must be deallocated on procedure exit. The following paragraph 2 states:
When a BLOCK construct terminates, any unsaved allocated allocatable local variable of the construct is deallocated.
Similarly, F18 clause 7.5.6.3 (When finalization occurs) paragraph 3 has a requirement that a nonpointer, nonallocatable object must be finalized on procedure exit. The following paragraph 4 states:
A nonpointer nonallocatable local variable of a BLOCK construct is finalized immediately before it would become undefined due to termination of the BLOCK construct.
These deallocation and finalization requirements, along with stack restoration requirements, require knowledge of block exits. In addition to normal block termination at an end-block-stmt, a block may be terminated by executing a branching statement that targets a statement outside of the block. This includes
Single-target branch statements: - goto - exit - cycle - return
Bounded multiple-target branch statements: - arithmetic goto - IO statement with END, EOR, or ERR specifiers
Unbounded multiple-target branch statements: - call with alternate return specs - computed goto - assigned goto
Lowering code is extended to determine if one of these branches exits one or more relevant blocks or other constructs, and adds a mechanism to insert any necessary deallocation, finalization, or stack restoration code at the source of the branch. For a single-target branch it suffices to generate the exit code just prior to taking the indicated branch. Each target of a multiple-target branch must be analyzed individually. Where necessary, the code must first branch to an intermediate basic block that contains exit code, followed by a branch to the original target statement.
This patch implements an `activeConstructStack` construct exit mechanism that queries a new `activeConstruct` PFT bit to insert stack restoration code at block exits. It ties in to existing code in ConvertVariable.cpp routine `instantiateLocal` which has code for finalization, making block exit finalization on par with subprogram exit finalization. Deallocation is as yet unimplemented for subprograms or blocks. This may result in memory leaks for affected objects at either the subprogram or block level. Deallocation cases can be addressed uniformly for both scopes in a future patch, presumably with code insertion in routine `instantiateLocal`.
The exit code mechanism is not limited to block construct exits. It is also available for use with other constructs. In particular, it is used to replace custom deallocation code for a select case construct character selector expression where applicable. This functionality is also added to select type and associate constructs. It is available for use with other constructs, such as select rank and image control constructs, if that turns out to be necessary.
Overlapping nonfunctional changes include eliminating "FIR" from some routine names and eliminating obsolete spaces in comments.
show more ...
|
#
d8d91b2a |
| 28-Feb-2023 |
Jean Perier <jperier@nvidia.com> |
[flang][hlfir] Support type descriptor for initialized character component
These compiler generated component descriptor include designators packaged as CLASS(*) for simplicity. HLFIR hit an assert
[flang][hlfir] Support type descriptor for initialized character component
These compiler generated component descriptor include designators packaged as CLASS(*) for simplicity. HLFIR hit an assert in an std::get trying to recover an Expr<SomeChar> while translating the expression type. Use the dynamic type of the CLASS(*) expr in that case to recover the compiler length.
Differential Revision: https://reviews.llvm.org/D144960
show more ...
|
Revision tags: llvmorg-16.0.0-rc3 |
|
#
1e413b90 |
| 08-Feb-2023 |
Valentin Clement <clementval@gmail.com> |
[flang][NFC] Centralize fir.class addition in ConvertType
fir.class type is always needed for polymorphic and unlimited polymorphic entities. Wrapping the element type with a fir.class type was done
[flang][NFC] Centralize fir.class addition in ConvertType
fir.class type is always needed for polymorphic and unlimited polymorphic entities. Wrapping the element type with a fir.class type was done in ConvertType for some case and else where in the code for other. Centralize this in ConvertType when converting from expr or symbol.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D143490
show more ...
|
Revision tags: llvmorg-16.0.0-rc2 |
|
#
97492fd1 |
| 31-Jan-2023 |
Valentin Clement <clementval@gmail.com> |
[flang] derived-type finalization
This patch implements the derived-type finalization for monomorphic and polymorphic derived-type.
The finalization is done through a call to the `Destroy` runtime
[flang] derived-type finalization
This patch implements the derived-type finalization for monomorphic and polymorphic derived-type.
The finalization is done through a call to the `Destroy` runtime function so the allocatable component object are also finalized correctly when needed. It would be possible to finalize monomorphic derived-type with non finalizable component with a direct call to their finalize subroutine.
7.5.6.3 point 1: LHS nonallocatable object and LHS allocatable object finalization. Done with call to `Destroy` for monomorphic derived-type and through `Assign` for polymorphic entities.
7.5.6.3 point 2: Done within the deallocation calls.
7.5.6.3 point 3: A function context is added to the bridge to attach finalization that need to happen on function/subroutine exit.
7.5.6.3 point 4: BLOCK construct not yet implemented.
7.5.6.3 point 5/6: Finalization attach to the stmtCtx in a similar way than 9.7.3.2 point 4.
7.5.6.3 point 7: INTENT(OUT) finalization done with a call to `Destroy` runtime function call.
This patch passes 9/10 tests in the proposed test-suite https://github.com/llvm/llvm-test-suite/pull/13
- The case with BLOCK construct will be implemented later when BLOCK are implemented upstream.
- Automatic deallocation is not yet implemented. Finalization triggered by automatic deallocation is then not triggered.
Reviewed By: jeanPerier, PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D142707
show more ...
|
Revision tags: llvmorg-16.0.0-rc1, llvmorg-17-init |
|
#
da78ae46 |
| 17-Jan-2023 |
Jean Perier <jperier@nvidia.com> |
[flang][hlfir] Lower some character elemental references
Lower character elemental user procedures with constant length, and bot dynamic and constant length ADJUSTL, ADJUSTR, and MERGE references (w
[flang][hlfir] Lower some character elemental references
Lower character elemental user procedures with constant length, and bot dynamic and constant length ADJUSTL, ADJUSTR, and MERGE references (which leaves out MIN/MAX).
Character elemental user procedures with dynamic length are a bit more involving and since it is an edge-case that is not currently supported, I will take this on later.
Differential Revision: https://reviews.llvm.org/D141847
show more ...
|
#
ffc3051d |
| 12-Jan-2023 |
Jean Perier <jperier@nvidia.com> |
[flang] Lower component-ref to hlfir.designate
Implement the visit of component refs in DesignatorBuilder. The ArrayRef code has to be updated a bit to cope with the case where the base is an array
[flang] Lower component-ref to hlfir.designate
Implement the visit of component refs in DesignatorBuilder. The ArrayRef code has to be updated a bit to cope with the case where the base is an array and the component is also an array.
Improve the result type of array sections designators (only return a fir.box if the array section is not contiguous/has dynamic extent). This required exposing IsContiguous entry point for different front-end designator nodes (the implementation already existed, but was internal to check-expression.cpp).
Differential Revision: https://reviews.llvm.org/D141470
show more ...
|