diff options
author | Slava Zakharin <szakharin@nvidia.com> | 2024-04-30 17:40:36 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-30 17:40:36 -0700 |
commit | 986f832cff9cfdd9fa6addfadcd93206636311ef (patch) | |
tree | 9960d6f3d8c9b13cea39a87ad091da11f17e441d /flang/unittests | |
parent | 8cde1cfc60e36a1b4f632d00810983f0a7eb5462 (diff) | |
download | llvm-986f832cff9cfdd9fa6addfadcd93206636311ef.zip llvm-986f832cff9cfdd9fa6addfadcd93206636311ef.tar.gz llvm-986f832cff9cfdd9fa6addfadcd93206636311ef.tar.bz2 |
[flang] Added fir.dummy_scope operation to preserve dummy arguments association. (#90642)
The new operation is just an abstract attribute that is attached to
[hl]fir.declare operations of dummy arguments of a subroutine.
Dummy arguments of the same subroutine refer to the same
fir.dummy_scope, so they can be recognized as such during FIR AliasAnalysis.
Note that the fir.dummy_scope must be specific to the runtime
instantiation of a subroutine, so any MLIR inlining/cloning should duplicate and
unique it vs using the same fir.dummy_scope for different runtime instantiations.
This is why I made it an operation rather than an attribute.
The new operation uses a write effect on DebuggingResource, same as
[hl]fir.declare, to avoid optimizing it away.
Diffstat (limited to 'flang/unittests')
-rw-r--r-- | flang/unittests/Optimizer/FortranVariableTest.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/flang/unittests/Optimizer/FortranVariableTest.cpp b/flang/unittests/Optimizer/FortranVariableTest.cpp index 790f735..f5f559e 100644 --- a/flang/unittests/Optimizer/FortranVariableTest.cpp +++ b/flang/unittests/Optimizer/FortranVariableTest.cpp @@ -48,7 +48,8 @@ TEST_F(FortranVariableTest, SimpleScalar) { mlir::Value addr = builder->create<fir::AllocaOp>(loc, eleType); auto name = mlir::StringAttr::get(&context, "x"); auto declare = builder->create<fir::DeclareOp>(loc, addr.getType(), addr, - /*shape=*/mlir::Value{}, /*typeParams=*/std::nullopt, name, + /*shape=*/mlir::Value{}, /*typeParams=*/std::nullopt, + /*dummy_scope=*/nullptr, name, /*fortran_attrs=*/fir::FortranVariableFlagsAttr{}, /*cuda_attr=*/fir::CUDADataAttributeAttr{}); @@ -74,7 +75,7 @@ TEST_F(FortranVariableTest, CharacterScalar) { loc, eleType, /*pinned=*/false, typeParams); auto name = mlir::StringAttr::get(&context, "x"); auto declare = builder->create<fir::DeclareOp>(loc, addr.getType(), addr, - /*shape=*/mlir::Value{}, typeParams, name, + /*shape=*/mlir::Value{}, typeParams, /*dummy_scope=*/nullptr, name, /*fortran_attrs=*/fir::FortranVariableFlagsAttr{}, /*cuda_attr=*/fir::CUDADataAttributeAttr{}); @@ -105,7 +106,7 @@ TEST_F(FortranVariableTest, SimpleArray) { mlir::Value shape = createShape(extents); auto name = mlir::StringAttr::get(&context, "x"); auto declare = builder->create<fir::DeclareOp>(loc, addr.getType(), addr, - shape, /*typeParams*/ std::nullopt, name, + shape, /*typeParams*/ std::nullopt, /*dummy_scope=*/nullptr, name, /*fortran_attrs=*/fir::FortranVariableFlagsAttr{}, /*cuda_attr=*/fir::CUDADataAttributeAttr{}); @@ -136,7 +137,7 @@ TEST_F(FortranVariableTest, CharacterArray) { mlir::Value shape = createShape(extents); auto name = mlir::StringAttr::get(&context, "x"); auto declare = builder->create<fir::DeclareOp>(loc, addr.getType(), addr, - shape, typeParams, name, + shape, typeParams, /*dummy_scope=*/nullptr, name, /*fortran_attrs=*/fir::FortranVariableFlagsAttr{}, /*cuda_attr=*/fir::CUDADataAttributeAttr{}); |