From 4435fa806a868e2837a3754c1b520b0b17fa76d6 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 11 Dec 2024 14:21:53 +0000 Subject: [PATCH 01/58] #2271 add reference_accesses() to Literal, CodeBlock and ScopingNode --- .../kernel_module_inline_trans.py | 53 ++++++------------- .../lfric/lfric_extract_driver_creator.py | 4 ++ src/psyclone/psyir/nodes/codeblock.py | 16 ++++++ src/psyclone/psyir/nodes/literal.py | 16 +++++- src/psyclone/psyir/nodes/scoping_node.py | 43 ++++++++++++++- .../tests/core/variables_access_info_test.py | 16 +++--- src/psyclone/tests/dependency_test.py | 4 +- .../kernel_module_inline_trans_test.py | 6 +-- .../tests/domain/lfric/lfric_builtins_test.py | 3 +- 9 files changed, 109 insertions(+), 52 deletions(-) diff --git a/src/psyclone/domain/common/transformations/kernel_module_inline_trans.py b/src/psyclone/domain/common/transformations/kernel_module_inline_trans.py index eca8d0524d..eddf6c69b9 100644 --- a/src/psyclone/domain/common/transformations/kernel_module_inline_trans.py +++ b/src/psyclone/domain/common/transformations/kernel_module_inline_trans.py @@ -43,13 +43,13 @@ ''' - +from psyclone.core import VariablesAccessInfo from psyclone.errors import InternalError from psyclone.psyGen import Transformation, CodedKern from psyclone.psyir.transformations import TransformationError from psyclone.psyir.symbols import ( ContainerSymbol, DataSymbol, DataTypeSymbol, DefaultModuleInterface, - IntrinsicSymbol, RoutineSymbol, Symbol) + RoutineSymbol, Symbol) from psyclone.psyir.nodes import ( Container, Reference, Routine, ScopingNode, Literal, CodeBlock, Call, IntrinsicCall) @@ -156,41 +156,20 @@ def validate(self, node, options=None): # We do not support kernels that use symbols representing data # declared in their own parent module (we would need to new imports # from this module for those, and we don't do this yet). - # These can only be found in References and CodeBlocks. - for var in kernel_schedule.walk(Reference): - symbol = var.symbol - if isinstance(symbol, IntrinsicSymbol): - continue - if not symbol.is_import: - if not var.scope.symbol_table.lookup( - symbol.name, scope_limit=kernel_schedule, - otherwise=False): - raise TransformationError( - f"{kern_or_call} '{kname}' contains accesses to " - f"'{symbol.name}' which is declared in the same " - f"module scope. Cannot inline such a {kern_or_call}.") - for block in kernel_schedule.walk(CodeBlock): - for name in block.get_symbol_names(): - # Is this quantity declared within the kernel? - sym = block.scope.symbol_table.lookup( - name, scope_limit=kernel_schedule, otherwise=None) - if not sym: - # It isn't declared in the kernel. - # Can we find the corresponding symbol at all? - sym = block.scope.symbol_table.lookup(name, otherwise=None) - if not sym: - raise TransformationError( - f"{kern_or_call} '{kname}' contains accesses to " - f"'{name}' in a CodeBlock but the origin of this " - f"symbol is unknown.") - # We found it in an outer scope - is it from an import or a - # declaration? - if not sym.is_import: - raise TransformationError( - f"{kern_or_call} '{kname}' contains accesses to " - f"'{name}' in a CodeBlock that is declared in the " - f"same module scope. Cannot inline such a " - f"{kern_or_call}.") + vai = VariablesAccessInfo(kernel_schedule) + table = kernel_schedule.symbol_table + for sig in vai.all_signatures: + symbol = table.lookup(sig.var_name, otherwise=None) + if not symbol: + raise TransformationError( + f"{kern_or_call} '{kname}' contains accesses to " + f"'{sig.var_name}' but the origin of this symbol is " + f"unknown.") + if not symbol.is_import and symbol.name not in table: + raise TransformationError( + f"{kern_or_call} '{kname}' contains accesses to " + f"'{symbol.name}' which is declared in the same " + f"module scope. Cannot inline such a {kern_or_call}.") # We can't transform subroutines that shadow top-level symbol module # names, because we won't be able to bring this into the subroutine diff --git a/src/psyclone/domain/lfric/lfric_extract_driver_creator.py b/src/psyclone/domain/lfric/lfric_extract_driver_creator.py index d9993da13b..328f515149 100644 --- a/src/psyclone/domain/lfric/lfric_extract_driver_creator.py +++ b/src/psyclone/domain/lfric/lfric_extract_driver_creator.py @@ -593,6 +593,10 @@ def _sym_is_field(sym): else: orig_sym = original_symbol_table.lookup(signature[0]) + if orig_sym and isinstance(orig_sym, DataTypeSymbol): + # We don't want symbols representing data types. + continue + if orig_sym and orig_sym.is_array and _sym_is_field(orig_sym): # This is a field vector, so add all individual fields upper = int(orig_sym.datatype.shape[0].upper.value) diff --git a/src/psyclone/psyir/nodes/codeblock.py b/src/psyclone/psyir/nodes/codeblock.py index 451cc9644c..2fa0fbcb32 100644 --- a/src/psyclone/psyir/nodes/codeblock.py +++ b/src/psyclone/psyir/nodes/codeblock.py @@ -41,6 +41,7 @@ from enum import Enum from fparser.two import Fortran2003 from fparser.two.utils import walk +from psyclone.core import AccessType, Signature, VariablesAccessInfo from psyclone.psyir.nodes.statement import Statement from psyclone.psyir.nodes.datanode import DataNode @@ -177,5 +178,20 @@ def get_symbol_names(self): return result + def reference_accesses(self, var_accesses: VariablesAccessInfo): + ''' + Get all variable access information. Since this is a CodeBlock we + only know the names of symbols accessed within it but not how they + are accessed. Therefore we err on the side of caution and mark + them all as READWRITE. + + :param var_accesses: VariablesAccessInfo instance that stores the + information about variable accesses. + + ''' + for name in self.get_symbol_names(): + var_accesses.add_access(Signature(name), AccessType.READWRITE, + self) + def __str__(self): return f"CodeBlock[{len(self._fp2_nodes)} nodes]" diff --git a/src/psyclone/psyir/nodes/literal.py b/src/psyclone/psyir/nodes/literal.py index 26b19ff85c..f5c881b089 100644 --- a/src/psyclone/psyir/nodes/literal.py +++ b/src/psyclone/psyir/nodes/literal.py @@ -41,8 +41,9 @@ import re +from psyclone.core import AccessType, Signature, VariablesAccessInfo from psyclone.psyir.nodes.datanode import DataNode -from psyclone.psyir.symbols import ScalarType, ArrayType +from psyclone.psyir.symbols import ScalarType, Symbol, ArrayType class Literal(DataNode): @@ -170,6 +171,19 @@ def node_str(self, colour=True): return (f"{self.coloured_name(colour)}" f"[value:'{self._value}', {self.datatype}]") + def reference_accesses(self, access_info: VariablesAccessInfo): + ''' + Get all variable access information. Since this is a Literal, the + only possible place a symbol might be present is in the precision. + + :param var_accesses: VariablesAccessInfo instance that stores the + information about variable accesses. + + ''' + if isinstance(self.datatype.precision, Symbol): + access_info.add_access(Signature(self.datatype.precision.name), + AccessType.READ, self) + def replace_symbols_using(self, table): ''' Replace any Symbols referred to by this object with those in the diff --git a/src/psyclone/psyir/nodes/scoping_node.py b/src/psyclone/psyir/nodes/scoping_node.py index f35007afc5..e00d060b47 100644 --- a/src/psyclone/psyir/nodes/scoping_node.py +++ b/src/psyclone/psyir/nodes/scoping_node.py @@ -36,8 +36,11 @@ ''' This module contains the ScopingNode implementation.''' +from psyclone.core import AccessType, Signature, VariablesAccessInfo from psyclone.psyir.nodes.node import Node -from psyclone.psyir.symbols import RoutineSymbol, SymbolError, SymbolTable +from psyclone.psyir.symbols import ( + DataTypeSymbol, RoutineSymbol, StructureType, Symbol, + SymbolError, SymbolTable) class ScopingNode(Node): @@ -170,6 +173,44 @@ def _refine_copy(self, other): # call to _refine_copy and only do this call when that depth is zero. self.replace_symbols_using(self._symbol_table) + def reference_accesses(self, access_info: VariablesAccessInfo): + ''' + Get all variable access information. This specialisation is required + to query the SymbolTable associated with a Scoping node and ensure + that any Symbols appearing in precision specifications or + initialisation expressions are captured. + + :param var_accesses: VariablesAccessInfo instance that stores the + information about variable accesses. + + ''' + for sym in self._symbol_table.datasymbols: + if isinstance(sym.datatype, DataTypeSymbol): + access_info.add_access(Signature(sym.datatype.name), + AccessType.READ, self) + elif (hasattr(sym.datatype, "precision") and + isinstance(sym.datatype, Symbol)): + access_info.add_access( + Signature(sym.datatype.precision.name), + AccessType.READ, self) + elif isinstance(sym.datatype, StructureType): + for cmpt in sym.datatype.components: + if isinstance(cmpt.datatype, DataTypeSymbol): + access_info.add_access( + Signature(cmpt.datatype.name), + AccessType.READ, self) + elif (hasattr(cmpt.datatype, "precision") and + isinstance(sym.datatype, Symbol)): + access_info.add_access( + Signature(cmpt.datatype.precision.name), + AccessType.READ, self) + if cmpt.initial_value: + cmpt.initial_value.reference_accesses(access_info) + if sym.initial_value: + sym.initial_value.reference_accesses(access_info) + + super().reference_accesses(access_info) + def replace_symbols_using(self, table): ''' Update any Symbols referenced by this Node (and its descendants) with diff --git a/src/psyclone/tests/core/variables_access_info_test.py b/src/psyclone/tests/core/variables_access_info_test.py index 6d58effb07..d3246a244a 100644 --- a/src/psyclone/tests/core/variables_access_info_test.py +++ b/src/psyclone/tests/core/variables_access_info_test.py @@ -448,10 +448,11 @@ def test_variables_access_info_domain_loop(): structure, so especially the loop variable is not defined) work as expected. ''' - _, invoke = get_invoke("25.1_kern_two_domain.f90", "lfric", idx=0) + psy, invoke = get_invoke("25.1_kern_two_domain.f90", "lfric", idx=0) vai = VariablesAccessInfo(invoke.schedule) assert str(vai) == ("a: READ, b: READ, f1_data: READWRITE, f2_data: " - "READWRITE, map_w3: READ, ncell_2d_no_halos: READ, " + "READWRITE, field_type: READ, map_w3: READ, " + "mesh_type: READ, ncell_2d_no_halos: READ, " "ndf_w3: READ, nlayers_f1: READ, nlayers_f2: READ, " "undf_w3: READ") @@ -471,9 +472,10 @@ def test_lfric_access_info(): # variable in the access list: assert ("basis_w1_qr: READ, basis_w3_qr: READ, cell: READ+WRITE, " "diff_basis_w2_qr: READ, diff_basis_w3_qr: READ, f1_data: " - "READ+WRITE, f2_data: READ, loop0_start: READ, loop0_stop: READ, " - "m1_data: READ, m2_data: READ, map_w1: READ, map_w2: READ, map_w3:" - " READ, ndf_w1: READ, ndf_w2: READ, ndf_w3: READ, nlayers_f1: " - "READ, np_xy_qr: READ, np_z_qr: READ, undf_w1: READ, undf_w2: " - "READ, undf_w3: READ, weights_xy_qr: READ, weights_z_qr: READ" + "READ+WRITE, f2_data: READ, field_type: READ, loop0_start: READ, " + "loop0_stop: READ, m1_data: READ, m2_data: READ, map_w1: READ, " + "map_w2: READ, map_w3: READ, ndf_w1: READ, ndf_w2: READ, " + "ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, np_z_qr: READ, " + "undf_w1: READ, undf_w2: READ, undf_w3: READ, weights_xy_qr: READ," + " weights_z_qr: READ" == str(vai)) diff --git a/src/psyclone/tests/dependency_test.py b/src/psyclone/tests/dependency_test.py index cc479e9fca..c7019dd85d 100644 --- a/src/psyclone/tests/dependency_test.py +++ b/src/psyclone/tests/dependency_test.py @@ -291,8 +291,8 @@ def test_lfric(): var_accesses = VariablesAccessInfo(schedule) assert str(var_accesses) == ( "a: READ, cell: READ+WRITE, f1_data: READ+WRITE, f2_data: READ, " - "loop0_start: READ, loop0_stop: READ, m1_data: READ, " - "m2_data: READ, map_w1: READ, map_w2: READ, " + "field_type: READ, loop0_start: READ, loop0_stop: READ, m1_data: READ," + " m2_data: READ, map_w1: READ, map_w2: READ, " "map_w3: READ, ndf_w1: READ, ndf_w2: READ, ndf_w3: READ, " "nlayers_f1: READ, undf_w1: READ, undf_w2: READ, undf_w3: READ") diff --git a/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py b/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py index 8a0cff701e..54c584ae4e 100644 --- a/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py +++ b/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py @@ -166,8 +166,8 @@ def test_validate_no_inline_global_var(parser): with pytest.raises(TransformationError) as err: inline_trans.validate(kernels[0]) - assert ("'kernel_with_global_code' contains accesses to 'alpha' in a " - "CodeBlock that is declared in the same module scope. Cannot " + assert ("'kernel_with_global_code' contains accesses to 'alpha' which is " + "declared in the same module scope. Cannot " "inline such a Kernel." in str(err.value)) # Check that a symbol of unknown origin within a CodeBlock is caught. @@ -182,7 +182,7 @@ def test_validate_no_inline_global_var(parser): with pytest.raises(TransformationError) as err: inline_trans.validate(kernels[0]) assert ("Kernel 'kernel_with_global_code' contains accesses to 'unknown' " - "in a CodeBlock but the origin of this symbol is unknown" in + "but the origin of this symbol is unknown" in str(err.value)) # But make sure that an IntrinsicCall routine name is not considered diff --git a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py index 942df785e7..182a275059 100644 --- a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py +++ b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py @@ -2142,4 +2142,5 @@ def test_field_access_info_for_arrays_in_builtins(): assert Signature("f2_data") in vai assert ("a: READ, df: READ+WRITE, f1_data: READ, f2_data: WRITE, " - "loop0_start: READ, loop0_stop: READ" == str(vai)) + "field_type: READ, loop0_start: READ, loop0_stop: READ" == + str(vai)) From ec4045f703d9dabfbcb77c6fc6f893e81803ca19 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 11 Dec 2024 14:45:05 +0000 Subject: [PATCH 02/58] #2271 improve ScopingNode implementation --- src/psyclone/psyir/nodes/scoping_node.py | 44 ++++++++++++++---------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/psyclone/psyir/nodes/scoping_node.py b/src/psyclone/psyir/nodes/scoping_node.py index e00d060b47..9d5b717367 100644 --- a/src/psyclone/psyir/nodes/scoping_node.py +++ b/src/psyclone/psyir/nodes/scoping_node.py @@ -39,7 +39,7 @@ from psyclone.core import AccessType, Signature, VariablesAccessInfo from psyclone.psyir.nodes.node import Node from psyclone.psyir.symbols import ( - DataTypeSymbol, RoutineSymbol, StructureType, Symbol, + DataType, DataTypeSymbol, RoutineSymbol, StructureType, Symbol, SymbolError, SymbolTable) @@ -184,28 +184,34 @@ def reference_accesses(self, access_info: VariablesAccessInfo): information about variable accesses. ''' - for sym in self._symbol_table.datasymbols: - if isinstance(sym.datatype, DataTypeSymbol): - access_info.add_access(Signature(sym.datatype.name), - AccessType.READ, self) - elif (hasattr(sym.datatype, "precision") and - isinstance(sym.datatype, Symbol)): + def _get_accesses(dtype: DataType, info: VariablesAccessInfo): + ''' + Store information on any symbols referenced within the supplied + datatype. + + :param dtype: the datatype to query. + :param info: the VariablesAccessInfo instance in which to store + information. + ''' + if isinstance(dtype, DataTypeSymbol): + info.add_access(Signature(dtype.name), + AccessType.READ, self) + elif (hasattr(dtype, "precision") and + isinstance(dtype, Symbol)): access_info.add_access( - Signature(sym.datatype.precision.name), + Signature(dtype.precision.name), AccessType.READ, self) - elif isinstance(sym.datatype, StructureType): + elif isinstance(dtype, StructureType): for cmpt in sym.datatype.components: - if isinstance(cmpt.datatype, DataTypeSymbol): - access_info.add_access( - Signature(cmpt.datatype.name), - AccessType.READ, self) - elif (hasattr(cmpt.datatype, "precision") and - isinstance(sym.datatype, Symbol)): - access_info.add_access( - Signature(cmpt.datatype.precision.name), - AccessType.READ, self) + # Recurse for members of a StructureType + _get_accesses(cmpt.datatype, info) if cmpt.initial_value: - cmpt.initial_value.reference_accesses(access_info) + cmpt.initial_value.reference_accesses(info) + + # Examine the datatypes and initial values of all DataSymbols. + for sym in self._symbol_table.datasymbols: + _get_accesses(sym.datatype, access_info) + if sym.initial_value: sym.initial_value.reference_accesses(access_info) From 76026acead1f93a3afb868ad467496957b6631c6 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 11 Dec 2024 14:45:58 +0000 Subject: [PATCH 03/58] #2271 remove all Kern.local_vars() methods and tests --- src/psyclone/gocean1p0.py | 7 ------- src/psyclone/psyGen.py | 17 ----------------- .../tests/domain/gocean/kernel/gokern_test.py | 14 -------------- src/psyclone/tests/psyGen_test.py | 3 --- 4 files changed, 41 deletions(-) diff --git a/src/psyclone/gocean1p0.py b/src/psyclone/gocean1p0.py index 0c2a0c4406..b24a921850 100644 --- a/src/psyclone/gocean1p0.py +++ b/src/psyclone/gocean1p0.py @@ -1221,13 +1221,6 @@ def reference_accesses(self, var_accesses): super().reference_accesses(var_accesses) var_accesses.next_location() - def local_vars(self): - '''Return a list of the variable (names) that are local to this loop - (and must therefore be e.g. threadprivate if doing OpenMP) - - ''' - return [] - @property def index_offset(self): ''' The grid index-offset convention that this kernel expects ''' diff --git a/src/psyclone/psyGen.py b/src/psyclone/psyGen.py index d87f7c153f..4765680887 100644 --- a/src/psyclone/psyGen.py +++ b/src/psyclone/psyGen.py @@ -1323,9 +1323,6 @@ def is_coloured(self): def iterates_over(self): return self._iterates_over - def local_vars(self): - raise NotImplementedError("Kern.local_vars should be implemented") - def gen_code(self, parent): raise NotImplementedError("Kern.gen_code should be implemented") @@ -1815,14 +1812,6 @@ def _validate_child(position, child): ''' return position == 0 and isinstance(child, Schedule) - @abc.abstractmethod - def local_vars(self): - ''' - :returns: list of the variable (names) that are local to this kernel \ - (and must therefore be e.g. threadprivate if doing OpenMP) - :rtype: list of str - ''' - def node_str(self, colour=True): ''' Returns the name of this node with (optional) control codes to generate coloured output in a terminal that supports it. @@ -1867,12 +1856,6 @@ def load(self, call, arguments, parent=None): name = call.ktype.name super(BuiltIn, self).__init__(parent, call, name, arguments) - def local_vars(self): - '''Variables that are local to this built-in and therefore need to be - made private when parallelising using OpenMP or similar. By default - builtin's do not have any local variables so set to nothing''' - return [] - class Arguments(): ''' diff --git a/src/psyclone/tests/domain/gocean/kernel/gokern_test.py b/src/psyclone/tests/domain/gocean/kernel/gokern_test.py index 5d84ce1e3a..1c6aa6b944 100644 --- a/src/psyclone/tests/domain/gocean/kernel/gokern_test.py +++ b/src/psyclone/tests/domain/gocean/kernel/gokern_test.py @@ -202,17 +202,3 @@ def test_gok_access_info_scalar_and_property(): assert isinstance(comp_ind[2][1], Reference) assert comp_ind[2][0].symbol.name == "i" assert comp_ind[2][1].symbol.name == "j" - - -# ----------------------------------------------------------------------------- -def test_gok_local_vars(): - '''Tests the local_var function - - ''' - _, invoke = get_invoke("test00.1_invoke_kernel_using_const_scalar.f90", - "gocean", idx=0) - schedule = invoke.schedule - - # Get the first kernel - kern1 = schedule.walk(GOKern)[0] - assert kern1.local_vars() == [] diff --git a/src/psyclone/tests/psyGen_test.py b/src/psyclone/tests/psyGen_test.py index c5277faea7..1ddd1d5100 100644 --- a/src/psyclone/tests/psyGen_test.py +++ b/src/psyclone/tests/psyGen_test.py @@ -747,9 +747,6 @@ def __init__(self, call, parent_call, check): dummy_call = DummyClass(my_ktype) my_call = Kern(None, dummy_call, "dummy", DummyArguments) - with pytest.raises(NotImplementedError) as excinfo: - my_call.local_vars() - assert "Kern.local_vars should be implemented" in str(excinfo.value) with pytest.raises(NotImplementedError) as excinfo: my_call.gen_code(None) From b765e55538f1ac082fc914aef8d718b918aa4c76 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 11 Dec 2024 16:30:25 +0000 Subject: [PATCH 04/58] #2271 fix issue with CodeBlock and add test --- src/psyclone/psyir/nodes/codeblock.py | 7 ++++- .../tests/psyir/nodes/codeblock_test.py | 31 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/psyclone/psyir/nodes/codeblock.py b/src/psyclone/psyir/nodes/codeblock.py index 2fa0fbcb32..ccaa2c6a43 100644 --- a/src/psyclone/psyir/nodes/codeblock.py +++ b/src/psyclone/psyir/nodes/codeblock.py @@ -175,7 +175,12 @@ def get_symbol_names(self): Fortran2003.End_If_Stmt)): # We don't want labels associated with loop or branch control. result.append(node.string) - + # Precision on literals requires special attention since they are just + # stored in the tree as str (fparser/#456). + for node in walk(parse_tree, (Fortran2003.Int_Literal_Constant, + Fortran2003.Real_Literal_Constant)): + if node.items[1]: + result.append(node.items[1]) return result def reference_accesses(self, var_accesses: VariablesAccessInfo): diff --git a/src/psyclone/tests/psyir/nodes/codeblock_test.py b/src/psyclone/tests/psyir/nodes/codeblock_test.py index f2558488a4..e6324f25fa 100644 --- a/src/psyclone/tests/psyir/nodes/codeblock_test.py +++ b/src/psyclone/tests/psyir/nodes/codeblock_test.py @@ -40,6 +40,7 @@ import pytest from fparser.common.readfortran import FortranStringReader +from psyclone.core import VariablesAccessInfo from psyclone.psyir.nodes import CodeBlock from psyclone.psyir.nodes.node import colored from psyclone.errors import GenerationError @@ -133,6 +134,36 @@ def test_codeblock_get_symbol_names(parser): assert "that_is_true" in sym_names +def test_codeblock_ref_accesses(parser): + '''Test that the reference_accesses() method works as expected. + ''' + vai = VariablesAccessInfo() + reader = FortranStringReader(''' + subroutine mytest + myloop: DO i = 1, 10_i_def + a = b + sqrt(c) + 1.0_r_def + myifblock: IF(this_is_true)THEN + EXIT myloop + ELSE IF(that_is_true)THEN myifblock + write(*,*) "Bye" + ELSE myifblock + write(*,*) "hello" + END IF myifblock + END DO myloop + end subroutine mytest''') + prog = parser(reader) + block = CodeBlock(prog.children, CodeBlock.Structure.STATEMENT) + block.reference_accesses(vai) + all_sigs = vai.all_signatures + all_names = [sig.var_name for sig in all_sigs] + assert "a" in all_names + assert "i" in all_names + assert "i_def" in all_names + assert "r_def" in all_names + # All signatures should be marked as READWRITE access. + assert all(vai.has_read_write(sig) for sig in all_sigs) + + def test_codeblock_equality(parser): '''Test the __eq__ method of the Codeblock class.''' reader = FortranStringReader(''' From 0920bf9c97139a85abbe28249d72c1e3e83cdd0b Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 11 Dec 2024 17:09:09 +0000 Subject: [PATCH 05/58] #2271 WIP adding ScopingNode tests [skip ci] --- src/psyclone/psyir/nodes/scoping_node.py | 2 +- .../tests/psyir/nodes/scoping_node_test.py | 45 +++++++++++++++++-- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/psyclone/psyir/nodes/scoping_node.py b/src/psyclone/psyir/nodes/scoping_node.py index 9d5b717367..087b85fc2f 100644 --- a/src/psyclone/psyir/nodes/scoping_node.py +++ b/src/psyclone/psyir/nodes/scoping_node.py @@ -197,7 +197,7 @@ def _get_accesses(dtype: DataType, info: VariablesAccessInfo): info.add_access(Signature(dtype.name), AccessType.READ, self) elif (hasattr(dtype, "precision") and - isinstance(dtype, Symbol)): + isinstance(dtype.precision, Symbol)): access_info.add_access( Signature(dtype.precision.name), AccessType.READ, self) diff --git a/src/psyclone/tests/psyir/nodes/scoping_node_test.py b/src/psyclone/tests/psyir/nodes/scoping_node_test.py index 69c151cb44..1f4ea1dcb4 100644 --- a/src/psyclone/tests/psyir/nodes/scoping_node_test.py +++ b/src/psyclone/tests/psyir/nodes/scoping_node_test.py @@ -37,10 +37,13 @@ ''' Performs py.test tests on the ScopingNode PSyIR node. ''' import pytest -from psyclone.psyir.nodes import (Schedule, Assignment, Reference, Container, - Loop, Literal, Routine, ArrayReference) -from psyclone.psyir.symbols import (DataSymbol, ArrayType, INTEGER_TYPE, - ArgumentInterface, SymbolTable, REAL_TYPE) +from psyclone.core import Signature, VariablesAccessInfo +from psyclone.psyir.nodes import ( + Schedule, Assignment, Reference, Container, IntrinsicCall, Loop, Literal, + Routine, ArrayReference) +from psyclone.psyir.symbols import ( + DataSymbol, ArrayType, INTEGER_TYPE, + ArgumentInterface, ScalarType, SymbolTable, REAL_TYPE) from psyclone.tests.utilities import Compile @@ -275,3 +278,37 @@ def test_scoping_node_equality(): assert sched1 == sched2 assert sched1 != sched3 + + +def test_scoping_node_reference_accesses(): + '''Test the reference_accesses() method of ScopingNode.''' + vai = VariablesAccessInfo() + sched = Schedule() + table = sched.symbol_table + # First test with an empty symbol table. + sched.reference_accesses(vai) + assert not vai.all_signatures + # Just adding a Symbol to the table does not affect anything. + prsym = table.new_symbol("r_def", symbol_type=DataSymbol, + datatype=INTEGER_TYPE) + sched.reference_accesses(vai) + assert not vai.all_signatures + # Add another Symbol that references the first one in its precision. + new_type = ScalarType(ScalarType.Intrinsic.REAL, prsym) + var1 = table.new_symbol("var1", symbol_type=DataSymbol, datatype=new_type) + sched.reference_accesses(vai) + assert vai.all_signatures == [Signature("r_def")] + # Add a Symbol with initialisation. + idef = table.new_symbol("i_def", symbol_type=DataSymbol, + datatype=INTEGER_TYPE) + int_type = ScalarType(ScalarType.Intrinsic.INTEGER, idef) + var2 = table.new_symbol("var2", symbol_type=DataSymbol, + datatype=INTEGER_TYPE, + initial_value=Literal("100", int_type)) + vai2 = VariablesAccessInfo() + sched.reference_accesses(vai2) + assert len(vai2.all_signatures) == 2 + assert Signature("i_def") in vai2.all_signatures + # A StructureType. + # stype = StructureType.create() + # Dimensions of an ArrayType. From 8501cba22674dec0a1a1e2ac9d4dfdff706e8f94 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 12 Dec 2024 10:22:01 +0000 Subject: [PATCH 06/58] #2271 add support and tests for symbols within ArrayTypes [skip ci] --- src/psyclone/psyir/nodes/scoping_node.py | 26 +++++--- .../tests/psyir/nodes/scoping_node_test.py | 64 +++++++++++++++++-- 2 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/psyclone/psyir/nodes/scoping_node.py b/src/psyclone/psyir/nodes/scoping_node.py index 087b85fc2f..7c88bdb678 100644 --- a/src/psyclone/psyir/nodes/scoping_node.py +++ b/src/psyclone/psyir/nodes/scoping_node.py @@ -39,7 +39,7 @@ from psyclone.core import AccessType, Signature, VariablesAccessInfo from psyclone.psyir.nodes.node import Node from psyclone.psyir.symbols import ( - DataType, DataTypeSymbol, RoutineSymbol, StructureType, Symbol, + ArrayType, DataType, DataTypeSymbol, RoutineSymbol, StructureType, Symbol, SymbolError, SymbolTable) @@ -158,10 +158,10 @@ def _refine_copy(self, other): pass super(ScopingNode, self)._refine_copy(other) - # pylint: disable=protected-access # Add any routine tags back for tag in removed_tags.keys(): + # pylint: disable-next=protected-access self._symbol_table._tags[tag] = self._symbol_table.lookup( removed_tags[tag].name) @@ -193,20 +193,26 @@ def _get_accesses(dtype: DataType, info: VariablesAccessInfo): :param info: the VariablesAccessInfo instance in which to store information. ''' - if isinstance(dtype, DataTypeSymbol): - info.add_access(Signature(dtype.name), - AccessType.READ, self) - elif (hasattr(dtype, "precision") and - isinstance(dtype.precision, Symbol)): + if (hasattr(dtype, "precision") and isinstance(dtype.precision, + Symbol)): access_info.add_access( Signature(dtype.precision.name), AccessType.READ, self) + + if isinstance(dtype, DataTypeSymbol): + info.add_access(Signature(dtype.name), + AccessType.READ, self) elif isinstance(dtype, StructureType): - for cmpt in sym.datatype.components: + for cmpt in sym.datatype.components.values(): # Recurse for members of a StructureType _get_accesses(cmpt.datatype, info) if cmpt.initial_value: cmpt.initial_value.reference_accesses(info) + elif isinstance(dtype, ArrayType): + for dim in dtype.shape: + if isinstance(dim, ArrayType.ArrayBounds): + dim.lower.reference_accesses(access_info) + dim.upper.reference_accesses(access_info) # Examine the datatypes and initial values of all DataSymbols. for sym in self._symbol_table.datasymbols: @@ -215,6 +221,10 @@ def _get_accesses(dtype: DataType, info: VariablesAccessInfo): if sym.initial_value: sym.initial_value.reference_accesses(access_info) + # Examine the definition of each DataTypeSymbol. + for sym in self._symbol_table.datatypesymbols: + _get_accesses(sym.datatype, access_info) + super().reference_accesses(access_info) def replace_symbols_using(self, table): diff --git a/src/psyclone/tests/psyir/nodes/scoping_node_test.py b/src/psyclone/tests/psyir/nodes/scoping_node_test.py index 1f4ea1dcb4..b19bf01efd 100644 --- a/src/psyclone/tests/psyir/nodes/scoping_node_test.py +++ b/src/psyclone/tests/psyir/nodes/scoping_node_test.py @@ -42,8 +42,8 @@ Schedule, Assignment, Reference, Container, IntrinsicCall, Loop, Literal, Routine, ArrayReference) from psyclone.psyir.symbols import ( - DataSymbol, ArrayType, INTEGER_TYPE, - ArgumentInterface, ScalarType, SymbolTable, REAL_TYPE) + ArrayType, ArgumentInterface, DataSymbol, DataTypeSymbol, INTEGER_TYPE, + ScalarType, StructureType, Symbol, SymbolTable, REAL_TYPE) from psyclone.tests.utilities import Compile @@ -304,11 +304,65 @@ def test_scoping_node_reference_accesses(): int_type = ScalarType(ScalarType.Intrinsic.INTEGER, idef) var2 = table.new_symbol("var2", symbol_type=DataSymbol, datatype=INTEGER_TYPE, + is_constant=True, initial_value=Literal("100", int_type)) vai2 = VariablesAccessInfo() sched.reference_accesses(vai2) assert len(vai2.all_signatures) == 2 assert Signature("i_def") in vai2.all_signatures - # A StructureType. - # stype = StructureType.create() - # Dimensions of an ArrayType. + + +def test_reference_accesses_struct(): + '''Test reference_accesses() when the associated SymbolTable contains + a StructureType. + + ''' + sched = Schedule() + table = sched.symbol_table + idef = table.new_symbol("i_def", symbol_type=DataSymbol, + datatype=INTEGER_TYPE) + rdef = table.new_symbol("r_def", symbol_type=DataSymbol, + datatype=INTEGER_TYPE) + int_type = ScalarType(ScalarType.Intrinsic.INTEGER, idef) + real_type = ScalarType(ScalarType.Intrinsic.INTEGER, rdef) + stype = StructureType.create([ + ("iflag", int_type, Symbol.Visibility.PRIVATE, None), + ("rmask", real_type, Symbol.Visibility.PUBLIC, + Literal("100", real_type))]) + ssym = DataTypeSymbol("my_type", stype) + table.add(ssym) + vai3 = VariablesAccessInfo() + sched.reference_accesses(vai3) + assert len(vai3.all_signatures) == 2 + assert Signature("i_def") in vai3.all_signatures + assert Signature("r_def") in vai3.all_signatures + table.new_symbol("var4", symbol_type=DataSymbol, datatype=ssym) + vai4 = VariablesAccessInfo() + sched.reference_accesses(vai4) + + +def test_reference_accesses_array(): + '''Test reference_accesses() with the associated SymbolTable contains + an array with dimensions that make reference to another Symbol. + + ''' + sched = Schedule() + table = sched.symbol_table + idef = table.new_symbol("i_def", symbol_type=DataSymbol, + datatype=INTEGER_TYPE) + rdef = table.new_symbol("r_def", symbol_type=DataSymbol, + datatype=INTEGER_TYPE) + int_type = ScalarType(ScalarType.Intrinsic.INTEGER, idef) + real_type = ScalarType(ScalarType.Intrinsic.REAL, rdef) + var2 = table.new_symbol("var2", symbol_type=DataSymbol, + datatype=INTEGER_TYPE, + is_constant=True, + initial_value=Literal("100", int_type)) + atype = ArrayType(real_type, [Reference(var2)]) + var3 = table.new_symbol("var3", symbol_type=DataSymbol, + datatype=atype) + vai = VariablesAccessInfo() + sched.reference_accesses(vai) + assert Signature("i_def") in vai.all_signatures + assert Signature("r_def") in vai.all_signatures + assert Signature("var2") in vai.all_signatures From d1127e8513e331a1804c5fcf1d3abce0abbc9e67 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 12 Dec 2024 20:55:56 +0000 Subject: [PATCH 07/58] #2271 fix all tests --- .../lfric/lfric_extract_driver_creator.py | 10 +++++++ .../tests/core/variables_access_info_test.py | 29 ++++++++++--------- src/psyclone/tests/dependency_test.py | 7 +++-- .../kernel_module_inline_trans_test.py | 5 ++++ .../tests/domain/lfric/lfric_builtins_test.py | 7 +++-- 5 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/psyclone/domain/lfric/lfric_extract_driver_creator.py b/src/psyclone/domain/lfric/lfric_extract_driver_creator.py index 328f515149..630e6b3e11 100644 --- a/src/psyclone/domain/lfric/lfric_extract_driver_creator.py +++ b/src/psyclone/domain/lfric/lfric_extract_driver_creator.py @@ -574,6 +574,11 @@ def _sym_is_field(sym): read_var = f"{psy_data.name}%ReadVariable" mod_man = ModuleManager.get() + # Construct a set of the names of all LFRic kind parameters. + const = LFRicConstants() + all_kind_names = set( + [val["kind"] for val in const.DATA_TYPE_MAP.values()]) + # First handle variables that are read: # ------------------------------------- for module_name, signature in read_write_info.read_list: @@ -583,6 +588,11 @@ def _sym_is_field(sym): # variables have References, and will already have been declared # in the symbol table (in _add_all_kernel_symbols). sig_str = self._flatten_signature(signature) + + # Work-around for the fact that we want to exclude kind parameters. + if sig_str in all_kind_names: + continue + if module_name: mod_info = mod_man.get_module_info(module_name) orig_sym = mod_info.get_symbol(signature[0]) diff --git a/src/psyclone/tests/core/variables_access_info_test.py b/src/psyclone/tests/core/variables_access_info_test.py index d3246a244a..321873c709 100644 --- a/src/psyclone/tests/core/variables_access_info_test.py +++ b/src/psyclone/tests/core/variables_access_info_test.py @@ -450,11 +450,12 @@ def test_variables_access_info_domain_loop(): ''' psy, invoke = get_invoke("25.1_kern_two_domain.f90", "lfric", idx=0) vai = VariablesAccessInfo(invoke.schedule) - assert str(vai) == ("a: READ, b: READ, f1_data: READWRITE, f2_data: " - "READWRITE, field_type: READ, map_w3: READ, " - "mesh_type: READ, ncell_2d_no_halos: READ, " - "ndf_w3: READ, nlayers_f1: READ, nlayers_f2: READ, " - "undf_w3: READ") + assert str(vai) == ( + "a: READ, b: READ, f1_data: READWRITE, f2_data: " + "READWRITE, field_type: READ, i_def: READ, " + "map_w3: READ, mesh_type: READ, ncell_2d_no_halos: " + "READ, ndf_w3: READ, nlayers_f1: READ, nlayers_f2: READ, " + "r_def: READ, undf_w3: READ") # ----------------------------------------------------------------------------- @@ -470,12 +471,12 @@ def test_lfric_access_info(): # Make sure a literal (1.0_r_def in this example) is not reported as a # variable in the access list: - assert ("basis_w1_qr: READ, basis_w3_qr: READ, cell: READ+WRITE, " - "diff_basis_w2_qr: READ, diff_basis_w3_qr: READ, f1_data: " - "READ+WRITE, f2_data: READ, field_type: READ, loop0_start: READ, " - "loop0_stop: READ, m1_data: READ, m2_data: READ, map_w1: READ, " - "map_w2: READ, map_w3: READ, ndf_w1: READ, ndf_w2: READ, " - "ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, np_z_qr: READ, " - "undf_w1: READ, undf_w2: READ, undf_w3: READ, weights_xy_qr: READ," - " weights_z_qr: READ" - == str(vai)) + assert ( + "basis_w1_qr: READ, basis_w3_qr: READ, cell: READ+WRITE, " + "diff_basis_w2_qr: READ, diff_basis_w3_qr: READ, f1_data: " + "READ+WRITE, f2_data: READ, field_type: READ, i_def: READ, " + "loop0_start: READ, loop0_stop: READ, m1_data: READ, m2_data: READ, " + "map_w1: READ, map_w2: READ, map_w3: READ, ndf_w1: READ, " + "ndf_w2: READ, ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, " + "np_z_qr: READ, undf_w1: READ, undf_w2: READ, undf_w3: READ, " + "weights_xy_qr: READ, weights_z_qr: READ" == str(vai)) diff --git a/src/psyclone/tests/dependency_test.py b/src/psyclone/tests/dependency_test.py index c7019dd85d..1eab3ac912 100644 --- a/src/psyclone/tests/dependency_test.py +++ b/src/psyclone/tests/dependency_test.py @@ -291,10 +291,11 @@ def test_lfric(): var_accesses = VariablesAccessInfo(schedule) assert str(var_accesses) == ( "a: READ, cell: READ+WRITE, f1_data: READ+WRITE, f2_data: READ, " - "field_type: READ, loop0_start: READ, loop0_stop: READ, m1_data: READ," - " m2_data: READ, map_w1: READ, map_w2: READ, " + "field_type: READ, i_def: READ, loop0_start: READ, loop0_stop: READ, " + "m1_data: READ, m2_data: READ, map_w1: READ, map_w2: READ, " "map_w3: READ, ndf_w1: READ, ndf_w2: READ, ndf_w3: READ, " - "nlayers_f1: READ, undf_w1: READ, undf_w2: READ, undf_w3: READ") + "nlayers_f1: READ, r_def: READ, undf_w1: READ, undf_w2: READ, " + "undf_w3: READ") def test_lfric_kern_cma_args(): diff --git a/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py b/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py index 54c584ae4e..da146468e9 100644 --- a/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py +++ b/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py @@ -179,6 +179,11 @@ def test_validate_no_inline_global_var(parser): block = CodeBlock([stmt], CodeBlock.Structure.STATEMENT) kernels[0].get_kernel_schedule().pop_all_children() kernels[0].get_kernel_schedule().addchild(block) + table = kernels[0].get_kernel_schedule().symbol_table + # Remove symbols that refer to 'go_wp' in outer scope. + table._symbols.pop("field_old") + table._symbols.pop("field_new") + table._symbols.pop("field") with pytest.raises(TransformationError) as err: inline_trans.validate(kernels[0]) assert ("Kernel 'kernel_with_global_code' contains accesses to 'unknown' " diff --git a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py index 182a275059..b8d39513c6 100644 --- a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py +++ b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py @@ -2141,6 +2141,7 @@ def test_field_access_info_for_arrays_in_builtins(): assert Signature("f2_data") in vai - assert ("a: READ, df: READ+WRITE, f1_data: READ, f2_data: WRITE, " - "field_type: READ, loop0_start: READ, loop0_stop: READ" == - str(vai)) + assert ( + "a: READ, df: READ+WRITE, f1_data: READ, f2_data: WRITE, " + "field_type: READ, i_def: READ, loop0_start: READ, loop0_stop: READ, " + "r_def: READ" == str(vai)) From 0b1d39893e494c7f018483c93921659d1ce53f3b Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 12 Dec 2024 20:59:07 +0000 Subject: [PATCH 08/58] #2271 fix linting --- .../tests/psyir/nodes/scoping_node_test.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/psyclone/tests/psyir/nodes/scoping_node_test.py b/src/psyclone/tests/psyir/nodes/scoping_node_test.py index b19bf01efd..f70dd2dc84 100644 --- a/src/psyclone/tests/psyir/nodes/scoping_node_test.py +++ b/src/psyclone/tests/psyir/nodes/scoping_node_test.py @@ -39,7 +39,7 @@ import pytest from psyclone.core import Signature, VariablesAccessInfo from psyclone.psyir.nodes import ( - Schedule, Assignment, Reference, Container, IntrinsicCall, Loop, Literal, + Schedule, Assignment, Reference, Container, Loop, Literal, Routine, ArrayReference) from psyclone.psyir.symbols import ( ArrayType, ArgumentInterface, DataSymbol, DataTypeSymbol, INTEGER_TYPE, @@ -295,17 +295,17 @@ def test_scoping_node_reference_accesses(): assert not vai.all_signatures # Add another Symbol that references the first one in its precision. new_type = ScalarType(ScalarType.Intrinsic.REAL, prsym) - var1 = table.new_symbol("var1", symbol_type=DataSymbol, datatype=new_type) + _ = table.new_symbol("var1", symbol_type=DataSymbol, datatype=new_type) sched.reference_accesses(vai) assert vai.all_signatures == [Signature("r_def")] # Add a Symbol with initialisation. idef = table.new_symbol("i_def", symbol_type=DataSymbol, datatype=INTEGER_TYPE) int_type = ScalarType(ScalarType.Intrinsic.INTEGER, idef) - var2 = table.new_symbol("var2", symbol_type=DataSymbol, - datatype=INTEGER_TYPE, - is_constant=True, - initial_value=Literal("100", int_type)) + _ = table.new_symbol("var2", symbol_type=DataSymbol, + datatype=INTEGER_TYPE, + is_constant=True, + initial_value=Literal("100", int_type)) vai2 = VariablesAccessInfo() sched.reference_accesses(vai2) assert len(vai2.all_signatures) == 2 @@ -355,12 +355,10 @@ def test_reference_accesses_array(): int_type = ScalarType(ScalarType.Intrinsic.INTEGER, idef) real_type = ScalarType(ScalarType.Intrinsic.REAL, rdef) var2 = table.new_symbol("var2", symbol_type=DataSymbol, - datatype=INTEGER_TYPE, - is_constant=True, + datatype=INTEGER_TYPE, is_constant=True, initial_value=Literal("100", int_type)) atype = ArrayType(real_type, [Reference(var2)]) - var3 = table.new_symbol("var3", symbol_type=DataSymbol, - datatype=atype) + _ = table.new_symbol("var3", symbol_type=DataSymbol, datatype=atype) vai = VariablesAccessInfo() sched.reference_accesses(vai) assert Signature("i_def") in vai.all_signatures From 4651016c0f0ccb9ea5af61753bb1d44a26252756 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 13 Dec 2024 08:30:49 +0000 Subject: [PATCH 09/58] #2271 update docstring --- src/psyclone/psyir/nodes/scoping_node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/psyclone/psyir/nodes/scoping_node.py b/src/psyclone/psyir/nodes/scoping_node.py index 7c88bdb678..372d64246e 100644 --- a/src/psyclone/psyir/nodes/scoping_node.py +++ b/src/psyclone/psyir/nodes/scoping_node.py @@ -177,7 +177,7 @@ def reference_accesses(self, access_info: VariablesAccessInfo): ''' Get all variable access information. This specialisation is required to query the SymbolTable associated with a Scoping node and ensure - that any Symbols appearing in precision specifications or + that any Symbols appearing in precision specifications, array shapes or initialisation expressions are captured. :param var_accesses: VariablesAccessInfo instance that stores the From d8e639b27d5e5637e4f14863b41a5718e4da7654 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Tue, 17 Dec 2024 11:19:57 +0000 Subject: [PATCH 10/58] #2271 add new AccessType.CALL and use to distinguish symbols that are called --- src/psyclone/core/access_type.py | 27 +++++++++------- .../core/single_variable_access_info.py | 31 ++++++++++++++---- src/psyclone/core/variables_access_info.py | 16 +++++++--- src/psyclone/psyir/nodes/call.py | 21 +++++++----- src/psyclone/psyir/nodes/directive.py | 4 +++ src/psyclone/psyir/tools/call_tree_utils.py | 3 +- src/psyclone/tests/core/access_type_test.py | 3 +- src/psyclone/tests/psyir/nodes/call_test.py | 32 ++++++++++++++++++- 8 files changed, 103 insertions(+), 34 deletions(-) diff --git a/src/psyclone/core/access_type.py b/src/psyclone/core/access_type.py index 7dc2e41239..c665c663ac 100644 --- a/src/psyclone/core/access_type.py +++ b/src/psyclone/core/access_type.py @@ -37,7 +37,6 @@ '''This module implements the AccessType used throughout PSyclone.''' -from __future__ import print_function, absolute_import from enum import Enum from psyclone.configuration import Config @@ -55,36 +54,40 @@ class AccessType(Enum): # This is used internally to indicate unknown access type of # a variable, e.g. when a variable is passed to a subroutine # and the access type of this variable in the subroutine - # is unknown + # is unknown. UNKNOWN = 7 + # A symbol representing a routine is called. + CALL = 8 def __str__(self): '''Convert to a string representation, returning just the - enum (e.g. 'WRITE').. - :return: API name for this string. - :rtype: str + enum (e.g. 'WRITE'). ''' # pylint complains without str() that the return type is not a str return str(self.name) - def api_specific_name(self): + def api_specific_name(self) -> str: '''This convenience function returns the name of the type in the - current API. E.g. in a lfric API, WRITE --> "gh_write" + current API. E.g. in the lfric API, WRITE --> "gh_write". If no + mapping is available then the generic name is returned. + :returns: The API specific name. - :rtype: str ''' api_config = Config.get().api_conf() rev_access_mapping = api_config.get_reverse_access_mapping() - return rev_access_mapping[self] + return rev_access_mapping.get(self, str(self).lower()) @staticmethod - def from_string(access_string): + def from_string(access_string: str): '''Convert a string (e.g. "read") into the corresponding AccessType enum value (AccessType.READ). - :param str access_string: Access type as string. + :param access_string: Access type as a string. + :returns: Corresponding AccessType enum. - :Raises: ValueError if access_string is not a valid access type. + :rtype: :py:class:`psyclone.core.access_type.AccessType` + + :raises: ValueError if access_string is not a valid access type. ''' for access in AccessType: if access.name == access_string.upper(): diff --git a/src/psyclone/core/single_variable_access_info.py b/src/psyclone/core/single_variable_access_info.py index d58efa6edb..573dce3fb0 100644 --- a/src/psyclone/core/single_variable_access_info.py +++ b/src/psyclone/core/single_variable_access_info.py @@ -208,6 +208,14 @@ def var_name(self): ''' return str(self._signature) + def is_called(self) -> bool: + ''' + :returns: whether or not any accesses of this variable + represent a call. + ''' + return any(info.access_type == AccessType.CALL for + info in self._accesses) + def is_written(self): ''':returns: True if this variable is written (at least once). :rtype: bool @@ -226,21 +234,30 @@ def is_written_first(self): return len(self._accesses) > 0 and \ (self._accesses[0].access_type == AccessType.WRITE) - def is_read_only(self): + def is_read_only(self, include_calls: bool = False) -> bool: '''Checks if this variable is always read, and never written. + :param include_calls: whether to consider Calls as READs. + :returns: True if this variable is read only. - :rtype: bool ''' - return all(access_info.access_type == AccessType.READ + read_accesses = [AccessType.READ] + if include_calls: + read_accesses.append(AccessType.CALL) + return all(access_info.access_type in read_accesses for access_info in self._accesses) - def is_read(self): - ''':returns: True if this variable is read (at least once). - :rtype: bool + def is_read(self, include_calls: bool = False) -> bool: + ''' + :param include_calls: whether to consider Calls as READs. + + :returns: True if this variable is read (at least once). ''' - return any(access_info.access_type in AccessType.all_read_accesses() + read_accesses = AccessType.all_read_accesses() + if include_calls: + read_accesses.append(AccessType.CALL) + return any(access_info.access_type in read_accesses for access_info in self._accesses) def has_read_write(self): diff --git a/src/psyclone/core/variables_access_info.py b/src/psyclone/core/variables_access_info.py index 11f3b0188a..de164ccae5 100644 --- a/src/psyclone/core/variables_access_info.py +++ b/src/psyclone/core/variables_access_info.py @@ -319,6 +319,14 @@ def merge(self, other_access_info): # locations just merged in self._location = self._location + max_new_location + def is_called(self, signature: Signature) -> bool: + ''' + :param signature: signature of the variable. + + :returns: True if the specified variable is called at least once. + ''' + return self[signature].is_called() + def is_written(self, signature): '''Checks if the specified variable signature is at least written once. @@ -336,20 +344,20 @@ def is_written(self, signature): var_access_info = self[signature] return var_access_info.is_written() - def is_read(self, signature): + def is_read(self, signature, include_calls=False) -> bool: '''Checks if the specified variable signature is at least read once. :param signature: signature of the variable :type signature: :py:class:`psyclone.core.Signature` + :param include_calls: whether to consider CALL accesses as reads. - :returns: True if the specified variable name is read (at least \ + :returns: True if the specified variable name is read (at least once). - :rtype: bool :raises: KeyError if the signature cannot be found.''' var_access_info = self[signature] - return var_access_info.is_read() + return var_access_info.is_read(include_calls=include_calls) def has_read_write(self, signature): '''Checks if the specified variable signature has at least one diff --git a/src/psyclone/psyir/nodes/call.py b/src/psyclone/psyir/nodes/call.py index 589150e823..be5274001f 100644 --- a/src/psyclone/psyir/nodes/call.py +++ b/src/psyclone/psyir/nodes/call.py @@ -39,7 +39,7 @@ from collections.abc import Iterable from psyclone.configuration import Config -from psyclone.core import AccessType +from psyclone.core import AccessType, Signature from psyclone.errors import GenerationError from psyclone.psyir.nodes.container import Container from psyclone.psyir.nodes.statement import Statement @@ -315,10 +315,14 @@ def reference_accesses(self, var_accesses): # We conservatively default to READWRITE otherwise (TODO #446). default_access = AccessType.READWRITE - # TODO #2271: This may skip references in inner expressions of - # structure calls, but to implement properly we new a new kind of - # AccessType that represents being called (USED but not READ, maybe - # the same that we need for INQUIRY type attributes?) + # The RoutineSymbol has a CALL access. + sig, indices_list = self.routine.get_signature_and_indices() + var_accesses.add_access(sig, AccessType.CALL, self.routine) + # Any symbols referenced in any index expressions are READ. + for indices in indices_list: + for idx in indices: + idx.reference_accesses(var_accesses) + for arg in self.arguments: if isinstance(arg, Reference): # This argument is pass-by-reference. @@ -373,12 +377,13 @@ def is_elemental(self): @property def is_pure(self): ''' - :returns: whether the routine being called is pure (guaranteed to \ - return the same result when provided with the same argument \ + :returns: whether the routine being called is pure (guaranteed to + return the same result when provided with the same argument values). If this information is not known then it returns None. :rtype: NoneType | bool ''' - if self.routine and self.routine.symbol: + if (self.routine and self.routine.symbol and + isinstance(self.routine.symbol, RoutineSymbol)): return self.routine.symbol.is_pure return None diff --git a/src/psyclone/psyir/nodes/directive.py b/src/psyclone/psyir/nodes/directive.py index e9bb6c5f41..193ee6d7aa 100644 --- a/src/psyclone/psyir/nodes/directive.py +++ b/src/psyclone/psyir/nodes/directive.py @@ -105,6 +105,10 @@ def create_data_movement_deep_copy_refs(self): node = vinfo.all_accesses[0].node sym = table.lookup(sig.var_name) + if var_info.is_called(sig): + # Ignore accesses that are calls. + continue + if isinstance(sym.datatype, ScalarType): # We ignore scalars as these are typically copied by value. continue diff --git a/src/psyclone/psyir/tools/call_tree_utils.py b/src/psyclone/psyir/tools/call_tree_utils.py index a5aca9ebda..b8b36e8089 100644 --- a/src/psyclone/psyir/tools/call_tree_utils.py +++ b/src/psyclone/psyir/tools/call_tree_utils.py @@ -192,7 +192,8 @@ def get_input_parameters(self, read_write_info, node_list, # parameter and does not need to be saved. Note that loop variables # have a WRITE before a READ access, so they will be ignored # automatically. - if not variables_info[signature].is_written_first(): + if (not variables_info[signature].is_written_first() and + not variables_info[signature].is_called()): read_write_info.add_read(signature) # ------------------------------------------------------------------------- diff --git a/src/psyclone/tests/core/access_type_test.py b/src/psyclone/tests/core/access_type_test.py index 4987568c9c..dd4833258b 100644 --- a/src/psyclone/tests/core/access_type_test.py +++ b/src/psyclone/tests/core/access_type_test.py @@ -36,7 +36,6 @@ '''This module tests AccessType.''' -from __future__ import absolute_import import pytest from psyclone.configuration import Config from psyclone.core.access_type import AccessType @@ -51,6 +50,7 @@ def test_str(): assert str(AccessType.INC) == "INC" assert str(AccessType.READINC) == "READINC" assert str(AccessType.SUM) == "SUM" + assert str(AccessType.CALL) == "CALL" def test_api_specific_name(): @@ -65,6 +65,7 @@ def test_api_specific_name(): assert AccessType.INC.api_specific_name() == "gh_inc" assert AccessType.READINC.api_specific_name() == "gh_readinc" assert AccessType.SUM.api_specific_name() == "gh_sum" + assert AccessType.CALL.api_specific_name() == "call" assert AccessType.get_valid_reduction_modes() == [AccessType.SUM] assert AccessType.get_valid_reduction_names() == ["gh_sum"] # Use set to make this independent of the order: diff --git a/src/psyclone/tests/psyir/nodes/call_test.py b/src/psyclone/tests/psyir/nodes/call_test.py index bb1203a094..402ab558f3 100644 --- a/src/psyclone/tests/psyir/nodes/call_test.py +++ b/src/psyclone/tests/psyir/nodes/call_test.py @@ -379,12 +379,17 @@ def test_call_reference_accesses(): call1.reference_accesses(var_info) # Check that the current location number is increased after the call: assert var_info._location == 1 - assert not var_info.all_signatures + # The Routine symbol is not considered 'read' by default. + assert not var_info.is_read(Signature("trillian")) + # But it is if we include CALL accesses. + assert var_info.is_read(Signature("trillian"), include_calls=True) + assert var_info.is_called(Signature("trillian")) dsym = DataSymbol("beta", INTEGER_TYPE) # Simple argument passed by reference. call2 = Call.create(rsym, [Reference(dsym)]) call2.reference_accesses(var_info) assert var_info.has_read_write(Signature("beta")) + assert not var_info.is_called(Signature("beta")) # Array access argument. The array should be READWRITE, any variable in # the index expression should be READ. idx_sym = DataSymbol("ji", INTEGER_TYPE) @@ -418,6 +423,31 @@ def test_call_reference_accesses(): assert not var_info.is_written(Signature("beta")) +def test_type_bound_call_reference_accesses(fortran_reader): + '''Test the reference_accesses() method for a call to a type-bound + procedure.''' + code = '''\ + subroutine my_sub + use some_mod, only: my_grid + integer :: i, j, k + call my_grid(k)%update(i,j) + end subroutine my_sub + ''' + psyir = fortran_reader.psyir_from_source(code) + call = psyir.walk(Call)[0] + vai = VariablesAccessInfo() + call.reference_accesses(vai) + # The type-bound procedure is called. + assert vai.is_called(Signature("my_grid%update")) + # All of the indices are marked as read. + for var in ["i", "j", "k"]: + assert vai.is_read(Signature(var)) + # Only the arguments to the call are marked as read-write. + assert vai.has_read_write(Signature("i")) + assert vai.has_read_write(Signature("j")) + assert not vai.has_read_write(Signature("k")) + + def test_call_argumentnames_after_removearg(): '''Test the argument_names property makes things consistent if a child argument is removed. This is used transparently by the class to From f031e6546978b91e63f96fba57c6e48c16baf673 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Tue, 17 Dec 2024 11:24:06 +0000 Subject: [PATCH 11/58] #2271 fix flake8 --- src/psyclone/psyir/nodes/call.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/psyclone/psyir/nodes/call.py b/src/psyclone/psyir/nodes/call.py index be5274001f..46ae696cf6 100644 --- a/src/psyclone/psyir/nodes/call.py +++ b/src/psyclone/psyir/nodes/call.py @@ -39,7 +39,7 @@ from collections.abc import Iterable from psyclone.configuration import Config -from psyclone.core import AccessType, Signature +from psyclone.core import AccessType from psyclone.errors import GenerationError from psyclone.psyir.nodes.container import Container from psyclone.psyir.nodes.statement import Statement From 300c5636bf9427726a4c336d0c35784cc7389650 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Tue, 17 Dec 2024 13:41:45 +0000 Subject: [PATCH 12/58] #2271 rm include_calls argument --- src/psyclone/core/single_variable_access_info.py | 15 +++------------ src/psyclone/core/variables_access_info.py | 5 ++--- src/psyclone/tests/psyir/nodes/call_test.py | 4 +--- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/psyclone/core/single_variable_access_info.py b/src/psyclone/core/single_variable_access_info.py index 573dce3fb0..5f8c61d063 100644 --- a/src/psyclone/core/single_variable_access_info.py +++ b/src/psyclone/core/single_variable_access_info.py @@ -234,29 +234,20 @@ def is_written_first(self): return len(self._accesses) > 0 and \ (self._accesses[0].access_type == AccessType.WRITE) - def is_read_only(self, include_calls: bool = False) -> bool: + def is_read_only(self) -> bool: '''Checks if this variable is always read, and never written. - :param include_calls: whether to consider Calls as READs. - :returns: True if this variable is read only. ''' - read_accesses = [AccessType.READ] - if include_calls: - read_accesses.append(AccessType.CALL) - return all(access_info.access_type in read_accesses + return all(access_info.access_type == AccessType.READ for access_info in self._accesses) - def is_read(self, include_calls: bool = False) -> bool: + def is_read(self) -> bool: ''' - :param include_calls: whether to consider Calls as READs. - :returns: True if this variable is read (at least once). ''' read_accesses = AccessType.all_read_accesses() - if include_calls: - read_accesses.append(AccessType.CALL) return any(access_info.access_type in read_accesses for access_info in self._accesses) diff --git a/src/psyclone/core/variables_access_info.py b/src/psyclone/core/variables_access_info.py index de164ccae5..5f3d5b7d8a 100644 --- a/src/psyclone/core/variables_access_info.py +++ b/src/psyclone/core/variables_access_info.py @@ -344,12 +344,11 @@ def is_written(self, signature): var_access_info = self[signature] return var_access_info.is_written() - def is_read(self, signature, include_calls=False) -> bool: + def is_read(self, signature) -> bool: '''Checks if the specified variable signature is at least read once. :param signature: signature of the variable :type signature: :py:class:`psyclone.core.Signature` - :param include_calls: whether to consider CALL accesses as reads. :returns: True if the specified variable name is read (at least once). @@ -357,7 +356,7 @@ def is_read(self, signature, include_calls=False) -> bool: :raises: KeyError if the signature cannot be found.''' var_access_info = self[signature] - return var_access_info.is_read(include_calls=include_calls) + return var_access_info.is_read() def has_read_write(self, signature): '''Checks if the specified variable signature has at least one diff --git a/src/psyclone/tests/psyir/nodes/call_test.py b/src/psyclone/tests/psyir/nodes/call_test.py index 402ab558f3..4a96a38cd8 100644 --- a/src/psyclone/tests/psyir/nodes/call_test.py +++ b/src/psyclone/tests/psyir/nodes/call_test.py @@ -379,10 +379,8 @@ def test_call_reference_accesses(): call1.reference_accesses(var_info) # Check that the current location number is increased after the call: assert var_info._location == 1 - # The Routine symbol is not considered 'read' by default. + # The Routine symbol is not considered 'read'. assert not var_info.is_read(Signature("trillian")) - # But it is if we include CALL accesses. - assert var_info.is_read(Signature("trillian"), include_calls=True) assert var_info.is_called(Signature("trillian")) dsym = DataSymbol("beta", INTEGER_TYPE) # Simple argument passed by reference. From 0d4846ca3301b77a9a832da66fb0611357b960a2 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 19 Dec 2024 19:16:51 +0000 Subject: [PATCH 13/58] #2825 add COMPILE_TIME and INQUIRY AccessTypes. Remove special option from VariablesAccessInfo --- src/psyclone/core/access_type.py | 15 +++++++++++ .../core/single_variable_access_info.py | 16 ++++++++++++ src/psyclone/core/variables_access_info.py | 22 +++++++++++----- .../lfric/lfric_extract_driver_creator.py | 9 ------- src/psyclone/psyir/nodes/intrinsic_call.py | 26 ++++++++++--------- src/psyclone/psyir/nodes/literal.py | 2 +- src/psyclone/psyir/nodes/scoping_node.py | 8 ++++-- src/psyclone/psyir/tools/call_tree_utils.py | 9 ++----- src/psyclone/tests/core/access_type_test.py | 2 ++ .../tests/psyir/nodes/scoping_node_test.py | 3 +++ 10 files changed, 75 insertions(+), 37 deletions(-) diff --git a/src/psyclone/core/access_type.py b/src/psyclone/core/access_type.py index c665c663ac..5a6d07f2e8 100644 --- a/src/psyclone/core/access_type.py +++ b/src/psyclone/core/access_type.py @@ -58,6 +58,12 @@ class AccessType(Enum): UNKNOWN = 7 # A symbol representing a routine is called. CALL = 8 + # The property/ies of a symbol is/are queried but the data it + # represents is not accessed (e.g. 'var' in SIZE(var, dim=1)). + INQUIRY = 9 + # The symbol is only accessed at compile time - e.g. precision + # of a literal or a type definition. + COMPILE_TIME = 10 def __str__(self): '''Convert to a string representation, returning just the @@ -131,6 +137,15 @@ def get_valid_reduction_names(): return [access.api_specific_name() for access in AccessType.get_valid_reduction_modes()] + @staticmethod + def non_data_accesses(): + ''' + :returns: all access types that do not touch any data associated with + a symbol. + :rtype: list[:py:class:`psyclone.core.AccessType`] + ''' + return [AccessType.CALL, AccessType.COMPILE_TIME, AccessType.INQUIRY] + # ---------- Documentation utils -------------------------------------------- # # The list of module members that we wish AutoAPI to generate diff --git a/src/psyclone/core/single_variable_access_info.py b/src/psyclone/core/single_variable_access_info.py index 5f8c61d063..8aaf8ae3a0 100644 --- a/src/psyclone/core/single_variable_access_info.py +++ b/src/psyclone/core/single_variable_access_info.py @@ -216,6 +216,14 @@ def is_called(self) -> bool: return any(info.access_type == AccessType.CALL for info in self._accesses) + def is_queried(self) -> bool: + ''' + :returns: whether or not there are any queries/use of the *properties* + of this variable. + ''' + return any(info.access_type == AccessType.INQUIRY for + info in self._accesses) + def is_written(self): ''':returns: True if this variable is written (at least once). :rtype: bool @@ -260,6 +268,14 @@ def has_read_write(self): return any(access_info.access_type == AccessType.READWRITE for access_info in self._accesses) + def has_data_access(self): + ''' + ''' + for info in self._accesses: + if info.access_type not in AccessType.non_data_accesses(): + return True + return False + def __getitem__(self, index): ''':return: the access information for the specified index. :rtype: py:class:`psyclone.core.AccessInfo` diff --git a/src/psyclone/core/variables_access_info.py b/src/psyclone/core/variables_access_info.py index 5f3d5b7d8a..b9ed0eabe3 100644 --- a/src/psyclone/core/variables_access_info.py +++ b/src/psyclone/core/variables_access_info.py @@ -40,6 +40,8 @@ '''This module provides management of variable access information.''' +from typing import List + from psyclone.core.component_indices import ComponentIndices from psyclone.core.signature import Signature from psyclone.core.single_variable_access_info import SingleVariableAccessInfo @@ -81,14 +83,10 @@ class VariablesAccessInfo(dict): # List of valid options and their default values. Note that only the # options method checks this, since it is convenient to pass in options # from the DependencyTools that might contain options for these tools. - # COLLECT-ARRAY-SHAPE-READS: controls if access to the shape of an array - # (e.g. ``ubound(a)`` are reported as read or not at all. Defaults - # to True. # USE-ORIGINAL-NAMES: if set this will report the original names of any # symbol that is being renamed (``use mod, renamed_a=>a``). Defaults # to False. - _DEFAULT_OPTIONS = {"COLLECT-ARRAY-SHAPE-READS": False, - "USE-ORIGINAL-NAMES": False} + _DEFAULT_OPTIONS = {"USE-ORIGINAL-NAMES": False} def __init__(self, nodes=None, options=None): # This dictionary stores the mapping of signatures to the @@ -277,12 +275,24 @@ def add_access(self, signature, access_type, node, component_indices=None): def all_signatures(self): ''':returns: all signatures contained in this instance, sorted (in \ order to make test results reproducible). - :rtype: List[:py:class:`psyclone.core.signature`] + :rtype: List[:py:class:`psyclone.core.Signature`] ''' list_of_vars = list(self.keys()) list_of_vars.sort() return list_of_vars + @property + def all_data_accesses(self) -> List[Signature]: + ''' + :returns: all Signatures in this instance that have a data access (i.e. + the data associated with them is read or written). + ''' + result = [] + for sig in self.all_signatures: + if self[sig].has_data_access(): + result.append(sig) + return result + def merge(self, other_access_info): '''Merges data from a VariablesAccessInfo instance to the information in this instance. diff --git a/src/psyclone/domain/lfric/lfric_extract_driver_creator.py b/src/psyclone/domain/lfric/lfric_extract_driver_creator.py index 630e6b3e11..06b6d6e660 100644 --- a/src/psyclone/domain/lfric/lfric_extract_driver_creator.py +++ b/src/psyclone/domain/lfric/lfric_extract_driver_creator.py @@ -574,11 +574,6 @@ def _sym_is_field(sym): read_var = f"{psy_data.name}%ReadVariable" mod_man = ModuleManager.get() - # Construct a set of the names of all LFRic kind parameters. - const = LFRicConstants() - all_kind_names = set( - [val["kind"] for val in const.DATA_TYPE_MAP.values()]) - # First handle variables that are read: # ------------------------------------- for module_name, signature in read_write_info.read_list: @@ -589,10 +584,6 @@ def _sym_is_field(sym): # in the symbol table (in _add_all_kernel_symbols). sig_str = self._flatten_signature(signature) - # Work-around for the fact that we want to exclude kind parameters. - if sig_str in all_kind_names: - continue - if module_name: mod_info = mod_man.get_module_info(module_name) orig_sym = mod_info.get_symbol(signature[0]) diff --git a/src/psyclone/psyir/nodes/intrinsic_call.py b/src/psyclone/psyir/nodes/intrinsic_call.py index 22c68d966b..25bf16e2b6 100644 --- a/src/psyclone/psyir/nodes/intrinsic_call.py +++ b/src/psyclone/psyir/nodes/intrinsic_call.py @@ -905,25 +905,27 @@ def create(cls, intrinsic, arguments=()): def reference_accesses(self, var_accesses): '''Get all reference access information from this node. - If the 'COLLECT-ARRAY-SHAPE-READS' options is set, it will report array - accesses used as first parameter in 'inquiry intrinsics' like - `lbound`, `ubound`, or `size` as 'read' accesses. + + Any variables used as the first argument to 'inquiry intrinsics' like + `lbound`, `ubound`, or `size` are marked as having INQUIRY accesses. :param var_accesses: VariablesAccessInfo instance that stores the information about variable accesses. :type var_accesses: :py:class:`psyclone.core.VariablesAccessInfo` ''' - if (self.intrinsic.is_inquiry and not - var_accesses.options("COLLECT-ARRAY-SHAPE-READS")): + if self.intrinsic.is_inquiry and isinstance(self.arguments[0], + Reference): # If this is an inquiry access (which doesn't actually access the - # value) and we haven't explicitly requested them, ignore the - # inquired variables, which are always the first argument. - for child in self.arguments[1:]: - child.reference_accesses(var_accesses) - else: - for child in self.arguments: - child.reference_accesses(var_accesses) + # value) then make sure we use the correct access type for the + # inquired variable, which is always the first argument. + var_accesses.add_access(Signature(self.arguments[0]), + AccessType.INQUIRY, self) + elif self.arguments: + self.arguments[0].reference_accesses(var_accesses) + + for child in self.arguments[1:]: + child.reference_accesses(var_accesses) # TODO #2102: Maybe the three properties below can be removed if intrinsic # is a symbol, as they would act as the super() implementation. diff --git a/src/psyclone/psyir/nodes/literal.py b/src/psyclone/psyir/nodes/literal.py index f5c881b089..652ccfb0ed 100644 --- a/src/psyclone/psyir/nodes/literal.py +++ b/src/psyclone/psyir/nodes/literal.py @@ -182,7 +182,7 @@ def reference_accesses(self, access_info: VariablesAccessInfo): ''' if isinstance(self.datatype.precision, Symbol): access_info.add_access(Signature(self.datatype.precision.name), - AccessType.READ, self) + AccessType.COMPILE_TIME, self) def replace_symbols_using(self, table): ''' diff --git a/src/psyclone/psyir/nodes/scoping_node.py b/src/psyclone/psyir/nodes/scoping_node.py index 372d64246e..437a8f8819 100644 --- a/src/psyclone/psyir/nodes/scoping_node.py +++ b/src/psyclone/psyir/nodes/scoping_node.py @@ -195,13 +195,17 @@ def _get_accesses(dtype: DataType, info: VariablesAccessInfo): ''' if (hasattr(dtype, "precision") and isinstance(dtype.precision, Symbol)): + # The use of a Symbol to specify precision does not constitute + # a read (since it is resolved at compile time). access_info.add_access( Signature(dtype.precision.name), - AccessType.READ, self) + AccessType.COMPILE_TIME, self) if isinstance(dtype, DataTypeSymbol): + # The use of a DataTypeSymbol in a declaration is a compile- + # time access. info.add_access(Signature(dtype.name), - AccessType.READ, self) + AccessType.COMPILE_TIME, self) elif isinstance(dtype, StructureType): for cmpt in sym.datatype.components.values(): # Recurse for members of a StructureType diff --git a/src/psyclone/psyir/tools/call_tree_utils.py b/src/psyclone/psyir/tools/call_tree_utils.py index b8b36e8089..3e47378b7a 100644 --- a/src/psyclone/psyir/tools/call_tree_utils.py +++ b/src/psyclone/psyir/tools/call_tree_utils.py @@ -177,23 +177,18 @@ def get_input_parameters(self, read_write_info, node_list, which will also be used when creating the VariablesAccessInfo instance if required. :type param: Optional[dict[str, Any]] - :param Any options["COLLECT-ARRAY-SHAPE-READS"]: if this option is - set to a True value, arrays used as first parameter to the - PSyIR operators lbound, ubound, or size will be reported as - 'read'. Otherwise, these accesses will be ignored. ''' # Collect the information about all variables used: if not variables_info: variables_info = VariablesAccessInfo(node_list, options=options) - for signature in variables_info.all_signatures: + for signature in variables_info.all_data_accesses: # If the first access is a write, the variable is not an input # parameter and does not need to be saved. Note that loop variables # have a WRITE before a READ access, so they will be ignored # automatically. - if (not variables_info[signature].is_written_first() and - not variables_info[signature].is_called()): + if not variables_info[signature].is_written_first(): read_write_info.add_read(signature) # ------------------------------------------------------------------------- diff --git a/src/psyclone/tests/core/access_type_test.py b/src/psyclone/tests/core/access_type_test.py index dd4833258b..2fcf424fc9 100644 --- a/src/psyclone/tests/core/access_type_test.py +++ b/src/psyclone/tests/core/access_type_test.py @@ -51,6 +51,7 @@ def test_str(): assert str(AccessType.READINC) == "READINC" assert str(AccessType.SUM) == "SUM" assert str(AccessType.CALL) == "CALL" + assert str(AccessType.INQUIRY) == "INQUIRY" def test_api_specific_name(): @@ -66,6 +67,7 @@ def test_api_specific_name(): assert AccessType.READINC.api_specific_name() == "gh_readinc" assert AccessType.SUM.api_specific_name() == "gh_sum" assert AccessType.CALL.api_specific_name() == "call" + assert AccessType.INQUIRY.api_specific_name() == "inquiry" assert AccessType.get_valid_reduction_modes() == [AccessType.SUM] assert AccessType.get_valid_reduction_names() == ["gh_sum"] # Use set to make this independent of the order: diff --git a/src/psyclone/tests/psyir/nodes/scoping_node_test.py b/src/psyclone/tests/psyir/nodes/scoping_node_test.py index f70dd2dc84..4811d2960f 100644 --- a/src/psyclone/tests/psyir/nodes/scoping_node_test.py +++ b/src/psyclone/tests/psyir/nodes/scoping_node_test.py @@ -298,6 +298,8 @@ def test_scoping_node_reference_accesses(): _ = table.new_symbol("var1", symbol_type=DataSymbol, datatype=new_type) sched.reference_accesses(vai) assert vai.all_signatures == [Signature("r_def")] + assert not vai[Signature("r_def")].is_queried() + assert not vai[Signature("r_def")].has_data_access() # Add a Symbol with initialisation. idef = table.new_symbol("i_def", symbol_type=DataSymbol, datatype=INTEGER_TYPE) @@ -310,6 +312,7 @@ def test_scoping_node_reference_accesses(): sched.reference_accesses(vai2) assert len(vai2.all_signatures) == 2 assert Signature("i_def") in vai2.all_signatures + assert not vai2[Signature("i_def")].has_data_access() def test_reference_accesses_struct(): From 26eabf567cfea9a1388dcbf428ab1c3a08cb9b50 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 19 Dec 2024 19:18:30 +0000 Subject: [PATCH 14/58] #2271 fix linting --- src/psyclone/psyir/nodes/intrinsic_call.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/psyclone/psyir/nodes/intrinsic_call.py b/src/psyclone/psyir/nodes/intrinsic_call.py index 25bf16e2b6..9195c17085 100644 --- a/src/psyclone/psyir/nodes/intrinsic_call.py +++ b/src/psyclone/psyir/nodes/intrinsic_call.py @@ -42,6 +42,7 @@ from collections.abc import Iterable from enum import Enum +from psyclone.core import AccessType, Signature from psyclone.psyir.nodes.call import Call from psyclone.psyir.nodes.datanode import DataNode from psyclone.psyir.nodes.literal import Literal From 5a7671eb22363832d703c75b199b2be95b3b7198 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 20 Dec 2024 15:28:16 +0000 Subject: [PATCH 15/58] #2271 work through implications of adding various inquiry access types instead of marking everything READ --- .../core/single_variable_access_info.py | 64 +++++++++++++------ src/psyclone/core/variables_access_info.py | 3 + .../transformations/gocean_extract_trans.py | 3 +- src/psyclone/psyir/nodes/directive.py | 4 +- src/psyclone/psyir/nodes/extract_node.py | 7 +- src/psyclone/psyir/nodes/intrinsic_call.py | 7 +- .../psyir/nodes/read_only_verify_node.py | 3 +- src/psyclone/psyir/tools/call_tree_utils.py | 27 ++++---- src/psyclone/psyir/tools/dependency_tools.py | 3 + .../tests/core/variables_access_info_test.py | 43 ++++--------- src/psyclone/tests/dependency_test.py | 8 +-- .../tests/domain/lfric/lfric_builtins_test.py | 4 +- .../tests/psyir/nodes/intrinsic_call_test.py | 13 ++-- .../tests/psyir/tools/call_tree_utils_test.py | 7 +- .../psyir/tools/dependency_tools_test.py | 17 +++-- .../transformations/psy_data_trans_test.py | 14 ---- 16 files changed, 119 insertions(+), 108 deletions(-) diff --git a/src/psyclone/core/single_variable_access_info.py b/src/psyclone/core/single_variable_access_info.py index 8aaf8ae3a0..0c42cdbf53 100644 --- a/src/psyclone/core/single_variable_access_info.py +++ b/src/psyclone/core/single_variable_access_info.py @@ -152,6 +152,14 @@ def access_type(self): :rtype: :py:class:`psyclone.core.access_type.AccessType`''' return self._access_type + @property + def is_data_access(self) -> bool: + ''' + :returns: whether or not this access is to the data associated with + a signature (i.e. is not just an inquiry-type access). + ''' + return self._access_type not in AccessType.non_data_accesses() + @property def location(self): ''':returns: the location information for this access.\ @@ -232,15 +240,19 @@ def is_written(self): AccessType.all_write_accesses() for access_info in self._accesses) - def is_written_first(self): - ''':returns: True if this variable is written in the first access \ - (which indicates that this variable is not an input variable \ + def is_written_first(self) -> bool: + ''':returns: True if this variable is written in the first data access + (which indicates that this variable is not an input variable for a kernel). - - :rtype: bool ''' - return len(self._accesses) > 0 and \ - (self._accesses[0].access_type == AccessType.WRITE) + for acc in self._accesses: + if acc.access_type in AccessType.non_data_accesses(): + continue + if acc.access_type != AccessType.WRITE: + return False + return True + return False + def is_read_only(self) -> bool: '''Checks if this variable is always read, and never @@ -248,7 +260,8 @@ def is_read_only(self) -> bool: :returns: True if this variable is read only. ''' - return all(access_info.access_type == AccessType.READ + access_types = AccessType.non_data_accesses() + [AccessType.READ] + return all(access_info.access_type in access_types for access_info in self._accesses) def is_read(self) -> bool: @@ -268,8 +281,10 @@ def has_read_write(self): return any(access_info.access_type == AccessType.READWRITE for access_info in self._accesses) - def has_data_access(self): + def has_data_access(self) -> bool: ''' + :returns: True if there is an access of the data associated with this + signature (as opposed to a call or an inquiry), False otherwise. ''' for info in self._accesses: if info.access_type not in AccessType.non_data_accesses(): @@ -334,19 +349,30 @@ def change_read_to_write(self): This function is then called to change the assigned-to variable on the LHS to from READ to WRITE. Since the LHS is stored in a separate SingleVariableAccessInfo class, it is guaranteed that there is only - one entry for the variable. + one READ entry for the variable (although there maybe INQUIRY accesses + for array bounds). + + :raises InternalError: if there is an access that is not READ or + INQUIRY or there is > 1 READ access. ''' - if len(self._accesses) != 1: - raise InternalError(f"Variable '{self._signature}' had " - f"{len(self._accesses)} accesses listed, " - "not one in change_read_to_write.") + read_count = 0 + for acc in self._accesses: - if self._accesses[0].access_type != AccessType.READ: - raise InternalError(f"Trying to change variable " - f"'{self._signature}' to 'WRITE' " - "which does not have 'READ' access.") + if acc.access_type == AccessType.READ: + acc.change_read_to_write() + read_count += 1 + + elif acc.access_type not in AccessType.non_data_accesses(): + raise InternalError( + f"Variable '{self._signature}' has a '{acc.access_type}' " + f"access. change_read_to_write() expects only inquiry " + f"accesses and a single read access.") + + if read_count != 1: + raise InternalError( + f"Trying to change variable '{self._signature}' to 'WRITE' but" + f" it has {read_count} 'READ' access (expected exactly 1).") - self._accesses[0].change_read_to_write() def is_array(self, index_variable=None): '''Checks if the variable is used as an array, i.e. if it has diff --git a/src/psyclone/core/variables_access_info.py b/src/psyclone/core/variables_access_info.py index b9ed0eabe3..144da02d58 100644 --- a/src/psyclone/core/variables_access_info.py +++ b/src/psyclone/core/variables_access_info.py @@ -157,6 +157,9 @@ def __str__(self): mode = "READ" elif self.is_written(signature): mode = "WRITE" + else: + # The data associated with this signature is not accessed. + mode = "INQUIRY" output_list.append(f"{signature}: {mode}") return ", ".join(output_list) diff --git a/src/psyclone/domain/gocean/transformations/gocean_extract_trans.py b/src/psyclone/domain/gocean/transformations/gocean_extract_trans.py index 941579cc57..33cc7efddc 100644 --- a/src/psyclone/domain/gocean/transformations/gocean_extract_trans.py +++ b/src/psyclone/domain/gocean/transformations/gocean_extract_trans.py @@ -161,7 +161,8 @@ def apply(self, nodes, options=None): my_options["region_name"] = region_name my_options["prefix"] = my_options.get("prefix", "extract") - read_write_info = ctu.get_in_out_parameters(nodes, options=my_options) + read_write_info = ctu.get_in_out_parameters( + nodes, include_non_data_accesses=True) # Determine a unique postfix to be used for output variables # that avoid any name clashes postfix = ExtractTrans.determine_postfix(read_write_info, diff --git a/src/psyclone/psyir/nodes/directive.py b/src/psyclone/psyir/nodes/directive.py index 193ee6d7aa..2beae9fb91 100644 --- a/src/psyclone/psyir/nodes/directive.py +++ b/src/psyclone/psyir/nodes/directive.py @@ -105,8 +105,8 @@ def create_data_movement_deep_copy_refs(self): node = vinfo.all_accesses[0].node sym = table.lookup(sig.var_name) - if var_info.is_called(sig): - # Ignore accesses that are calls. + if not vinfo.has_data_access(): + # Ignore references that don't correspond to data accesses. continue if isinstance(sym.datatype, ScalarType): diff --git a/src/psyclone/psyir/nodes/extract_node.py b/src/psyclone/psyir/nodes/extract_node.py index 8c28e777ce..1640d7f06b 100644 --- a/src/psyclone/psyir/nodes/extract_node.py +++ b/src/psyclone/psyir/nodes/extract_node.py @@ -171,8 +171,7 @@ def gen_code(self, parent): from psyclone.psyir.tools.call_tree_utils import CallTreeUtils # Determine the variables to write: ctu = CallTreeUtils() - self._read_write_info = \ - ctu.get_in_out_parameters(self, options=self.options) + self._read_write_info = ctu.get_in_out_parameters(self) options = {'pre_var_list': self._read_write_info.read_list, 'post_var_list': self._read_write_info.write_list, @@ -209,8 +208,8 @@ def lower_to_language_level(self): from psyclone.psyir.tools.call_tree_utils import CallTreeUtils # Determine the variables to write: ctu = CallTreeUtils() - self._read_write_info = \ - ctu.get_in_out_parameters(self, options=self.options) + self._read_write_info = ctu.get_in_out_parameters( + self, include_non_data_accesses=True) options = {'pre_var_list': self._read_write_info.read_list, 'post_var_list': self._read_write_info.write_list, diff --git a/src/psyclone/psyir/nodes/intrinsic_call.py b/src/psyclone/psyir/nodes/intrinsic_call.py index 9195c17085..1468a5aca8 100644 --- a/src/psyclone/psyir/nodes/intrinsic_call.py +++ b/src/psyclone/psyir/nodes/intrinsic_call.py @@ -920,8 +920,11 @@ def reference_accesses(self, var_accesses): # If this is an inquiry access (which doesn't actually access the # value) then make sure we use the correct access type for the # inquired variable, which is always the first argument. - var_accesses.add_access(Signature(self.arguments[0]), - AccessType.INQUIRY, self) + sig, indices = self.arguments[0].get_signature_and_indices() + var_accesses.add_access(sig, AccessType.INQUIRY, self.arguments[0]) + for idx_list in indices: + for idx in idx_list: + idx.reference_accesses(var_accesses) elif self.arguments: self.arguments[0].reference_accesses(var_accesses) diff --git a/src/psyclone/psyir/nodes/read_only_verify_node.py b/src/psyclone/psyir/nodes/read_only_verify_node.py index dc07b38003..2531e78232 100644 --- a/src/psyclone/psyir/nodes/read_only_verify_node.py +++ b/src/psyclone/psyir/nodes/read_only_verify_node.py @@ -89,7 +89,8 @@ def lower_to_language_level(self): from psyclone.psyir.tools import ReadWriteInfo ctu = CallTreeUtils() read_write_info = ReadWriteInfo() - ctu.get_input_parameters(read_write_info, self, options=self.options) + ctu.get_input_parameters(read_write_info, self, + include_non_data_accesses=True) options = {'pre_var_list': read_write_info.read_list, 'post_var_list': read_write_info.read_list} diff --git a/src/psyclone/psyir/tools/call_tree_utils.py b/src/psyclone/psyir/tools/call_tree_utils.py index 3e47378b7a..34304d7807 100644 --- a/src/psyclone/psyir/tools/call_tree_utils.py +++ b/src/psyclone/psyir/tools/call_tree_utils.py @@ -160,7 +160,8 @@ def _compute_all_non_locals(self, routine): # ------------------------------------------------------------------------- def get_input_parameters(self, read_write_info, node_list, - variables_info=None, options=None): + variables_info=None, + include_non_data_accesses=False): '''Adds all variables that are input parameters (i.e. are read before potentially being written) to the read_write_info object. @@ -173,22 +174,24 @@ def get_input_parameters(self, read_write_info, node_list, can be used to avoid repeatedly collecting this information. :type variables_info: :py:class:`psyclone.core.variables_info.VariablesAccessInfo` - :param options: a dictionary with options for the CallTreeUtils - which will also be used when creating the VariablesAccessInfo - instance if required. - :type param: Optional[dict[str, Any]] ''' # Collect the information about all variables used: if not variables_info: - variables_info = VariablesAccessInfo(node_list, options=options) + variables_info = VariablesAccessInfo(node_list) + + if include_non_data_accesses: + all_accesses = variables_info.all_signatures + else: + all_accesses = variables_info.all_data_accesses - for signature in variables_info.all_data_accesses: + for signature in all_accesses: # If the first access is a write, the variable is not an input # parameter and does not need to be saved. Note that loop variables # have a WRITE before a READ access, so they will be ignored # automatically. - if not variables_info[signature].is_written_first(): + if (variables_info[signature].is_read_only() or + not variables_info[signature].is_written_first()): read_write_info.add_read(signature) # ------------------------------------------------------------------------- @@ -226,7 +229,7 @@ def get_output_parameters(self, read_write_info, node_list, # ------------------------------------------------------------------------- def get_in_out_parameters(self, node_list, collect_non_local_symbols=False, - options=None): + include_non_data_accesses=False): '''Returns a ReadWriteInfo object that contains all variables that are input and output parameters to the specified node list. This function calls `get_input_parameter` and `get_output_parameter`, but avoids the @@ -260,9 +263,11 @@ def get_in_out_parameters(self, node_list, collect_non_local_symbols=False, :rtype: :py:class:`psyclone.psyir.tools.ReadWriteInfo` ''' - variables_info = VariablesAccessInfo(node_list, options=options) + variables_info = VariablesAccessInfo(node_list) read_write_info = ReadWriteInfo() - self.get_input_parameters(read_write_info, node_list, variables_info) + self.get_input_parameters( + read_write_info, node_list, variables_info, + include_non_data_accesses=include_non_data_accesses) self.get_output_parameters(read_write_info, node_list, variables_info) if collect_non_local_symbols: self.get_non_local_read_write_info(node_list, read_write_info) diff --git a/src/psyclone/psyir/tools/dependency_tools.py b/src/psyclone/psyir/tools/dependency_tools.py index 5bc9002485..8b8f3a608d 100644 --- a/src/psyclone/psyir/tools/dependency_tools.py +++ b/src/psyclone/psyir/tools/dependency_tools.py @@ -610,6 +610,9 @@ def _array_access_parallelisable(self, loop_variables, var_info): # including itself (to detect write-write race conditions: # a((i-2)**2) = b(i): i=1 and i=3 would write to a(1)) for other_access in var_info: + if not other_access.is_data_access: + # Not a data access so can ignore. + continue if not self._is_loop_carried_dependency(loop_variables, write_access, other_access): diff --git a/src/psyclone/tests/core/variables_access_info_test.py b/src/psyclone/tests/core/variables_access_info_test.py index 321873c709..f43111e4e0 100644 --- a/src/psyclone/tests/core/variables_access_info_test.py +++ b/src/psyclone/tests/core/variables_access_info_test.py @@ -388,33 +388,24 @@ def test_variables_access_info_options(): '''Test handling of options for VariablesAccessInfo. ''' vai = VariablesAccessInfo() - assert vai.options("COLLECT-ARRAY-SHAPE-READS") is False assert vai.options("USE-ORIGINAL-NAMES") is False - vai = VariablesAccessInfo(options={'COLLECT-ARRAY-SHAPE-READS': True}) - assert vai.options("COLLECT-ARRAY-SHAPE-READS") is True - assert vai.options("USE-ORIGINAL-NAMES") is False - assert vai.options() == {"COLLECT-ARRAY-SHAPE-READS": True, - "USE-ORIGINAL-NAMES": False} - vai = VariablesAccessInfo(options={'USE-ORIGINAL-NAMES': True}) - assert vai.options("COLLECT-ARRAY-SHAPE-READS") is False assert vai.options("USE-ORIGINAL-NAMES") is True - assert vai.options() == {"COLLECT-ARRAY-SHAPE-READS": False, - "USE-ORIGINAL-NAMES": True} + assert vai.options() == {"USE-ORIGINAL-NAMES": True} with pytest.raises(InternalError) as err: vai.options("invalid") assert ("Option key 'invalid' is invalid, it must be one of " - "['COLLECT-ARRAY-SHAPE-READS', 'USE-ORIGINAL-NAMES']." - in str(err.value)) + "['USE-ORIGINAL-NAMES']." in str(err.value)) # ----------------------------------------------------------------------------- @pytest.mark.parametrize("function", ["size", "lbound", "ubound"]) def test_variables_access_info_shape_bounds(fortran_reader, function): - '''Test that access to an array using shape, or lbound/ubound can be - disables using options + '''Test that access to an array using shape, or lbound/ubound is marked + as 'inquiry'. + ''' code = f'''module test contains @@ -427,19 +418,9 @@ def test_variables_access_info_shape_bounds(fortran_reader, function): psyir = fortran_reader.psyir_from_source(code) node1 = psyir.walk(Assignment)[0] - # By default, array shape accesses are not reads. + # Array-shape accesses are 'inquiry' vai = VariablesAccessInfo(node1) - assert str(vai) == "n: WRITE" - - # Check that explicitly disabling array shape reads works: - vai = VariablesAccessInfo(node1, - options={"COLLECT-ARRAY-SHAPE-READS": False}) - assert str(vai) == "n: WRITE" - - # Check that we can enable collection of array shape reads: - vai = VariablesAccessInfo(node1, - options={"COLLECT-ARRAY-SHAPE-READS": True}) - assert str(vai) == "a: READ, n: WRITE" + assert str(vai) == "a: INQUIRY, n: WRITE" # ----------------------------------------------------------------------------- @@ -452,10 +433,10 @@ def test_variables_access_info_domain_loop(): vai = VariablesAccessInfo(invoke.schedule) assert str(vai) == ( "a: READ, b: READ, f1_data: READWRITE, f2_data: " - "READWRITE, field_type: READ, i_def: READ, " - "map_w3: READ, mesh_type: READ, ncell_2d_no_halos: " + "READWRITE, field_type: INQUIRY, i_def: INQUIRY, " + "map_w3: READ, mesh_type: INQUIRY, ncell_2d_no_halos: " "READ, ndf_w3: READ, nlayers_f1: READ, nlayers_f2: READ, " - "r_def: READ, undf_w3: READ") + "r_def: INQUIRY, undf_w3: READ") # ----------------------------------------------------------------------------- @@ -470,11 +451,11 @@ def test_lfric_access_info(): vai = VariablesAccessInfo(schedule) # Make sure a literal (1.0_r_def in this example) is not reported as a - # variable in the access list: + # variable in the access list (but that the precision is): assert ( "basis_w1_qr: READ, basis_w3_qr: READ, cell: READ+WRITE, " "diff_basis_w2_qr: READ, diff_basis_w3_qr: READ, f1_data: " - "READ+WRITE, f2_data: READ, field_type: READ, i_def: READ, " + "READ+WRITE, f2_data: READ, field_type: INQUIRY, i_def: INQUIRY, " "loop0_start: READ, loop0_stop: READ, m1_data: READ, m2_data: READ, " "map_w1: READ, map_w2: READ, map_w3: READ, ndf_w1: READ, " "ndf_w2: READ, ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, " diff --git a/src/psyclone/tests/dependency_test.py b/src/psyclone/tests/dependency_test.py index 1eab3ac912..e984348d8d 100644 --- a/src/psyclone/tests/dependency_test.py +++ b/src/psyclone/tests/dependency_test.py @@ -291,10 +291,10 @@ def test_lfric(): var_accesses = VariablesAccessInfo(schedule) assert str(var_accesses) == ( "a: READ, cell: READ+WRITE, f1_data: READ+WRITE, f2_data: READ, " - "field_type: READ, i_def: READ, loop0_start: READ, loop0_stop: READ, " - "m1_data: READ, m2_data: READ, map_w1: READ, map_w2: READ, " - "map_w3: READ, ndf_w1: READ, ndf_w2: READ, ndf_w3: READ, " - "nlayers_f1: READ, r_def: READ, undf_w1: READ, undf_w2: READ, " + "field_type: INQUIRY, i_def: INQUIRY, loop0_start: READ, " + "loop0_stop: READ, m1_data: READ, m2_data: READ, map_w1: READ, " + "map_w2: READ, map_w3: READ, ndf_w1: READ, ndf_w2: READ, ndf_w3: READ," + " nlayers_f1: READ, r_def: INQUIRY, undf_w1: READ, undf_w2: READ, " "undf_w3: READ") diff --git a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py index b8d39513c6..f655deb65f 100644 --- a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py +++ b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py @@ -2143,5 +2143,5 @@ def test_field_access_info_for_arrays_in_builtins(): assert ( "a: READ, df: READ+WRITE, f1_data: READ, f2_data: WRITE, " - "field_type: READ, i_def: READ, loop0_start: READ, loop0_stop: READ, " - "r_def: READ" == str(vai)) + "field_type: INQUIRY, i_def: INQUIRY, loop0_start: READ, " + "loop0_stop: READ, r_def: INQUIRY" == str(vai)) diff --git a/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py b/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py index 38e16131f7..899c6adcb8 100644 --- a/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py +++ b/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py @@ -418,7 +418,7 @@ def test_reference_accesses_bounds(operator, fortran_reader): '''Test that the reference_accesses method behaves as expected when the reference is the first argument to either the lbound or ubound intrinsic as that is simply looking up the array bounds (therefore - var_access_info should be empty) and when the reference is the + the access is an enquiry) and when the reference is the second argument of either the lbound or ubound intrinsic (in which case the access should be a read). @@ -434,15 +434,10 @@ def test_reference_accesses_bounds(operator, fortran_reader): psyir = fortran_reader.psyir_from_source(code) schedule = psyir.walk(Assignment)[0] - # By default, the access to 'a' should not be reported as read, - # but the access to b must be reported: + # The access to 'a' should be reported as inquiry as its actual data + # is not accessed. vai = VariablesAccessInfo(schedule) - assert str(vai) == "b: READ, n: WRITE" - - # When explicitly requested, the access to 'a' should be reported: - vai = VariablesAccessInfo(schedule, - options={"COLLECT-ARRAY-SHAPE-READS": True}) - assert str(vai) == "a: READ, b: READ, n: WRITE" + assert str(vai) == "a: INQUIRY, b: READ, n: WRITE" def test_enumerator_name_matches_name_field(): diff --git a/src/psyclone/tests/psyir/tools/call_tree_utils_test.py b/src/psyclone/tests/psyir/tools/call_tree_utils_test.py index 6e94154088..b51bb81ad9 100644 --- a/src/psyclone/tests/psyir/tools/call_tree_utils_test.py +++ b/src/psyclone/tests/psyir/tools/call_tree_utils_test.py @@ -565,14 +565,13 @@ def test_call_tree_utils_inout_parameters_generic(fortran_reader): # inside the ubound/lbound function calls. read_write_info = ReadWriteInfo() ctu.get_input_parameters(read_write_info, loops, - options={'COLLECT-ARRAY-SHAPE-READS': True}) + include_non_data_accesses=True) input_set = set(sig for _, sig in read_write_info.set_of_all_used_vars) assert input_set == set([Signature("b"), Signature("c"), Signature("jpj"), Signature("dummy")]) - read_write_info = ctu.\ - get_in_out_parameters(loops, - options={'COLLECT-ARRAY-SHAPE-READS': True}) + read_write_info = ctu.get_in_out_parameters(loops, + include_non_data_accesses=True) output_set = set(read_write_info.signatures_read) assert output_set == set([Signature("b"), Signature("c"), Signature("jpj"), Signature("dummy")]) diff --git a/src/psyclone/tests/psyir/tools/dependency_tools_test.py b/src/psyclone/tests/psyir/tools/dependency_tools_test.py index dfcee2268c..32cb0caedd 100644 --- a/src/psyclone/tests/psyir/tools/dependency_tools_test.py +++ b/src/psyclone/tests/psyir/tools/dependency_tools_test.py @@ -39,7 +39,7 @@ import pytest from psyclone.configuration import Config -from psyclone.core import Signature, VariablesAccessInfo +from psyclone.core import AccessType, Signature, VariablesAccessInfo from psyclone.errors import InternalError from psyclone.psyir.nodes import Loop from psyclone.psyir.tools import DependencyTools, DTCode @@ -356,9 +356,18 @@ def test_array_access_pairs_1_var(lhs, rhs, distance, fortran_reader): assign = psyir.children[0].children[0] sig = Signature("a1") - # Get all access info for the expression to 'a1' - access_info_lhs = VariablesAccessInfo(assign.lhs)[sig][0] - access_info_rhs = VariablesAccessInfo(assign.rhs)[sig][0] + # Get the READ access to 'a1' for expression (this is complicated by the + # presence of 'inquiry' accesses for the array bounds in some cases). + a1vinfo = VariablesAccessInfo(assign.lhs)[sig] + for access in a1vinfo.all_accesses: + if access.access_type == AccessType.READ: + access_info_lhs = access + break + a1vinfo_rh = VariablesAccessInfo(assign.rhs)[sig] + for access in a1vinfo.all_accesses: + if access.access_type == AccessType.READ: + access_info_rhs = access + break subscript_lhs = access_info_lhs.component_indices[(0, 0)] subscript_rhs = access_info_rhs.component_indices[(0, 0)] diff --git a/src/psyclone/tests/psyir/transformations/psy_data_trans_test.py b/src/psyclone/tests/psyir/transformations/psy_data_trans_test.py index 2d372c1e6a..8fa2d9e6dd 100644 --- a/src/psyclone/tests/psyir/transformations/psy_data_trans_test.py +++ b/src/psyclone/tests/psyir/transformations/psy_data_trans_test.py @@ -200,21 +200,7 @@ def test_trans_with_shape_function(monkeypatch, fortran_reader, config = Config.get() monkeypatch.setattr(config, "distributed_memory", False) - psyir_copy = psyir.copy() transformation.apply(loop) out = fortran_writer(psyir) assert 'PreDeclareVariable("dummy", dummy)' in out assert 'ProvideVariable("dummy", dummy)' in out - - # Now check that the user can overwrite 'COLLECT-ARRAY-SHAPE-READS' - # ================================================================= - # Since the original tree was modified, we now use the copy: - - loop = psyir_copy.children[0].children[0] - # Disable array-shape-reads, which means 'dummy' should then not - # be in the list of input parameters anymore, and therefore - transformation.apply(loop, options={"COLLECT-ARRAY-SHAPE-READS": False}) - out = fortran_writer(psyir_copy) - # No reference to 'dummy' should be in the created code: - assert 'PreDeclareVariable("dummy", dummy)' not in out - assert 'ProvideVariable("dummy", dummy)' not in out From 7991f62ad0ecf8598700e7c2a8db2ba950b5cc5d Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 20 Dec 2024 16:09:24 +0000 Subject: [PATCH 16/58] #2271 fix remaining test failures --- src/psyclone/tests/psyir/tools/dependency_tools_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/psyclone/tests/psyir/tools/dependency_tools_test.py b/src/psyclone/tests/psyir/tools/dependency_tools_test.py index 32cb0caedd..a1a0abc1e9 100644 --- a/src/psyclone/tests/psyir/tools/dependency_tools_test.py +++ b/src/psyclone/tests/psyir/tools/dependency_tools_test.py @@ -364,7 +364,7 @@ def test_array_access_pairs_1_var(lhs, rhs, distance, fortran_reader): access_info_lhs = access break a1vinfo_rh = VariablesAccessInfo(assign.rhs)[sig] - for access in a1vinfo.all_accesses: + for access in a1vinfo_rh.all_accesses: if access.access_type == AccessType.READ: access_info_rhs = access break From c55c45ec8a92f4752b854a1137ebc99ac3a21d2e Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 20 Dec 2024 16:15:10 +0000 Subject: [PATCH 17/58] #2271 fixes for linting --- src/psyclone/core/single_variable_access_info.py | 5 +---- src/psyclone/psyir/nodes/intrinsic_call.py | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/psyclone/core/single_variable_access_info.py b/src/psyclone/core/single_variable_access_info.py index 0c42cdbf53..cd22ab0283 100644 --- a/src/psyclone/core/single_variable_access_info.py +++ b/src/psyclone/core/single_variable_access_info.py @@ -253,10 +253,8 @@ def is_written_first(self) -> bool: return True return False - def is_read_only(self) -> bool: - '''Checks if this variable is always read, and never - written. + '''Checks if this variable is always read, and never written. :returns: True if this variable is read only. ''' @@ -373,7 +371,6 @@ def change_read_to_write(self): f"Trying to change variable '{self._signature}' to 'WRITE' but" f" it has {read_count} 'READ' access (expected exactly 1).") - def is_array(self, index_variable=None): '''Checks if the variable is used as an array, i.e. if it has an index expression. If the optional `index_variable` is specified, diff --git a/src/psyclone/psyir/nodes/intrinsic_call.py b/src/psyclone/psyir/nodes/intrinsic_call.py index 1468a5aca8..7779e8e8ac 100644 --- a/src/psyclone/psyir/nodes/intrinsic_call.py +++ b/src/psyclone/psyir/nodes/intrinsic_call.py @@ -42,7 +42,7 @@ from collections.abc import Iterable from enum import Enum -from psyclone.core import AccessType, Signature +from psyclone.core import AccessType from psyclone.psyir.nodes.call import Call from psyclone.psyir.nodes.datanode import DataNode from psyclone.psyir.nodes.literal import Literal From b5684516bccdfd8166117c1f345e9c02f741e904 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 20 Dec 2024 17:26:12 +0000 Subject: [PATCH 18/58] #2271 fix implementation and test of change_read_to_write() --- .../core/single_variable_access_info.py | 16 ++++++---- .../core/single_variable_access_info_test.py | 29 ++++++++++--------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/psyclone/core/single_variable_access_info.py b/src/psyclone/core/single_variable_access_info.py index cd22ab0283..2723c52bcf 100644 --- a/src/psyclone/core/single_variable_access_info.py +++ b/src/psyclone/core/single_variable_access_info.py @@ -353,23 +353,27 @@ def change_read_to_write(self): :raises InternalError: if there is an access that is not READ or INQUIRY or there is > 1 READ access. ''' - read_count = 0 + read_access = None for acc in self._accesses: if acc.access_type == AccessType.READ: - acc.change_read_to_write() - read_count += 1 + if read_access: + raise InternalError( + f"Trying to change variable '{self._signature}' to " + f"'WRITE' but it has more than one 'READ' access.") + read_access = acc elif acc.access_type not in AccessType.non_data_accesses(): raise InternalError( f"Variable '{self._signature}' has a '{acc.access_type}' " f"access. change_read_to_write() expects only inquiry " - f"accesses and a single read access.") + f"accesses and a single 'READ' access.") - if read_count != 1: + if not read_access: raise InternalError( f"Trying to change variable '{self._signature}' to 'WRITE' but" - f" it has {read_count} 'READ' access (expected exactly 1).") + f" it does not have a 'READ' access.") + read_access.change_read_to_write() def is_array(self, index_variable=None): '''Checks if the variable is used as an array, i.e. if it has diff --git a/src/psyclone/tests/core/single_variable_access_info_test.py b/src/psyclone/tests/core/single_variable_access_info_test.py index 7a45ab524b..45f6caa23b 100644 --- a/src/psyclone/tests/core/single_variable_access_info_test.py +++ b/src/psyclone/tests/core/single_variable_access_info_test.py @@ -132,12 +132,14 @@ def test_variable_access_info(): assert vai.all_write_accesses == [] assert vai.signature == Signature("var_name") + vai.add_access_with_location(AccessType.INQUIRY, 3, Node(), + component_indices=None) vai.add_access_with_location(AccessType.READ, 2, Node(), component_indices=None) - assert str(vai) == "var_name:READ(2)" + assert str(vai) == "var_name:INQUIRY(3),READ(2)" assert vai.is_read() assert vai.is_read_only() - assert vai.all_read_accesses == [vai[0]] + assert vai.all_read_accesses == [vai[1]] assert vai.all_write_accesses == [] assert not vai.is_written() assert not vai.is_written_first() @@ -147,34 +149,35 @@ def test_variable_access_info(): assert vai.is_written_first() assert not vai.is_read_only() assert vai.all_read_accesses == [] - assert vai.all_write_accesses == [vai[0]] + assert vai.all_write_accesses == [vai[1]] # Now we have one write access, which we should not be able to # change to write again: with pytest.raises(InternalError) as err: vai.change_read_to_write() - assert "Trying to change variable 'var_name' to 'WRITE' which "\ - "does not have 'READ' access." in str(err.value) + assert ("Variable 'var_name' has a 'WRITE' access. change_read_to_write() " + "expects only inquiry accesses and a single 'READ' access." + in str(err.value)) assert vai.all_accesses[0] == vai[0] with pytest.raises(IndexError) as err: - _ = vai[1] + _ = vai[2] - # Add a READ access - now we should not be able to - # change read to write anymore: + # Add a READ access - we should not be able to + # change this read to write as there's already a WRITE access. vai.add_access_with_location(AccessType.READ, 1, Node(), component_indices=None) with pytest.raises(InternalError) as err: vai.change_read_to_write() - assert "Variable 'var_name' had 2 accesses listed, "\ - "not one in change_read_to_write." in str(err.value) - + assert ("Variable 'var_name' has a 'WRITE' access. change_read_to_write() " + "expects only inquiry accesses and a single 'READ' access." + in str(err.value)) # And make sure the variable is not read_only if a write is added vai.add_access_with_location(AccessType.WRITE, 3, Node(), component_indices=None) assert vai.is_read_only() is False - assert vai.all_read_accesses == [vai[1]] - assert vai.all_write_accesses == [vai[0], vai[2]] + assert vai.all_read_accesses == [vai[2]] + assert vai.all_write_accesses == [vai[1], vai[3]] # ----------------------------------------------------------------------------- From bf242e6386083b7da678ad974406c2dc179b86ec Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 6 Jan 2025 14:51:42 +0000 Subject: [PATCH 19/58] #2271 improvements for review --- src/psyclone/core/access_type.py | 4 +- .../kernel_module_inline_trans.py | 12 ++-- src/psyclone/domain/lfric/arg_ordering.py | 3 + src/psyclone/psyir/nodes/call.py | 4 +- src/psyclone/psyir/nodes/codeblock.py | 16 ++++-- .../tests/core/variables_access_info_test.py | 9 +-- .../kernel_module_inline_trans_test.py | 56 +++++++++++++++++-- .../tests/nemo/test_files/imperfect_nest.f90 | 2 +- .../openacc/data_directive_test.py | 3 +- .../tests/psyir/nodes/codeblock_test.py | 9 ++- 10 files changed, 95 insertions(+), 23 deletions(-) diff --git a/src/psyclone/core/access_type.py b/src/psyclone/core/access_type.py index 5a6d07f2e8..ce7fc607ec 100644 --- a/src/psyclone/core/access_type.py +++ b/src/psyclone/core/access_type.py @@ -65,7 +65,7 @@ class AccessType(Enum): # of a literal or a type definition. COMPILE_TIME = 10 - def __str__(self): + def __str__(self) -> str: '''Convert to a string representation, returning just the enum (e.g. 'WRITE'). ''' @@ -93,7 +93,7 @@ def from_string(access_string: str): :returns: Corresponding AccessType enum. :rtype: :py:class:`psyclone.core.access_type.AccessType` - :raises: ValueError if access_string is not a valid access type. + :raises ValueError: if access_string is not a valid access type. ''' for access in AccessType: if access.name == access_string.upper(): diff --git a/src/psyclone/domain/common/transformations/kernel_module_inline_trans.py b/src/psyclone/domain/common/transformations/kernel_module_inline_trans.py index eddf6c69b9..4a058fdd6d 100644 --- a/src/psyclone/domain/common/transformations/kernel_module_inline_trans.py +++ b/src/psyclone/domain/common/transformations/kernel_module_inline_trans.py @@ -154,8 +154,12 @@ def validate(self, node, options=None): ) from error # We do not support kernels that use symbols representing data - # declared in their own parent module (we would need to new imports - # from this module for those, and we don't do this yet). + # declared in their own parent module (we would need to add new imports + # from this module at the call site, and we don't do this yet). + # TODO #2424 - this suffers from the limitation that + # VariablesAccessInfo does not work with nested scopes. (e.g. 2 + # different symbols with the same name but declared in different, + # nested scopes will be assumed to be the same symbol). vai = VariablesAccessInfo(kernel_schedule) table = kernel_schedule.symbol_table for sig in vai.all_signatures: @@ -163,12 +167,12 @@ def validate(self, node, options=None): if not symbol: raise TransformationError( f"{kern_or_call} '{kname}' contains accesses to " - f"'{sig.var_name}' but the origin of this symbol is " + f"'{sig.var_name}' but the origin of this signature is " f"unknown.") if not symbol.is_import and symbol.name not in table: raise TransformationError( f"{kern_or_call} '{kname}' contains accesses to " - f"'{symbol.name}' which is declared in the same " + f"'{symbol.name}' which is declared in the callee " f"module scope. Cannot inline such a {kern_or_call}.") # We can't transform subroutines that shadow top-level symbol module diff --git a/src/psyclone/domain/lfric/arg_ordering.py b/src/psyclone/domain/lfric/arg_ordering.py index ea36204e23..a2416bb810 100644 --- a/src/psyclone/domain/lfric/arg_ordering.py +++ b/src/psyclone/domain/lfric/arg_ordering.py @@ -761,6 +761,9 @@ def scalar(self, scalar_arg, var_accesses=None): # information. We do this by providing None as var access. self.append(scalar_arg.name, None, mode=scalar_arg.access, metadata_posn=scalar_arg.metadata_index) + if scalar_arg.precision and var_accesses is not None: + var_accesses.add_access(Signature(scalar_arg.precision), + AccessType.COMPILE_TIME, self._kern) else: self.append(scalar_arg.name, var_accesses, mode=scalar_arg.access, metadata_posn=scalar_arg.metadata_index) diff --git a/src/psyclone/psyir/nodes/call.py b/src/psyclone/psyir/nodes/call.py index 46ae696cf6..969beb5d4e 100644 --- a/src/psyclone/psyir/nodes/call.py +++ b/src/psyclone/psyir/nodes/call.py @@ -318,7 +318,7 @@ def reference_accesses(self, var_accesses): # The RoutineSymbol has a CALL access. sig, indices_list = self.routine.get_signature_and_indices() var_accesses.add_access(sig, AccessType.CALL, self.routine) - # Any symbols referenced in any index expressions are READ. + # Continue processing references in any index expressions. for indices in indices_list: for idx in indices: idx.reference_accesses(var_accesses) @@ -328,7 +328,7 @@ def reference_accesses(self, var_accesses): # This argument is pass-by-reference. sig, indices_list = arg.get_signature_and_indices() var_accesses.add_access(sig, default_access, arg) - # Any symbols referenced in any index expressions are READ. + # Continue processing references in any index expressions. for indices in indices_list: for idx in indices: idx.reference_accesses(var_accesses) diff --git a/src/psyclone/psyir/nodes/codeblock.py b/src/psyclone/psyir/nodes/codeblock.py index ccaa2c6a43..728bb92260 100644 --- a/src/psyclone/psyir/nodes/codeblock.py +++ b/src/psyclone/psyir/nodes/codeblock.py @@ -151,10 +151,9 @@ def node_str(self, colour=True): return (f"{self.coloured_name(colour)}[" f"{list(map(type, self._fp2_nodes))}]") - def get_symbol_names(self): + def get_symbol_names(self) -> list[str]: ''' - :returns: the list of symbol names used inside the CodeBock. - :rtype: list[str] + :returns: the symbol names used inside the CodeBock. ''' parse_tree = self.get_ast_nodes result = [] @@ -178,9 +177,18 @@ def get_symbol_names(self): # Precision on literals requires special attention since they are just # stored in the tree as str (fparser/#456). for node in walk(parse_tree, (Fortran2003.Int_Literal_Constant, - Fortran2003.Real_Literal_Constant)): + Fortran2003.Real_Literal_Constant, + Fortran2003.Logical_Literal_Constant, + Fortran2003.Char_Literal_Constant)): if node.items[1]: result.append(node.items[1]) + # Complex literals require even more special attention. + for node in walk(parse_tree, Fortran2003.Complex_Literal_Constant): + # A complex literal constant has a real part and an imaginary part. + # Each of these can have a kind. + for part in node.items: + if part.items[1]: + result.append(part.items[1]) return result def reference_accesses(self, var_accesses: VariablesAccessInfo): diff --git a/src/psyclone/tests/core/variables_access_info_test.py b/src/psyclone/tests/core/variables_access_info_test.py index f43111e4e0..5010e901fd 100644 --- a/src/psyclone/tests/core/variables_access_info_test.py +++ b/src/psyclone/tests/core/variables_access_info_test.py @@ -429,7 +429,7 @@ def test_variables_access_info_domain_loop(): structure, so especially the loop variable is not defined) work as expected. ''' - psy, invoke = get_invoke("25.1_kern_two_domain.f90", "lfric", idx=0) + _, invoke = get_invoke("25.1_kern_two_domain.f90", "lfric", idx=0) vai = VariablesAccessInfo(invoke.schedule) assert str(vai) == ( "a: READ, b: READ, f1_data: READWRITE, f2_data: " @@ -450,8 +450,9 @@ def test_lfric_access_info(): schedule = psy.invokes.invoke_list[0].schedule vai = VariablesAccessInfo(schedule) - # Make sure a literal (1.0_r_def in this example) is not reported as a - # variable in the access list (but that the precision is): + # Make sure literals (e.g. 1_i_def or 2.0_r_def in this example) are not + # reported as variables in the access list (but that the associated + # precisions are): assert ( "basis_w1_qr: READ, basis_w3_qr: READ, cell: READ+WRITE, " "diff_basis_w2_qr: READ, diff_basis_w3_qr: READ, f1_data: " @@ -459,5 +460,5 @@ def test_lfric_access_info(): "loop0_start: READ, loop0_stop: READ, m1_data: READ, m2_data: READ, " "map_w1: READ, map_w2: READ, map_w3: READ, ndf_w1: READ, " "ndf_w2: READ, ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, " - "np_z_qr: READ, undf_w1: READ, undf_w2: READ, undf_w3: READ, " + "np_z_qr: READ, r_def: INQUIRY, undf_w1: READ, undf_w2: READ, undf_w3: READ, " "weights_xy_qr: READ, weights_z_qr: READ" == str(vai)) diff --git a/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py b/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py index da146468e9..aa83f08741 100644 --- a/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py +++ b/src/psyclone/tests/domain/common/transformations/kernel_module_inline_trans_test.py @@ -150,8 +150,8 @@ def test_validate_no_inline_global_var(parser): with pytest.raises(TransformationError) as err: inline_trans.validate(kernels[0]) assert ("Kernel 'kernel_with_global_code' contains accesses to 'alpha' " - "which is declared in the same module scope. Cannot inline such a " - "Kernel." in str(err.value)) + "which is declared in the callee module scope. Cannot inline such " + "a Kernel." in str(err.value)) # Check that the issue is also reported if the symbol is inside a # Codeblock @@ -167,7 +167,7 @@ def test_validate_no_inline_global_var(parser): with pytest.raises(TransformationError) as err: inline_trans.validate(kernels[0]) assert ("'kernel_with_global_code' contains accesses to 'alpha' which is " - "declared in the same module scope. Cannot " + "declared in the callee module scope. Cannot " "inline such a Kernel." in str(err.value)) # Check that a symbol of unknown origin within a CodeBlock is caught. @@ -187,7 +187,7 @@ def test_validate_no_inline_global_var(parser): with pytest.raises(TransformationError) as err: inline_trans.validate(kernels[0]) assert ("Kernel 'kernel_with_global_code' contains accesses to 'unknown' " - "but the origin of this symbol is unknown" in + "but the origin of this signature is unknown" in str(err.value)) # But make sure that an IntrinsicCall routine name is not considered @@ -373,6 +373,54 @@ def test_validate_fail_to_get_psyir(fortran_reader): in str(err.value)) +def test_validate_nested_scopes(fortran_reader, monkeypatch): + ''' + Test that validate() works correctly when two symbols in nested scopes + have a name clash. + + TODO #2424 - this xfails at the moment because VariablesAccessInfo does not + support nested scopes. + + ''' + _, invoke = get_invoke("single_invoke_three_kernels.f90", "gocean", + idx=0, dist_mem=False) + schedule = invoke.schedule + kern_call = schedule.children[1].loop_body[0].loop_body[0] + + # Manually set the kernel to the desired problematic code + psyir = fortran_reader.psyir_from_source(''' + module my_mod + use external_mod + contains + subroutine compute_cv_code() + integer :: i + do i = 1, 10 + a(i) = i + end do + end subroutine compute_cv_code + end module my_mod + ''') + routine = psyir.walk(Routine)[0] + # Move the definition of 'a' into the table associated with the loop. + sym = routine.symbol_table.lookup("a") + routine[0].loop_body.symbol_table.add(sym) + del routine.symbol_table._symbols["a"] + # Put a new, different symbol (with the same name) into the table of the + # parent Container. + routine.parent.scope.symbol_table.add(DataSymbol("a", REAL_TYPE)) + monkeypatch.setattr(kern_call, "_kern_schedule", routine) + + # The transformation should succeed (because the symbol named 'a' is + # actually local to the routine. However, the dependence analysis thinks it + # clashes with the symbol of the same name in the module scope. + intrans = KernelModuleInlineTrans() + try: + intrans.validate(kern_call) + except TransformationError: + pytest.xfail(reason="TODO #2424 - VariablesAccessInfo does not support" + " nested scopes") + + def test_module_inline_apply_transformation(tmpdir, fortran_writer): ''' Test that we can succesfully inline a basic kernel subroutine routine into the PSy layer module using a transformation ''' diff --git a/src/psyclone/tests/nemo/test_files/imperfect_nest.f90 b/src/psyclone/tests/nemo/test_files/imperfect_nest.f90 index 6d5ceb3846..d0a5aca8d8 100644 --- a/src/psyclone/tests/nemo/test_files/imperfect_nest.f90 +++ b/src/psyclone/tests/nemo/test_files/imperfect_nest.f90 @@ -73,7 +73,7 @@ program imperfect_nest DO jj = 1, jpjm1 DO ji = 1, jpim1 zabe1 = pahu(ji, jj, jk) * e2_e1u(ji, jj) * e3u_n(ji, jj, jk) - zmsku = 1. / MAX(wmask(ji + 1, jj, jk) + wmask(ji, jj, jk + 1) + wmask(ji + 1, jj, jk + 1) + wmask(ji, jj, jk), 1.) + zmsku = 1._wp / MAX(wmask(ji + 1, jj, jk) + wmask(ji, jj, jk + 1) + wmask(ji + 1, jj, jk + 1) + wmask(ji, jj, jk), 1.) zcof1 = - pahu(ji, jj, jk) * e2u(ji, jj) * uslp(ji, jj, jk) * zmsku zftu(ji, jj, jk) = (zabe1 * zdit(ji, jj, jk) + zcof1 * (zdkt(ji + 1, jj) + zdk1t(ji, jj) + zdk1t(ji + 1, jj) + zdkt(ji, jj))) * umask(ji, jj, jk) END DO diff --git a/src/psyclone/tests/nemo/transformations/openacc/data_directive_test.py b/src/psyclone/tests/nemo/transformations/openacc/data_directive_test.py index 35a3fd6370..de9e3f9b0a 100644 --- a/src/psyclone/tests/nemo/transformations/openacc/data_directive_test.py +++ b/src/psyclone/tests/nemo/transformations/openacc/data_directive_test.py @@ -55,6 +55,7 @@ # Test code with explicit NEMO-style do loop EXPLICIT_DO = ("program explicit_do\n" + " use kinds_mod, only: r_def\n" " REAL :: r\n" " INTEGER :: ji, jj, jk\n" " INTEGER, PARAMETER :: jpi=3, jpj=5, jpk=7\n" @@ -62,7 +63,7 @@ " DO jk = 1, jpk\n" " DO jj = 1, jpj\n" " DO ji = 1, jpi\n" - " umask(ji,jj,jk) = ji*jj*jk/r\n" + " umask(ji,jj,jk) = 3.0_r_def - ji*jj*jk/r\n" " END DO\n" " END DO\n" " END DO\n" diff --git a/src/psyclone/tests/psyir/nodes/codeblock_test.py b/src/psyclone/tests/psyir/nodes/codeblock_test.py index e6324f25fa..b6b939a00e 100644 --- a/src/psyclone/tests/psyir/nodes/codeblock_test.py +++ b/src/psyclone/tests/psyir/nodes/codeblock_test.py @@ -140,6 +140,9 @@ def test_codeblock_ref_accesses(parser): vai = VariablesAccessInfo() reader = FortranStringReader(''' subroutine mytest + that_is_true = .TRUE._bool_kind + hello_str = char_kind_"hello" + my_cmplx = (1.0_c_def, 1.0_b_def) myloop: DO i = 1, 10_i_def a = b + sqrt(c) + 1.0_r_def myifblock: IF(this_is_true)THEN @@ -160,7 +163,11 @@ def test_codeblock_ref_accesses(parser): assert "i" in all_names assert "i_def" in all_names assert "r_def" in all_names - # All signatures should be marked as READWRITE access. + assert "bool_kind" in all_names + assert "char_kind" in all_names + assert "c_def" in all_names + assert "b_def" in all_names + # All signatures should be marked as READWRITE access. assert all(vai.has_read_write(sig) for sig in all_sigs) From 278b82e6330d430dc04be70b9c99da9d999d0986 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 6 Jan 2025 14:53:03 +0000 Subject: [PATCH 20/58] #2271 fix linting --- src/psyclone/tests/core/variables_access_info_test.py | 4 ++-- src/psyclone/tests/psyir/nodes/codeblock_test.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/psyclone/tests/core/variables_access_info_test.py b/src/psyclone/tests/core/variables_access_info_test.py index 5010e901fd..ed59457fa0 100644 --- a/src/psyclone/tests/core/variables_access_info_test.py +++ b/src/psyclone/tests/core/variables_access_info_test.py @@ -460,5 +460,5 @@ def test_lfric_access_info(): "loop0_start: READ, loop0_stop: READ, m1_data: READ, m2_data: READ, " "map_w1: READ, map_w2: READ, map_w3: READ, ndf_w1: READ, " "ndf_w2: READ, ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, " - "np_z_qr: READ, r_def: INQUIRY, undf_w1: READ, undf_w2: READ, undf_w3: READ, " - "weights_xy_qr: READ, weights_z_qr: READ" == str(vai)) + "np_z_qr: READ, r_def: INQUIRY, undf_w1: READ, undf_w2: READ, " + "undf_w3: READ, weights_xy_qr: READ, weights_z_qr: READ" == str(vai)) diff --git a/src/psyclone/tests/psyir/nodes/codeblock_test.py b/src/psyclone/tests/psyir/nodes/codeblock_test.py index b6b939a00e..d2e28ef593 100644 --- a/src/psyclone/tests/psyir/nodes/codeblock_test.py +++ b/src/psyclone/tests/psyir/nodes/codeblock_test.py @@ -167,7 +167,7 @@ def test_codeblock_ref_accesses(parser): assert "char_kind" in all_names assert "c_def" in all_names assert "b_def" in all_names - # All signatures should be marked as READWRITE access. + # All signatures should be marked as READWRITE access. assert all(vai.has_read_write(sig) for sig in all_sigs) From b6466671017e1342917550bfce39a308d209ac6b Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 6 Jan 2025 15:58:40 +0000 Subject: [PATCH 21/58] #2271 final changes for review --- .../core/single_variable_access_info.py | 9 +++-- src/psyclone/psyir/nodes/codeblock.py | 20 +++++++++- src/psyclone/tests/psyir/nodes/call_test.py | 38 +++++++++++++++---- .../tests/psyir/nodes/codeblock_test.py | 4 ++ 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/psyclone/core/single_variable_access_info.py b/src/psyclone/core/single_variable_access_info.py index 2723c52bcf..6fe70f0b1a 100644 --- a/src/psyclone/core/single_variable_access_info.py +++ b/src/psyclone/core/single_variable_access_info.py @@ -232,16 +232,17 @@ def is_queried(self) -> bool: return any(info.access_type == AccessType.INQUIRY for info in self._accesses) - def is_written(self): - ''':returns: True if this variable is written (at least once). - :rtype: bool + def is_written(self) -> bool: + ''' + :returns: True if this variable is written (at least once). ''' return any(access_info.access_type in AccessType.all_write_accesses() for access_info in self._accesses) def is_written_first(self) -> bool: - ''':returns: True if this variable is written in the first data access + ''' + :returns: True if this variable is written in the first data access (which indicates that this variable is not an input variable for a kernel). ''' diff --git a/src/psyclone/psyir/nodes/codeblock.py b/src/psyclone/psyir/nodes/codeblock.py index 728bb92260..95940af0e5 100644 --- a/src/psyclone/psyir/nodes/codeblock.py +++ b/src/psyclone/psyir/nodes/codeblock.py @@ -153,6 +153,19 @@ def node_str(self, colour=True): def get_symbol_names(self) -> list[str]: ''' + Analyses the fparser2 parse tree associated with this CodeBlock and + returns the names of all symbols accessed within it. Since, by + definition, we do not understand the contents of a CodeBlock, we do not + attempt to analyse how these symbols are accessed - they are all marked + as being READWRITE (this includes the names of any routines that might + be called). + + Note that the names of any Fortran intrinsics are *not* included in the + result. If the original code has unwisely overridden a Fortran intrinsic + then fparser *may* incorrectly identify the use of such a variable/ + routine as still being an intrinsic call and, as such, it will be + omitted from the names returned by this method. + :returns: the symbol names used inside the CodeBock. ''' parse_tree = self.get_ast_nodes @@ -196,7 +209,12 @@ def reference_accesses(self, var_accesses: VariablesAccessInfo): Get all variable access information. Since this is a CodeBlock we only know the names of symbols accessed within it but not how they are accessed. Therefore we err on the side of caution and mark - them all as READWRITE. + them all as READWRITE, unfortunately, this will include the names of + any routines that are called. + + This method makes use of + :py:meth:`~psyclone.psyir.nodes.CodeBlock.get_symbol_names` and is + therefore subject to the same limitations as that method. :param var_accesses: VariablesAccessInfo instance that stores the information about variable accesses. diff --git a/src/psyclone/tests/psyir/nodes/call_test.py b/src/psyclone/tests/psyir/nodes/call_test.py index 4a96a38cd8..0f9e6ce3da 100644 --- a/src/psyclone/tests/psyir/nodes/call_test.py +++ b/src/psyclone/tests/psyir/nodes/call_test.py @@ -423,13 +423,29 @@ def test_call_reference_accesses(): def test_type_bound_call_reference_accesses(fortran_reader): '''Test the reference_accesses() method for a call to a type-bound - procedure.''' + procedure. + + TODO #2823 - we currently make dangerous assumptions about accesses + to variables if whether or not they are being used as function + arguments is ambiguous. + + ''' code = '''\ + module my_mod + contains + pure function get_start(idx) result(start) + integer, intent(in) :: idx + integer :: start + start = idx - 1 + end function get_start subroutine my_sub - use some_mod, only: my_grid - integer :: i, j, k - call my_grid(k)%update(i,j) + use some_mod, only: my_grid, domain + integer :: i, j, k, f + ! We know that get_start() is a call to a pure function so 'f' is + ! read only. + call my_grid(k)%update(get_start(f), domain%get_start(i),j) end subroutine my_sub + end module my_mod ''' psyir = fortran_reader.psyir_from_source(code) call = psyir.walk(Call)[0] @@ -437,13 +453,21 @@ def test_type_bound_call_reference_accesses(fortran_reader): call.reference_accesses(vai) # The type-bound procedure is called. assert vai.is_called(Signature("my_grid%update")) + # As is the function defined in the same module. + assert vai.is_called(Signature("get_start")) # All of the indices are marked as read. - for var in ["i", "j", "k"]: + for var in ["i", "j", "k", "f"]: assert vai.is_read(Signature(var)) - # Only the arguments to the call are marked as read-write. - assert vai.has_read_write(Signature("i")) + # Only the arguments to the calls are marked as read-write. assert vai.has_read_write(Signature("j")) assert not vai.has_read_write(Signature("k")) + assert not vai.has_read_write(Signature("f")) + # We can't tell whether 'domain%get_start(i)' is an array access + # or a function call. We currently, dangerously, assume it is the former. + if not vai.has_read_write(Signature("i")): + pytest.xfail(reason="TODO #2823 - potential array accesses/function " + "calls are always assumed to be array accesses. This is " + "unsafe.") def test_call_argumentnames_after_removearg(): diff --git a/src/psyclone/tests/psyir/nodes/codeblock_test.py b/src/psyclone/tests/psyir/nodes/codeblock_test.py index d2e28ef593..d072acf682 100644 --- a/src/psyclone/tests/psyir/nodes/codeblock_test.py +++ b/src/psyclone/tests/psyir/nodes/codeblock_test.py @@ -148,6 +148,7 @@ def test_codeblock_ref_accesses(parser): myifblock: IF(this_is_true)THEN EXIT myloop ELSE IF(that_is_true)THEN myifblock + call my_routine() write(*,*) "Bye" ELSE myifblock write(*,*) "hello" @@ -161,12 +162,15 @@ def test_codeblock_ref_accesses(parser): all_names = [sig.var_name for sig in all_sigs] assert "a" in all_names assert "i" in all_names + # Check that the various precision symbols are included. assert "i_def" in all_names assert "r_def" in all_names assert "bool_kind" in all_names assert "char_kind" in all_names assert "c_def" in all_names assert "b_def" in all_names + # The target of a CALL is included. + assert "my_routine" in all_names # All signatures should be marked as READWRITE access. assert all(vai.has_read_write(sig) for sig in all_sigs) From 1ed438e6bbc9737502fcc750a2f72662cd1ad8a0 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 6 Jan 2025 16:04:03 +0000 Subject: [PATCH 22/58] #2271 fix linting --- src/psyclone/psyir/nodes/codeblock.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/psyclone/psyir/nodes/codeblock.py b/src/psyclone/psyir/nodes/codeblock.py index 95940af0e5..cfeb36881f 100644 --- a/src/psyclone/psyir/nodes/codeblock.py +++ b/src/psyclone/psyir/nodes/codeblock.py @@ -161,10 +161,10 @@ def get_symbol_names(self) -> list[str]: be called). Note that the names of any Fortran intrinsics are *not* included in the - result. If the original code has unwisely overridden a Fortran intrinsic - then fparser *may* incorrectly identify the use of such a variable/ - routine as still being an intrinsic call and, as such, it will be - omitted from the names returned by this method. + result. If the original code has unwisely overridden a Fortran + intrinsic then fparser *may* incorrectly identify the use of such a + variable/routine as still being an intrinsic call and, as such, it will + be omitted from the names returned by this method. :returns: the symbol names used inside the CodeBock. ''' From 3bab6b7f4b309e55c0d13cbe2ab25e32ab1eea2c Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 6 Jan 2025 16:29:55 +0000 Subject: [PATCH 23/58] #2271 fix type hint for older python --- src/psyclone/psyir/nodes/codeblock.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/psyclone/psyir/nodes/codeblock.py b/src/psyclone/psyir/nodes/codeblock.py index cfeb36881f..8886073761 100644 --- a/src/psyclone/psyir/nodes/codeblock.py +++ b/src/psyclone/psyir/nodes/codeblock.py @@ -39,6 +39,8 @@ ''' This module contains the CodeBlock node implementation.''' from enum import Enum +from typing import List + from fparser.two import Fortran2003 from fparser.two.utils import walk from psyclone.core import AccessType, Signature, VariablesAccessInfo @@ -151,7 +153,7 @@ def node_str(self, colour=True): return (f"{self.coloured_name(colour)}[" f"{list(map(type, self._fp2_nodes))}]") - def get_symbol_names(self) -> list[str]: + def get_symbol_names(self) -> List[str]: ''' Analyses the fparser2 parse tree associated with this CodeBlock and returns the names of all symbols accessed within it. Since, by From e389463ef18d381e498c28c7673a0ed253c50ca0 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Tue, 7 Jan 2025 13:19:48 +0000 Subject: [PATCH 24/58] #2271 address coverage --- src/psyclone/domain/lfric/lfric_extract_driver_creator.py | 4 ---- src/psyclone/tests/core/single_variable_access_info_test.py | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/psyclone/domain/lfric/lfric_extract_driver_creator.py b/src/psyclone/domain/lfric/lfric_extract_driver_creator.py index 06b6d6e660..93c11112f9 100644 --- a/src/psyclone/domain/lfric/lfric_extract_driver_creator.py +++ b/src/psyclone/domain/lfric/lfric_extract_driver_creator.py @@ -594,10 +594,6 @@ def _sym_is_field(sym): else: orig_sym = original_symbol_table.lookup(signature[0]) - if orig_sym and isinstance(orig_sym, DataTypeSymbol): - # We don't want symbols representing data types. - continue - if orig_sym and orig_sym.is_array and _sym_is_field(orig_sym): # This is a field vector, so add all individual fields upper = int(orig_sym.datatype.shape[0].upper.value) diff --git a/src/psyclone/tests/core/single_variable_access_info_test.py b/src/psyclone/tests/core/single_variable_access_info_test.py index 45f6caa23b..f6824ddde3 100644 --- a/src/psyclone/tests/core/single_variable_access_info_test.py +++ b/src/psyclone/tests/core/single_variable_access_info_test.py @@ -178,6 +178,11 @@ def test_variable_access_info(): assert vai.is_read_only() is False assert vai.all_read_accesses == [vai[2]] assert vai.all_write_accesses == [vai[1], vai[3]] + # Check that we catch a case where there are no accesses at all. + vai = SingleVariableAccessInfo(Signature("var_name")) + with pytest.raises(InternalError) as err: + vai.change_read_to_write() + assert "but it does not have a 'READ' access" in str(err.value) # ----------------------------------------------------------------------------- From ce58e0c8091935d6567a17f8e0a2c7c5ab391b3c Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 8 Jan 2025 14:33:41 +0000 Subject: [PATCH 25/58] #2271 extend ScopingNode.reference_accesses to handle UnsupportedFortranType --- src/psyclone/psyir/nodes/scoping_node.py | 6 +++- .../tests/psyir/nodes/scoping_node_test.py | 30 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/psyclone/psyir/nodes/scoping_node.py b/src/psyclone/psyir/nodes/scoping_node.py index 437a8f8819..ba6c2d0c0c 100644 --- a/src/psyclone/psyir/nodes/scoping_node.py +++ b/src/psyclone/psyir/nodes/scoping_node.py @@ -40,7 +40,7 @@ from psyclone.psyir.nodes.node import Node from psyclone.psyir.symbols import ( ArrayType, DataType, DataTypeSymbol, RoutineSymbol, StructureType, Symbol, - SymbolError, SymbolTable) + SymbolError, SymbolTable, UnsupportedFortranType) class ScopingNode(Node): @@ -217,6 +217,10 @@ def _get_accesses(dtype: DataType, info: VariablesAccessInfo): if isinstance(dim, ArrayType.ArrayBounds): dim.lower.reference_accesses(access_info) dim.upper.reference_accesses(access_info) + elif (isinstance(dtype, UnsupportedFortranType) and + dtype.partial_datatype): + # Recurse to examine partial datatype information. + _get_accesses(dtype.partial_datatype, info) # Examine the datatypes and initial values of all DataSymbols. for sym in self._symbol_table.datasymbols: diff --git a/src/psyclone/tests/psyir/nodes/scoping_node_test.py b/src/psyclone/tests/psyir/nodes/scoping_node_test.py index 4811d2960f..1199fa2999 100644 --- a/src/psyclone/tests/psyir/nodes/scoping_node_test.py +++ b/src/psyclone/tests/psyir/nodes/scoping_node_test.py @@ -43,7 +43,8 @@ Routine, ArrayReference) from psyclone.psyir.symbols import ( ArrayType, ArgumentInterface, DataSymbol, DataTypeSymbol, INTEGER_TYPE, - ScalarType, StructureType, Symbol, SymbolTable, REAL_TYPE) + REAL_TYPE, ScalarType, StructureType, Symbol, SymbolTable, + UnsupportedFortranType) from psyclone.tests.utilities import Compile @@ -345,7 +346,7 @@ def test_reference_accesses_struct(): def test_reference_accesses_array(): - '''Test reference_accesses() with the associated SymbolTable contains + '''Test reference_accesses() when the associated SymbolTable contains an array with dimensions that make reference to another Symbol. ''' @@ -367,3 +368,28 @@ def test_reference_accesses_array(): assert Signature("i_def") in vai.all_signatures assert Signature("r_def") in vai.all_signatures assert Signature("var2") in vai.all_signatures + + +def test_reference_accesses_unknown_type(): + '''Test reference_accesses() when the symbol table contains a symbol + of UnsupportedFortranType but with partial type information. + + ''' + sched = Schedule() + table = sched.symbol_table + # Create partial type information - an array of specified precision + # with an extent specified by another symbol. + rdef = table.new_symbol("r_def", symbol_type=DataSymbol, + datatype=INTEGER_TYPE) + big_sym = table.new_symbol("big", symbol_type=DataSymbol, + datatype=INTEGER_TYPE) + real_type = ScalarType(ScalarType.Intrinsic.REAL, rdef) + ptype = ArrayType(real_type, [Reference(big_sym)]) + utype = UnsupportedFortranType( + "real(r_def), dimension(big), target :: array", + partial_datatype=ptype) + table.new_symbol("array", symbol_type=DataSymbol, datatype=utype) + vai = VariablesAccessInfo() + sched.reference_accesses(vai) + assert Signature("r_def") in vai.all_signatures + assert Signature("big") in vai.all_signatures From 125db1a99374effd64998c1912e01349709ea27b Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 15 Jan 2025 17:04:48 +0000 Subject: [PATCH 26/58] #2271 add new hoist_trans test from #2849 --- .../psyir/transformations/hoist_trans_test.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/psyclone/tests/psyir/transformations/hoist_trans_test.py b/src/psyclone/tests/psyir/transformations/hoist_trans_test.py index de105065ee..9a69054d87 100644 --- a/src/psyclone/tests/psyir/transformations/hoist_trans_test.py +++ b/src/psyclone/tests/psyir/transformations/hoist_trans_test.py @@ -482,6 +482,41 @@ def test_apply_remove_emtpy_loops(fortran_reader, fortran_writer): assert expected in fortran_writer(psyir) +def test_validate_array_of_struct(fortran_reader): + ''' + Test that validate() spots the use of an array variable within + an intrinsic call. + + ''' + psyir = fortran_reader.psyir_from_source( + ''' + module lbcnfd + use lib_mpp + contains + SUBROUTINE lbc_nfd_dp( ptab, cd_nat, psgn, kfld ) + TYPE(PTR_4d_dp), DIMENSION(:), INTENT(inout) :: ptab + CHARACTER(len=1), DIMENSION(:), INTENT(in ) :: cd_nat + REAL(dp), DIMENSION(:), INTENT(in ) :: psgn + INTEGER , INTENT(in ) :: kfld + integer :: jf + integer :: ipi + integer :: ij2 + + do jf = 1, kfld, 1 + ipi = SIZE(ptab(jf)%pt4d, 1) + end do + end subroutine lbc_nfd_dp + end module lbcnfd + ''' + ) + loop = psyir.walk(Loop)[0] + hoist_trans = HoistTrans() + with pytest.raises(TransformationError) as err: + hoist_trans.validate(loop.loop_body[0]) + assert ("The statement 'ipi = SIZE(ptab(jf)%pt4d, 1)' can't be hoisted as " + "it reads variable 'jf'" in str(err.value)) + + def test_str(): '''Test the hoist transformation's str method return the expected results. From 5c27d56947155290e70af97f14eab95de0407ee3 Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Thu, 16 Jan 2025 13:37:12 +1100 Subject: [PATCH 27/58] #2853 Allow setting of the Fortran standard in the config file. --- config/psyclone.cfg | 4 +++ doc/user_guide/configuration.rst | 4 +++ src/psyclone/configuration.py | 19 ++++++++++ src/psyclone/domain/gocean/kernel/psyir.py | 4 ++- .../domain/lfric/kernel/common_metadata.py | 5 ++- src/psyclone/parse/file_info.py | 5 +-- src/psyclone/parse/kernel.py | 10 +++--- src/psyclone/parse/utils.py | 2 +- src/psyclone/psyGen.py | 3 +- src/psyclone/psyir/frontend/fortran.py | 4 ++- src/psyclone/psyir/frontend/fparser2.py | 5 +-- src/psyclone/psyir/nodes/psy_data_node.py | 2 +- src/psyclone/psyir/symbols/datatypes.py | 7 ++-- src/psyclone/tests/config_test.py | 35 ++++++++++++++++++- 14 files changed, 90 insertions(+), 19 deletions(-) diff --git a/config/psyclone.cfg b/config/psyclone.cfg index 72394bbf53..45c2090912 100644 --- a/config/psyclone.cfg +++ b/config/psyclone.cfg @@ -56,6 +56,10 @@ OCL_DEVICES_PER_NODE = 1 # and will not produce a warning message if they cannot be found. IGNORE_MODULES = netcdf, mpi +# The Fortran standard to use when parsing files. This value is passed +# to fparser. Valid values are f2003 and f2008 +FORTRAN_STANDARD = f2008 + # Settings specific to the LFRic API # ================================== [lfric] diff --git a/doc/user_guide/configuration.rst b/doc/user_guide/configuration.rst index d4b3cc92be..396ebf5bea 100644 --- a/doc/user_guide/configuration.rst +++ b/doc/user_guide/configuration.rst @@ -98,6 +98,7 @@ section e.g.: REPROD_PAD_SIZE = 8 PSYIR_ROOT_NAME = psyir_tmp VALID_PSY_DATA_PREFIXES = profile, extract + FORTRAN_STANDARD = f2008 and an optional API specific section, for example for the ``lfric`` section: @@ -176,6 +177,9 @@ BACKEND_CHECKS_ENABLED Optional (defaults to True). Whether or not the PSyIR backend should validate the tree that it is passed. Can be overridden by the ``--backend`` command-line flag (see :ref:`backend-options`). +FORTRAN_STANDARD Optional (defaults to f2008). The Fortran standard str + that should be used by fparser. Valid values are + f2003 and f2008. ======================= ======================================================= =========== Common Sections diff --git a/src/psyclone/configuration.py b/src/psyclone/configuration.py index 5cf728a286..e66456d012 100644 --- a/src/psyclone/configuration.py +++ b/src/psyclone/configuration.py @@ -226,6 +226,9 @@ def __init__(self): # checks which can be useful in the case of unimplemented features. self._backend_checks_enabled = True + # The Fortran standard that fparser should use + self._fortran_standard = None + # ------------------------------------------------------------------------- def load(self, config_file=None): '''Loads a configuration file. @@ -369,6 +372,16 @@ def load(self, config_file=None): for module_name in ignore_modules: mod_manager.add_ignore_module(module_name) + # Get the Fortran standard to use: + self._fortran_standard = \ + self._config['DEFAULT'].get("FORTRAN_STANDARD", "f2008").lower() + valid_standard = ["f2003", "f2008"] + if self._fortran_standard not in valid_standard: + raise ConfigurationError(f"Invalid Fortran standard " + f"'{self._fortran_standard}' specified " + f"in config file. Must be one of" + f"{valid_standard}") + # Set the flag that the config file has been loaded now. Config._HAS_CONFIG_BEEN_INITIALISED = True @@ -698,6 +711,12 @@ def ocl_devices_per_node(self): :rtype: int''' return self._ocl_devices_per_node + @property + def fortran_standard(self) -> str: + ''':returns: The Fortran standard to be used by fparser. + ''' + return self._fortran_standard + def get_default_keys(self): '''Returns all keys from the default section. :returns list: List of all keys of the default section as strings. diff --git a/src/psyclone/domain/gocean/kernel/psyir.py b/src/psyclone/domain/gocean/kernel/psyir.py index 9681547406..45bfe9a973 100644 --- a/src/psyclone/domain/gocean/kernel/psyir.py +++ b/src/psyclone/domain/gocean/kernel/psyir.py @@ -33,6 +33,7 @@ # ----------------------------------------------------------------------------- # Author: R. W. Ford, STFC Daresbury Lab # Modified: A. R. Porter and S. Siso, STFC Daresbury Lab +# J. Henrichs, Bureau of Meteorology '''This module contains PSyclone Kernel-layer-specific PSyIR classes for the GOcean API. @@ -252,7 +253,8 @@ def create_from_fortran_string(fortran_string): kernel_metadata = GOceanKernelMetadata() # Ensure the Fortran2003 parser is initialised. - _ = ParserFactory().create(std="f2003") + std = Config.get().fortran_standard + _ = ParserFactory().create(std=std) reader = FortranStringReader(fortran_string) try: spec_part = Fortran2003.Derived_Type_Def(reader) diff --git a/src/psyclone/domain/lfric/kernel/common_metadata.py b/src/psyclone/domain/lfric/kernel/common_metadata.py index 0c4f8b9455..b74c1424bc 100644 --- a/src/psyclone/domain/lfric/kernel/common_metadata.py +++ b/src/psyclone/domain/lfric/kernel/common_metadata.py @@ -43,6 +43,8 @@ from fparser.two.parser import ParserFactory from fparser.two.utils import NoMatchError, FortranSyntaxError +from psyclone.configuration import Config + # TODO issue #1886. This class and its subclasses may have # commonalities with the GOcean metadata processing. @@ -120,7 +122,8 @@ def create_fparser2(fortran_string, encoding): expected form. ''' - _ = ParserFactory().create(std="f2003") + std = Config.get().fortran_standard + _ = ParserFactory().create(std=std) reader = FortranStringReader(fortran_string) match = True try: diff --git a/src/psyclone/parse/file_info.py b/src/psyclone/parse/file_info.py index 5cfd5c81ac..06b7f25149 100644 --- a/src/psyclone/parse/file_info.py +++ b/src/psyclone/parse/file_info.py @@ -412,10 +412,11 @@ def get_fparser_tree( return self._fparser_tree try: + config = Config.get() reader = FortranStringReader( - source_code, include_dirs=Config.get().include_paths + source_code, include_dirs=config.include_paths ) - parser = ParserFactory().create(std="f2008") + parser = ParserFactory().create(std=config.fortran_standard) self._fparser_tree = parser(reader) except Exception as err: diff --git a/src/psyclone/parse/kernel.py b/src/psyclone/parse/kernel.py index eb987b3735..201c031881 100644 --- a/src/psyclone/parse/kernel.py +++ b/src/psyclone/parse/kernel.py @@ -58,7 +58,7 @@ import psyclone.expression as expr from psyclone.errors import InternalError -from psyclone.configuration import LFRIC_API_NAMES, GOCEAN_API_NAMES +from psyclone.configuration import Config, LFRIC_API_NAMES, GOCEAN_API_NAMES from psyclone.parse.utils import check_api, check_line_length, ParseError @@ -912,8 +912,8 @@ def get_integer_variable(self, name): :raises ParseError: if the RHS of the assignment is not a Name. ''' - # Ensure the Fortran2008 parser is initialised - _ = ParserFactory().create(std="f2008") + # Ensure the Fortran parser is initialised + _ = ParserFactory().create(std=Config.get().fortran_standard) # Fortran is not case sensitive so nor is our matching lower_name = name.lower() @@ -955,8 +955,8 @@ def get_integer_array(self, name): does not match the extent of the array. ''' - # Ensure the classes are setup for the Fortran2008 parser - _ = ParserFactory().create(std="f2008") + # Ensure the classes are setup for the Fortran parser + _ = ParserFactory().create(std=Config.get().fortran_standard) # Fortran is not case sensitive so nor is our matching lower_name = name.lower() diff --git a/src/psyclone/parse/utils.py b/src/psyclone/parse/utils.py index 8f5b111057..474c78a2c5 100644 --- a/src/psyclone/parse/utils.py +++ b/src/psyclone/parse/utils.py @@ -114,7 +114,6 @@ def parse_fp2(filename): :raises ParseError: if the file could not be parsed. ''' - parser = ParserFactory().create(std="f2008") # We get the directories to search for any Fortran include files from # our configuration object. config = Config.get() @@ -124,6 +123,7 @@ def parse_fp2(filename): raise ParseError( f"algorithm.py:parse_fp2: Failed to parse file '{filename}'. " f"Error returned was ' {error} '.") from error + parser = ParserFactory().create(std=config.fortran_standard) try: parse_tree = parser(reader) except FortranSyntaxError as msg: diff --git a/src/psyclone/psyGen.py b/src/psyclone/psyGen.py index 8730288e4a..bb9661a8ad 100644 --- a/src/psyclone/psyGen.py +++ b/src/psyclone/psyGen.py @@ -1577,7 +1577,8 @@ def ast(self): # Use the fparser1 AST to generate Fortran source fortran = self._module_code.tofortran() # Create an fparser2 Fortran2008 parser - my_parser = parser.ParserFactory().create(std="f2008") + std = Config.get().fortran_standard + my_parser = parser.ParserFactory().create(std=std) # Parse that Fortran using our parser reader = FortranStringReader(fortran) self._fp2_ast = my_parser(reader) diff --git a/src/psyclone/psyir/frontend/fortran.py b/src/psyclone/psyir/frontend/fortran.py index f3205a35dd..2a920181d0 100644 --- a/src/psyclone/psyir/frontend/fortran.py +++ b/src/psyclone/psyir/frontend/fortran.py @@ -32,6 +32,7 @@ # ----------------------------------------------------------------------------- # Author: S. Siso, STFC Daresbury Lab # Modifications: A. R. Porter, N. Nobre and R. W. Ford, STFC Daresbury Lab +# J. Henrichs, Bureau of Meteorology # ----------------------------------------------------------------------------- ''' This module provides the PSyIR Fortran front-end.''' @@ -84,7 +85,8 @@ def __init__(self, free_form: bool = True, ignore_comments: bool = True, last_comments_as_codeblocks: bool = False, resolve_modules: Union[bool, List[str]] = False): if not self._parser: - self._parser = ParserFactory().create(std="f2008") + std = Config.get().fortran_standard + self._parser = ParserFactory().create(std=std) self._free_form = free_form if ignore_comments and not ignore_directives: raise ValueError( diff --git a/src/psyclone/psyir/frontend/fparser2.py b/src/psyclone/psyir/frontend/fparser2.py index af41068e57..1bd94eac2a 100644 --- a/src/psyclone/psyir/frontend/fparser2.py +++ b/src/psyclone/psyir/frontend/fparser2.py @@ -3445,7 +3445,7 @@ def _add_target_attribute(var_name, table): f"subroutine dummy()\n" f" {datatype.declaration}\n" f"end subroutine\n") - parser = ParserFactory().create(std="f2008") + parser = ParserFactory().create(std=Config.get().fortran_standard) reader = FortranStringReader(dummy_code) fp2_ast = parser(reader) type_decl_stmt = fp2_ast.children[0].children[1].children[0] @@ -3695,7 +3695,8 @@ def _create_select_type( # Parse the the created Fortran text to an fparser2 tree and # store the resulting tree in a PSyIR CodeBlock. - parser = ParserFactory().create(std="f2008") + std = Config.get().fortran_standard + parser = ParserFactory().create(std=std) reader = FortranStringReader(code) fp2_program = parser(reader) # Ignore the program part of the fparser2 tree diff --git a/src/psyclone/psyir/nodes/psy_data_node.py b/src/psyclone/psyir/nodes/psy_data_node.py index 262dd2e8b2..d82b2b0c3c 100644 --- a/src/psyclone/psyir/nodes/psy_data_node.py +++ b/src/psyclone/psyir/nodes/psy_data_node.py @@ -774,7 +774,7 @@ def gen_type_bound_call(typename, methodname, argument_list=None, argument_str += ",".join([str(arg) for arg in argument_list]) argument_str += ")" - ParserFactory().create(std="f2008") + ParserFactory().create(std=Config.get().fortran_standard) reader = FortranStringReader( f"CALL {typename}%{methodname}{argument_str}") # Tell the reader that the source is free format diff --git a/src/psyclone/psyir/symbols/datatypes.py b/src/psyclone/psyir/symbols/datatypes.py index 02e16f4861..e37fe94422 100644 --- a/src/psyclone/psyir/symbols/datatypes.py +++ b/src/psyclone/psyir/symbols/datatypes.py @@ -44,6 +44,7 @@ from enum import Enum from typing import Any, Union +from psyclone.configuration import Config from psyclone.errors import InternalError from psyclone.psyir.commentable_mixin import CommentableMixin from psyclone.psyir.symbols.data_type_symbol import DataTypeSymbol @@ -219,7 +220,7 @@ def type_text(self): string_reader = FortranStringReader(self._declaration) # Set reader to free format. string_reader.set_format(FortranFormat(True, False)) - ParserFactory().create(std="f2008") + ParserFactory().create(std=Config.get().fortran_standard) try: ptree = Fortran2003.Specification_Part( string_reader) @@ -641,8 +642,8 @@ def _validate_shape(self, extents): :type extents: List[ :py:class:`psyclone.psyir.symbols.ArrayType.Extent` | int | :py:class:`psyclone.psyir.nodes.DataNode` | - Tuple[int | :py:class:`psyclone.psyir.nodes.DataNode | - :py:class:`psyclone.psyir.symbols.ArrayType.Extent]] + Tuple[int | :py:class:`psyclone.psyir.nodes.DataNode` | + :py:class:`psyclone.psyir.symbols.ArrayType.Extent`]] :raises TypeError: if extents is not a list. :raises TypeError: if one or more of the supplied extents is a diff --git a/src/psyclone/tests/config_test.py b/src/psyclone/tests/config_test.py index 433dcb6a53..4a42689f1d 100644 --- a/src/psyclone/tests/config_test.py +++ b/src/psyclone/tests/config_test.py @@ -33,7 +33,7 @@ # ----------------------------------------------------------------------------- # Author: A. R. Porter, STFC Daresbury Lab # Modified: I. Kavcic and O. Brunt, Met Office, -# R. W. Ford, STFC Daresbury Lab +# R. W. Ford, STFC Daresbury Lab # J. Henrichs, Bureau of Meteorology # N. Nobre, STFC Daresbury Lab # S. Siso, STFC Daresbury Lab @@ -74,6 +74,7 @@ OCL_DEVICES_PER_NODE = 1 IGNORE_MODULES = netcdf, mpi BACKEND_CHECKS_ENABLED = false +FORTRAN_STANDARD = f2003 [lfric] access_mapping = gh_read: read, gh_write: write, gh_readwrite: readwrite, gh_inc: inc, gh_sum: sum @@ -766,3 +767,35 @@ def test_aliased_api_names(tmpdir): assert "lfric" in config._api_conf assert "dynamo0.3" not in config._api_conf assert config._api_conf['lfric'].num_any_space == 13 + + +def test_fortran_standard(tmpdir): + '''Test the handling of the Fortran standard. The dummy + config content here specifies f2003 in the config file, + so we can check that we get the expected default of f2008 + if it is removed. + ''' + # Check that we read the expected value in the config file: + config_file = tmpdir.join("config") + content = _CONFIG_CONTENT + config = get_config(config_file, content) + assert config.fortran_standard == "f2003" + # Remove the Fortran_standard from the config file, in + # which case we must get the default of f2008: + content = re.sub(r"^FORTRAN_STANDARD = f2003$", "", + content, flags=re.MULTILINE) + config = get_config(config_file, content) + assert config.fortran_standard == "f2008" + + # Check that an invalid Fortran standard raises an exception. + content = _CONFIG_CONTENT + # Set an invalid Fortran_standard + content = re.sub(r"^FORTRAN_STANDARD = f2003", + "FORTRAN_STANDARD = invalid", + content, flags=re.MULTILINE) + with pytest.raises(ConfigurationError) as err: + get_config(config_file, content) + + assert ("PSyclone configuration error: Invalid Fortran standard 'invalid' " + "specified in config file. Must be one of['f2003', 'f2008']" + in str(err.value)) From 3c654bd43ee1fdca41e0d56bf30ca4027c96e7b2 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 17 Jan 2025 11:13:10 +0000 Subject: [PATCH 28/58] #2854 exclude char assignments --- .../transformations/acc_kernels_trans.py | 50 +++++++++++++++++-- .../transformations/acc_kernels_trans_test.py | 20 ++++++-- 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/src/psyclone/psyir/transformations/acc_kernels_trans.py b/src/psyclone/psyir/transformations/acc_kernels_trans.py index 285ac7db26..a7de3b9389 100644 --- a/src/psyclone/psyir/transformations/acc_kernels_trans.py +++ b/src/psyclone/psyir/transformations/acc_kernels_trans.py @@ -39,12 +39,14 @@ ''' This module provides the ACCKernelsTrans transformation. ''' import re +from typing import List, Union from psyclone import psyGen +from psyclone.errors import LazyString from psyclone.psyir.nodes import ( - ACCKernelsDirective, Assignment, Call, CodeBlock, Loop, PSyDataNode, - Reference, Return, Routine, Statement, WhileLoop) -from psyclone.psyir.symbols import UnsupportedFortranType + ACCKernelsDirective, Assignment, Call, CodeBlock, Literal, Loop, + Node, PSyDataNode, Reference, Return, Routine, Statement, WhileLoop) +from psyclone.psyir.symbols import ScalarType, UnsupportedFortranType from psyclone.psyir.transformations.region_trans import RegionTrans from psyclone.psyir.transformations.transformation_error import ( TransformationError) @@ -110,7 +112,8 @@ def apply(self, node, options=None): parent.children.insert(start_index, directive) - def validate(self, nodes, options=None): + def validate(self, nodes: Union[Node, List[Node]], + options: dict = None) -> None: # pylint: disable=signature-differs ''' Check that we can safely enclose the supplied node or list of nodes @@ -124,6 +127,11 @@ def validate(self, nodes, options=None): :param bool options["disable_loop_check"]: whether to disable the check that the supplied region contains 1 or more loops. Default is False (i.e. the check is enabled). + :param bool options["allow_string"]: whether to allow the + transformation on assignments involving character types. Defaults + to False. + :param bool options["verbose"]: log the reason the validation failed, + at the moment with a comment in the provided PSyIR node. :raises NotImplementedError: if the supplied Nodes belong to a GOInvokeSchedule. @@ -133,8 +141,13 @@ def validate(self, nodes, options=None): a routine that is not available on the accelerator. :raises TransformationError: if there are no Loops within the proposed region and options["disable_loop_check"] is not True. + :raises TransformationError: if any assignments in the region contain a + character type child and the allow_strings option is not set. ''' + if not options: + options = {} + # Ensure we are always working with a list of nodes, even if only # one was supplied via the `nodes` argument. node_list = self.get_node_list(nodes) @@ -148,6 +161,10 @@ def validate(self, nodes, options=None): "GOcean InvokeSchedules") super().validate(node_list, options) + # Any errors below this point will optionally log the resason, which + # at the moment means adding a comment in the output code + verbose = options.get("verbose", False) + # The regex we use to determine whether a character declaration is # of assumed size ('LEN=*' or '*(*)'). # TODO #2612 - improve the fparser2 frontend support for character @@ -180,6 +197,31 @@ def validate(self, nodes, options=None): f"Assumed-size character variables cannot be enclosed " f"in an OpenACC region but found " f"'{stmt.debug_string()}'") + # Check there are no character assignments in the region as these + # cause various problems with (at least) NVHPC <= 24.5 + if not options.get("allow_string", False): + for assign in node.walk(Assignment): + for child in assign.walk((Literal, Reference)): + try: + forbid = ScalarType.Intrinsic.CHARACTER + if (child.is_character(unknown_as=False) or + child.symbol.datatype.intrinsic == forbid): + message = ( + f"{self.name} does not permit assignments " + f"involving character variables by default" + f" (use the 'allow_string' option to " + f"include them)") + if verbose: + assign.append_preceding_comment(message) + # pylint: disable=cell-var-from-loop + raise TransformationError(LazyString( + lambda: f"{message}, but found:" + f"\n{assign.debug_string()}")) + except (NotImplementedError, AttributeError): + # We cannot always get the datatype, we ignore this + # for now + pass + # Check that any called routines are supported on the device. for icall in node.walk(Call): if not icall.is_available_on_device(): diff --git a/src/psyclone/tests/psyir/transformations/acc_kernels_trans_test.py b/src/psyclone/tests/psyir/transformations/acc_kernels_trans_test.py index 8216017652..e569d01b39 100644 --- a/src/psyclone/tests/psyir/transformations/acc_kernels_trans_test.py +++ b/src/psyclone/tests/psyir/transformations/acc_kernels_trans_test.py @@ -438,19 +438,33 @@ def test_no_assumed_size_char_in_kernels(fortran_reader): sub = psyir.walk(Routine)[0] acc_trans = ACCKernelsTrans() with pytest.raises(TransformationError) as err: - acc_trans.validate(sub.children[0], options={}) + acc_trans.validate(sub.children[0]) assert ("Assumed-size character variables cannot be enclosed in an " "OpenACC region but found 'if (assumed_size_char == 'literal')" in str(err.value)) with pytest.raises(TransformationError) as err: - acc_trans.validate(sub.children[1], options={}) + acc_trans.validate(sub.children[1], options={"allow_string": True}) assert ("Assumed-size character variables cannot be enclosed in an OpenACC" " region but found 'assumed_size_char(:LEN(explicit_size_char)) = " in str(err.value)) with pytest.raises(TransformationError) as err: - acc_trans.validate(sub.children[2], options={}) + acc_trans.validate(sub.children[2], options={"allow_string": True}) assert ("Cannot include 'ACHAR(9)' in an OpenACC region because " "it is not available on GPU" in str(err.value)) + # Check that the character assignment is excluded by default. + with pytest.raises(TransformationError) as err: + acc_trans.validate(sub.children[2]) + assert ("ACCKernelsTrans does not permit assignments involving character " + "variables by default (use the 'allow_string' option to include " + "them), but found:" in str(err.value)) + # Check the verbose option. + with pytest.raises(TransformationError) as err: + acc_trans.validate(sub.children[2], options={"verbose": True}) + assert (sub.children[2].preceding_comment == + "ACCKernelsTrans does not permit assignments involving character " + "variables by default (use the 'allow_string' option to include " + "them)") + # String with explicit length is fine. acc_trans.validate(sub.children[3], options={}) # CHARACTER*(*) notation is also rejected. From ef855301a41910cf38ad6d49e20d92dff96cf736 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 17 Jan 2025 14:32:45 +0000 Subject: [PATCH 29/58] #2854 refactor checking code to remove duplication --- .../transformations/acc_kernels_trans.py | 37 ++++-------- .../arrayassignment2loops_trans.py | 58 +++++++++++++------ 2 files changed, 50 insertions(+), 45 deletions(-) diff --git a/src/psyclone/psyir/transformations/acc_kernels_trans.py b/src/psyclone/psyir/transformations/acc_kernels_trans.py index a7de3b9389..cfc1c3f681 100644 --- a/src/psyclone/psyir/transformations/acc_kernels_trans.py +++ b/src/psyclone/psyir/transformations/acc_kernels_trans.py @@ -42,11 +42,12 @@ from typing import List, Union from psyclone import psyGen -from psyclone.errors import LazyString from psyclone.psyir.nodes import ( - ACCKernelsDirective, Assignment, Call, CodeBlock, Literal, Loop, + ACCKernelsDirective, Assignment, Call, CodeBlock, Loop, Node, PSyDataNode, Reference, Return, Routine, Statement, WhileLoop) -from psyclone.psyir.symbols import ScalarType, UnsupportedFortranType +from psyclone.psyir.symbols import UnsupportedFortranType +from psyclone.psyir.transformations.arrayassignment2loops_trans import ( + ArrayAssignment2LoopsTrans) from psyclone.psyir.transformations.region_trans import RegionTrans from psyclone.psyir.transformations.transformation_error import ( TransformationError) @@ -161,10 +162,6 @@ def validate(self, nodes: Union[Node, List[Node]], "GOcean InvokeSchedules") super().validate(node_list, options) - # Any errors below this point will optionally log the resason, which - # at the moment means adding a comment in the output code - verbose = options.get("verbose", False) - # The regex we use to determine whether a character declaration is # of assumed size ('LEN=*' or '*(*)'). # TODO #2612 - improve the fparser2 frontend support for character @@ -200,27 +197,13 @@ def validate(self, nodes: Union[Node, List[Node]], # Check there are no character assignments in the region as these # cause various problems with (at least) NVHPC <= 24.5 if not options.get("allow_string", False): + message = ( + f"{self.name} does not permit assignments involving " + f"character variables by default (use the 'allow_string' " + f"option to include them)") for assign in node.walk(Assignment): - for child in assign.walk((Literal, Reference)): - try: - forbid = ScalarType.Intrinsic.CHARACTER - if (child.is_character(unknown_as=False) or - child.symbol.datatype.intrinsic == forbid): - message = ( - f"{self.name} does not permit assignments " - f"involving character variables by default" - f" (use the 'allow_string' option to " - f"include them)") - if verbose: - assign.append_preceding_comment(message) - # pylint: disable=cell-var-from-loop - raise TransformationError(LazyString( - lambda: f"{message}, but found:" - f"\n{assign.debug_string()}")) - except (NotImplementedError, AttributeError): - # We cannot always get the datatype, we ignore this - # for now - pass + ArrayAssignment2LoopsTrans.validate_no_char( + assign, message, options) # Check that any called routines are supported on the device. for icall in node.walk(Call): diff --git a/src/psyclone/psyir/transformations/arrayassignment2loops_trans.py b/src/psyclone/psyir/transformations/arrayassignment2loops_trans.py index ada451e0ae..150c97bbda 100644 --- a/src/psyclone/psyir/transformations/arrayassignment2loops_trans.py +++ b/src/psyclone/psyir/transformations/arrayassignment2loops_trans.py @@ -45,7 +45,7 @@ from psyclone.errors import LazyString from psyclone.psyGen import Transformation from psyclone.psyir.nodes import ( - Assignment, Call, IntrinsicCall, Loop, Literal, Range, Reference, + Assignment, Call, IntrinsicCall, Loop, Literal, Node, Range, Reference, CodeBlock, Routine, BinaryOperation) from psyclone.psyir.nodes.array_mixin import ArrayMixin from psyclone.psyir.symbols import ( @@ -285,23 +285,10 @@ def validate(self, node, options=None): # If we allow string arrays then we can skip the check. if not options.get("allow_string", False): - for child in node.walk((Literal, Reference)): - try: - forbidden = ScalarType.Intrinsic.CHARACTER - if (child.is_character(unknown_as=False) or - (child.symbol.datatype.intrinsic == forbidden)): - message = (f"{self.name} does not expand ranges " - f"on character arrays by default (use the" - f"'allow_string' option to expand them)") - if verbose: - node.append_preceding_comment(message) - # pylint: disable=cell-var-from-loop - raise TransformationError(LazyString( - lambda: f"{message}, but found:" - f"\n{node.debug_string()}")) - except (NotImplementedError, AttributeError): - # We cannot always get the datatype, we ignore this for now - pass + message = (f"{self.name} does not expand ranges " + f"on character arrays by default (use the" + f"'allow_string' option to expand them)") + self.validate_no_char(node, message, options) # We don't accept calls that are not guaranteed to be elemental for call in node.rhs.walk(Call): @@ -372,6 +359,41 @@ def validate(self, node, options=None): raise TransformationError(LazyString( lambda: f"{message} In:\n{node.debug_string()}")) + @staticmethod + def validate_no_char(node: Node, message: str, options: dict) -> None: + ''' + Check that there is no character variable accessed in the sub-tree with + the supplied node at its root. + + :param node: the root node to check for character assignments. + :param message: the message to use if a character assignment is found. + :param options: any options that apply to this check. + :param bool options["verbose"]: log the reason the validation failed, + at the moment with a comment in the provided PSyIR node. + + :raises TransformationError: if the supplied node contains a + child of character type. + + ''' + # Whether or not to log the resason for raising an error. At the moment + # "logging" means adding a comment in the output code. + verbose = options.get("verbose", False) + + for child in node.walk((Literal, Reference)): + try: + forbidden = ScalarType.Intrinsic.CHARACTER + if (child.is_character(unknown_as=False) or + (child.symbol.datatype.intrinsic == forbidden)): + if verbose: + node.append_preceding_comment(message) + # pylint: disable=cell-var-from-loop + raise TransformationError(LazyString( + lambda: f"{message}, but found:" + f"\n{node.debug_string()}")) + except (NotImplementedError, AttributeError): + # We cannot always get the datatype, we ignore this for now + pass + __all__ = [ 'ArrayAssignment2LoopsTrans'] From ade8c7008c1343f410e490d159366b805fdb6b01 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 17 Jan 2025 15:15:47 +0000 Subject: [PATCH 30/58] #2271 bring in SymbolTable fix from 2845 branch --- src/psyclone/psyir/symbols/symbol_table.py | 13 +++++++++---- .../tests/psyir/symbols/symbol_table_test.py | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/psyclone/psyir/symbols/symbol_table.py b/src/psyclone/psyir/symbols/symbol_table.py index d3e09158e4..9c45b5f3ba 100644 --- a/src/psyclone/psyir/symbols/symbol_table.py +++ b/src/psyclone/psyir/symbols/symbol_table.py @@ -1583,12 +1583,12 @@ def resolve_imports(self, container_symbols=None, symbol_target=None): :type symbol_target: Optional[ :py:class:`psyclone.psyir.symbols.Symbol`] - :raises SymbolError: if a symbol name clash is found between multiple \ + :raises SymbolError: if a symbol name clash is found between multiple imports or an import and a local symbol. - :raises TypeError: if the provided container_symbols is not a list of \ + :raises TypeError: if the provided container_symbols is not a list of ContainerSymbols. :raises TypeError: if the provided symbol_target is not a Symbol. - :raises KeyError: if a symbol_target has been specified but this has \ + :raises KeyError: if a symbol_target has been specified but this has not been found in any of the searched containers. ''' @@ -1617,7 +1617,7 @@ def resolve_imports(self, container_symbols=None, symbol_target=None): try: external_container = c_symbol.find_container_psyir( local_node=self.node) - # pylint: disable=broad-except + # pylint: disable-next=broad-except except Exception: # Ignore this container if the associated module file has not # been found in the given include_path or any issue has arisen @@ -1625,6 +1625,11 @@ def resolve_imports(self, container_symbols=None, symbol_target=None): # TODO #11: It would be useful to log this. continue + if not external_container: + # Failed to get a Container (possibly due to parsing or raising + # errors). + continue + # Examine all Symbols defined within this external container for symbol in external_container.symbol_table.symbols: if symbol.visibility == Symbol.Visibility.PRIVATE: diff --git a/src/psyclone/tests/psyir/symbols/symbol_table_test.py b/src/psyclone/tests/psyir/symbols/symbol_table_test.py index 6e29095b56..f220e7b8f9 100644 --- a/src/psyclone/tests/psyir/symbols/symbol_table_test.py +++ b/src/psyclone/tests/psyir/symbols/symbol_table_test.py @@ -2877,6 +2877,20 @@ def test_resolve_imports(fortran_reader, tmpdir, monkeypatch): assert a_2.visibility == symbols.Symbol.Visibility.PRIVATE +def test_resolve_imports_missing_container(monkeypatch): + ''' + Test that a clean failure to get Container PSyIR does not cause problems. + ''' + table = symbols.SymbolTable() + csym = symbols.ContainerSymbol("a_mod") + # Monkeypatch the find_container_psyir() method of this ContainerSymbol + # so that it returns None. + monkeypatch.setattr(csym, "find_container_psyir", lambda local_node: None) + table.add(csym) + # Resolving imports should run without problems. + table.resolve_imports() + + @pytest.mark.usefixtures("clear_module_manager_instance") def test_resolve_imports_different_capitalization( fortran_reader, tmpdir, monkeypatch): From c644789ec8ce39572392e02c4f223097f4c74223 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 20 Jan 2025 09:44:41 +0000 Subject: [PATCH 31/58] #2854 ensure lowercase used for component name when getting type --- src/psyclone/psyir/nodes/structure_reference.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/psyclone/psyir/nodes/structure_reference.py b/src/psyclone/psyir/nodes/structure_reference.py index ac04a2e1e9..2479aba66a 100644 --- a/src/psyclone/psyir/nodes/structure_reference.py +++ b/src/psyclone/psyir/nodes/structure_reference.py @@ -336,7 +336,8 @@ def _get_cursor_shape(cursor, cursor_type): if not isinstance(cursor_type, (UnresolvedType, UnsupportedType)): # Once we've hit an Unresolved/UnsupportedType the cursor_type # will remain set to that as we can't do any better. - cursor_type = cursor_type.components[cursor.name].datatype + cursor_type = cursor_type.components[ + cursor.name.lower()].datatype try: cursor_shape = _get_cursor_shape(cursor, cursor_type) except NotImplementedError: From 4c659860b432beaf4632de754fb7ef1cf22b351f Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 20 Jan 2025 11:01:28 +0000 Subject: [PATCH 32/58] #2854 alter StructureType so that keys for components are lowercase. --- src/psyclone/psyir/symbols/datatypes.py | 17 ++++++++++------- .../psyir/transformations/acc_kernels_trans.py | 9 +++++++-- .../psyir/nodes/structure_reference_test.py | 10 +++++----- .../tests/psyir/symbols/datatype_test.py | 5 ++++- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/psyclone/psyir/symbols/datatypes.py b/src/psyclone/psyir/symbols/datatypes.py index 02e16f4861..f97b12079e 100644 --- a/src/psyclone/psyir/symbols/datatypes.py +++ b/src/psyclone/psyir/symbols/datatypes.py @@ -1050,23 +1050,25 @@ def add(self, name, datatype, visibility, initial_value, f"be a 'str' but got " f"'{type(inline_comment).__name__}'") - self._components[name] = self.ComponentType(name, datatype, visibility, - initial_value) + key_name = name.lower() + self._components[key_name] = self.ComponentType(name, datatype, + visibility, + initial_value) # Use object.__setattr__ due to the frozen nature of ComponentType - object.__setattr__(self._components[name], + object.__setattr__(self._components[key_name], "_preceding_comment", preceding_comment) - object.__setattr__(self._components[name], + object.__setattr__(self._components[key_name], "_inline_comment", inline_comment) def lookup(self, name): ''' - :returns: the ComponentType tuple describing the named member of this \ + :returns: the ComponentType tuple describing the named member of this StructureType. :rtype: :py:class:`psyclone.psyir.symbols.StructureType.ComponentType` ''' - return self._components[name] + return self._components[name.lower()] def __eq__(self, other): ''' @@ -1111,7 +1113,8 @@ def replace_symbols_using(self, table): if component.initial_value: component.initial_value.replace_symbols_using(table) # Construct the new ComponentType - new_components[component.name] = StructureType.ComponentType( + key_name = component.name.lower() + new_components[key_name] = StructureType.ComponentType( component.name, new_type, component.visibility, component.initial_value) self._components = new_components diff --git a/src/psyclone/psyir/transformations/acc_kernels_trans.py b/src/psyclone/psyir/transformations/acc_kernels_trans.py index cfc1c3f681..9acb73a68a 100644 --- a/src/psyclone/psyir/transformations/acc_kernels_trans.py +++ b/src/psyclone/psyir/transformations/acc_kernels_trans.py @@ -77,12 +77,12 @@ class ACCKernelsTrans(RegionTrans): excluded_node_types = (CodeBlock, Return, PSyDataNode, psyGen.HaloExchange, WhileLoop) - def apply(self, node, options=None): + def apply(self, node: Union[Node, List[Node]], options: dict = None): ''' Enclose the supplied list of PSyIR nodes within an OpenACC Kernels region. - :param node: a node or list of nodes in the PSyIR to enclose. + :param node: the node(s) in the PSyIR to enclose. :type node: :py:class:`psyclone.psyir.nodes.Node` | list[:py:class:`psyclone.psyir.nodes.Node`] :param options: a dictionary with options for transformations. @@ -91,6 +91,11 @@ def apply(self, node, options=None): region should have the 'default present' attribute (indicating that data is already on the accelerator). When using managed memory this option should be False. + :param bool options["allow_string"]: whether to allow the + transformation on assignments involving character types. Defaults + to False. + :param bool options["verbose"]: log the reason the validation failed, + at the moment with a comment in the provided PSyIR node. ''' # Ensure we are always working with a list of nodes, even if only diff --git a/src/psyclone/tests/psyir/nodes/structure_reference_test.py b/src/psyclone/tests/psyir/nodes/structure_reference_test.py index 7a0ec8e921..63bef89db4 100644 --- a/src/psyclone/tests/psyir/nodes/structure_reference_test.py +++ b/src/psyclone/tests/psyir/nodes/structure_reference_test.py @@ -232,7 +232,7 @@ def test_struc_ref_datatype(): '''Test the datatype() method of StructureReference.''' atype = symbols.ArrayType(symbols.REAL_TYPE, [10, 8]) rtype = symbols.StructureType.create([ - ("gibber", symbols.BOOLEAN_TYPE, symbols.Symbol.Visibility.PUBLIC, + ("Gibber", symbols.BOOLEAN_TYPE, symbols.Symbol.Visibility.PUBLIC, None)]) # TODO #1031. Currently cannot create an array of StructureTypes # directly - have to have a DataTypeSymbol. @@ -241,8 +241,8 @@ def test_struc_ref_datatype(): grid_type = symbols.StructureType.create([ ("nx", symbols.INTEGER_TYPE, symbols.Symbol.Visibility.PUBLIC, None), ("data", atype, symbols.Symbol.Visibility.PRIVATE, None), - # A single member of structure type. - ("roger", rtype, symbols.Symbol.Visibility.PUBLIC, None), + # A single member of structure type with a mixed-case name. + ("roGEr", rtype, symbols.Symbol.Visibility.PUBLIC, None), # An array of structure type. ("titty", artype, symbols.Symbol.Visibility.PUBLIC, None)]) # Symbol with type defined by StructureType @@ -266,8 +266,8 @@ def test_struc_ref_datatype(): gref = nodes.StructureReference.create(ssym, ["roger", "gibber"]) assert gref.datatype == symbols.BOOLEAN_TYPE - # Reference to structure member of structure - rref = nodes.StructureReference.create(ssym, ["roger"]) + # Reference to structure member of structure using different capitalisation + rref = nodes.StructureReference.create(ssym, ["rogeR"]) assert rref.datatype == rtype # Reference to single element of array of structures within a structure diff --git a/src/psyclone/tests/psyir/symbols/datatype_test.py b/src/psyclone/tests/psyir/symbols/datatype_test.py index 27382f3cfa..09df5046a1 100644 --- a/src/psyclone/tests/psyir/symbols/datatype_test.py +++ b/src/psyclone/tests/psyir/symbols/datatype_test.py @@ -894,8 +894,11 @@ def test_structure_type(): stype = StructureType() assert str(stype) == "StructureType<>" assert not stype.components - stype.add("flag", INTEGER_TYPE, Symbol.Visibility.PUBLIC, None) + stype.add("flaG", INTEGER_TYPE, Symbol.Visibility.PUBLIC, None) + # Lookup is not case sensitive flag = stype.lookup("flag") + # But we retain information on the original capitalisation + assert flag.name == "flaG" assert not flag.initial_value assert isinstance(flag, StructureType.ComponentType) stype.add("flag2", INTEGER_TYPE, Symbol.Visibility.PUBLIC, From c947427e18e9639601d2b6ea2a3fe649d46b96d0 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 20 Jan 2025 11:48:13 +0000 Subject: [PATCH 33/58] #2271 fix OMPDirective.infer_sharing_attributes now that reference_accesses returns enquiry accesses. --- src/psyclone/psyir/nodes/omp_directives.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/psyclone/psyir/nodes/omp_directives.py b/src/psyclone/psyir/nodes/omp_directives.py index 61ba4e03a1..1dc091dbf9 100644 --- a/src/psyclone/psyir/nodes/omp_directives.py +++ b/src/psyclone/psyir/nodes/omp_directives.py @@ -1596,6 +1596,8 @@ def infer_sharing_attributes(self): var_accesses = VariablesAccessInfo() self.reference_accesses(var_accesses) for signature in var_accesses.all_signatures: + if not var_accesses[signature].has_data_access: + continue accesses = var_accesses[signature].all_accesses # TODO #2094: var_name only captures the top-level # component in the derived type accessor. If the attributes @@ -1619,7 +1621,7 @@ def infer_sharing_attributes(self): continue # All arrays not explicitly marked as threadprivate are shared - if accesses[0].is_array(): + if any(accs.is_array() for accs in accesses): continue # If a variable is only accessed once, it is either an error From d59a610a57efdf02b4c3c0f914b290de010c977f Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Mon, 20 Jan 2025 16:06:31 +0000 Subject: [PATCH 34/58] #2271 fix bug in new code and extend test --- src/psyclone/psyir/nodes/omp_directives.py | 2 +- src/psyclone/tests/psyir/nodes/omp_directives_test.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/psyclone/psyir/nodes/omp_directives.py b/src/psyclone/psyir/nodes/omp_directives.py index 1dc091dbf9..af0ae7a541 100644 --- a/src/psyclone/psyir/nodes/omp_directives.py +++ b/src/psyclone/psyir/nodes/omp_directives.py @@ -1596,7 +1596,7 @@ def infer_sharing_attributes(self): var_accesses = VariablesAccessInfo() self.reference_accesses(var_accesses) for signature in var_accesses.all_signatures: - if not var_accesses[signature].has_data_access: + if not var_accesses[signature].has_data_access(): continue accesses = var_accesses[signature].all_accesses # TODO #2094: var_name only captures the top-level diff --git a/src/psyclone/tests/psyir/nodes/omp_directives_test.py b/src/psyclone/tests/psyir/nodes/omp_directives_test.py index eabe3d632a..1acdb7800e 100644 --- a/src/psyclone/tests/psyir/nodes/omp_directives_test.py +++ b/src/psyclone/tests/psyir/nodes/omp_directives_test.py @@ -694,15 +694,17 @@ def test_directiveinfer_sharing_attributes_lfric(): def test_infer_sharing_attributes_with_explicitly_private_symbols( fortran_reader): ''' Tests the infer_sharing_attributes() method when some of the loops have - explictly declared private symbols. + explictly declared private symbols. Also test that non-data accesses to + array symbols are ignored. ''' psyir = fortran_reader.psyir_from_source(''' subroutine my_subroutine() integer :: i, j, scalar1, scalar2 - real, dimension(10) :: array + real, dimension(10) :: array, array2 do j = 1, 10 - do i = 1, 10 - array(i) = scalar2 + do i = 1, size(array, 1) + ! Access to array2 is type information rather than data + array(i) = scalar2 * size(array2, 1) enddo enddo end subroutine''') From 0ac4d11ef956a2628a9c81afa2d4abff0f171633 Mon Sep 17 00:00:00 2001 From: Sergi Siso Date: Tue, 21 Jan 2025 12:34:50 +0000 Subject: [PATCH 35/58] #2858 Store and recover explicit parenthesis over binary operations --- examples/nemo/scripts/utils.py | 10 +--- src/psyclone/psyir/backend/fortran.py | 18 +++--- src/psyclone/psyir/frontend/fparser2.py | 9 ++- src/psyclone/psyir/nodes/operation.py | 59 +++++++++++++++---- .../transformations/test_assignment_trans.py | 2 +- .../tests/psyir/backend/fortran_test.py | 12 ++-- .../tests/psyir/frontend/fparser2_test.py | 23 ++++++++ .../tests/psyir/nodes/operation_test.py | 23 ++++++++ 8 files changed, 122 insertions(+), 34 deletions(-) diff --git a/examples/nemo/scripts/utils.py b/examples/nemo/scripts/utils.py index e47c6f2891..a9e87e29f4 100755 --- a/examples/nemo/scripts/utils.py +++ b/examples/nemo/scripts/utils.py @@ -89,21 +89,13 @@ CONTAINS_STMT_FUNCTIONS = ["sbc_dcy"] # These files change the results from baseline when psyclone processes them -PASSTHROUGH_ISSUES = [ - "ldfslp.f90", # It has a '!dir$ NOVECTOR' that gets deleted by fparser -] +PASSTHROUGH_ISSUES = [] # These files change the results from the baseline when psyclone adds # parallelisation dirctives PARALLELISATION_ISSUES = [ "ldfc1d_c2d.f90", "tramle.f90", - # These files get the same results when parallelised by: "nvfortran -O1 - # -Kieee -nofma -Mnovect" but had to be excluded by other compiler/flags - # TODO #2787: May solve these issues. - "icedyn_rhg_evp.f90", - "domqco.f90", - "dynspg_ts.f90", ] diff --git a/src/psyclone/psyir/backend/fortran.py b/src/psyclone/psyir/backend/fortran.py index 3617d4fe73..18bede53d3 100644 --- a/src/psyclone/psyir/backend/fortran.py +++ b/src/psyclone/psyir/backend/fortran.py @@ -1282,14 +1282,16 @@ def binaryoperation_node(self, node): return f"({lhs} {fort_oper} {rhs})" if precedence(fort_oper) == precedence(parent_fort_oper): # We still may need to enforce precedence - if (isinstance(parent, UnaryOperation) or - (isinstance(parent, BinaryOperation) and - parent.children[1] == node)): - # We need brackets to enforce precedence - # as a) a unary operator is performed - # before a binary operator and b) floating - # point operations are not actually - # associative due to rounding errors. + if ( + # If parent is a UnaryOperation + isinstance(parent, UnaryOperation) or + # Or it is a BinaryOperation ... + (isinstance(parent, BinaryOperation) and + # ... with right-to-left precedence + (parent.children[1] == node) or + # ... or originally had explicit parenthesis + node.has_explicit_grouping) + ): return f"({lhs} {fort_oper} {rhs})" return f"{lhs} {fort_oper} {rhs}" except KeyError as error: diff --git a/src/psyclone/psyir/frontend/fparser2.py b/src/psyclone/psyir/frontend/fparser2.py index af41068e57..09f31a3861 100644 --- a/src/psyclone/psyir/frontend/fparser2.py +++ b/src/psyclone/psyir/frontend/fparser2.py @@ -4895,7 +4895,14 @@ def _parenthesis_handler(self, node, parent): # Use the items[1] content of the node as it contains the required # information (items[0] and items[2] just contain the left and right # brackets as strings so can be disregarded. - return self._create_child(node.items[1], parent) + new_node = self._create_child(node.items[1], parent) + + # Explicit parenthesis on BinaryOperations are sometimes needed for + # reproducibility, so we store the fact that they are here. + if isinstance(new_node, BinaryOperation): + new_node.has_explicit_grouping = True + + return new_node def _part_ref_handler(self, node, parent): ''' diff --git a/src/psyclone/psyir/nodes/operation.py b/src/psyclone/psyir/nodes/operation.py index 37e8490df4..c1c664144d 100644 --- a/src/psyclone/psyir/nodes/operation.py +++ b/src/psyclone/psyir/nodes/operation.py @@ -54,13 +54,13 @@ class Operation(DataNode, metaclass=ABCMeta): Abstract base class for PSyIR nodes representing operators. :param operator: the operator used in the operation. - :type operator: :py:class:`psyclone.psyir.nodes.UnaryOperation.Operator` \ - or :py:class:`psyclone.psyir.nodes.BinaryOperation.Operator` or \ - :py:class:`psyclone.psyir.nodes.NaryOperation.Operator` + :type operator: Union[ + :py:class:`psyclone.psyir.nodes.UnaryOperation.Operator`, + :py:class:`psyclone.psyir.nodes.BinaryOperation.Operator`] :param parent: the parent node of this Operation in the PSyIR. - :type parent: :py:class:`psyclone.psyir.nodes.Node` + :type parent: Optional[:py:class:`psyclone.psyir.nodes.Node`] - :raises TypeError: if the supplied operator is not an instance of \ + :raises TypeError: if the supplied operator is not an instance of self.Operator. ''' @@ -101,9 +101,9 @@ def operator(self): Return the operator. :returns: Enumerated type capturing the operator. - :rtype: :py:class:`psyclone.psyir.nodes.UnaryOperation.Operator` or \ - :py:class:`psyclone.psyir.nodes.BinaryOperation.Operator` or \ - :py:class:`psyclone.psyir.nodes.NaryOperation.Operator` + :rtype: Union[ + :py:class:`psyclone.psyir.nodes.UnaryOperation.Operator` + :py:class:`psyclone.psyir.nodes.BinaryOperation.Operator`] ''' return self._operator @@ -209,6 +209,14 @@ class BinaryOperation(Operation): Node representing a BinaryOperation expression. As such it has two operands as children 0 and 1, and an attribute with the operator type. + :param operator: the operator used in the operation. + :type operator: :py:class:`psyclone.psyir.nodes.BinaryOperation.Operator` + :param bool has_explicit_grouping: Whether this operation should be + surrounded by explicit grouping syntax (e.g. parenthesis) regarless of + not breaking any other precedence rules. Defaults to False. + :param parent: the parent node of this Operation in the PSyIR. + :type parent: Optional[:py:class:`psyclone.psyir.nodes.Node`] + ''' #: The Operators that a BinaryOperation can represent. Operator = Enum('Operator', [ @@ -225,6 +233,10 @@ class BinaryOperation(Operation): # Textual description of the node. _children_valid_format = "DataNode, DataNode" + def __init__(self, operator, has_explicit_grouping=False, parent=None): + super().__init__(operator, parent=parent) + self.has_explicit_grouping = has_explicit_grouping + @staticmethod def _validate_child(position, child): ''' @@ -239,7 +251,7 @@ def _validate_child(position, child): return position in (0, 1) and isinstance(child, DataNode) @staticmethod - def create(operator, lhs, rhs): + def create(operator, lhs, rhs, has_explicit_grouping=False): '''Create a BinaryOperator instance given an operator and lhs and rhs child instances with optional names. @@ -256,6 +268,9 @@ def create(operator, lhs, rhs): argument and the PSyIR node. :type rhs: Union[:py:class:`psyclone.psyir.nodes.Node`, Tuple[str, :py:class:`psyclone.psyir.nodes.Node`]] + :param bool has_explicit_grouping: Whether this operation should be + surrounded by explicit grouping syntax (e.g. parenthesis) regarless of + not breaking any other precedence rules. Defaults to False. :returns: a BinaryOperator instance. :rtype: :py:class:`psyclone.psyir.nodes.BinaryOperation` @@ -270,11 +285,35 @@ def create(operator, lhs, rhs): f"operator argument in create method of BinaryOperation class " f"should be a PSyIR BinaryOperation Operator but found " f"'{type(operator).__name__}'.") - binary_op = BinaryOperation(operator) + binary_op = BinaryOperation(operator, has_explicit_grouping) binary_op.addchild(lhs) binary_op.addchild(rhs) return binary_op + @property + def has_explicit_grouping(self) -> bool: + ''' + :returns: Whether this operation should be surrounded by explicit + grouping syntax (e.g. parenthesis) regarless of not breaking any + other precedence rules. + ''' + return self._has_explicit_grouping + + @has_explicit_grouping.setter + def has_explicit_grouping(self, value: bool): + ''' + :param value: Whether this operation should be surrounded by explicit + grouping syntax (e.g. parenthesis) regarless of not breaking any + other precedence rules. + + :raises TypeError: if the provided value is not a boolean. + + ''' + if not isinstance(value, bool): + raise TypeError(f"BinaryOperation.has_explicit_grouping must be " + f"boolean, but found '{type(value).__name__}'.") + self._has_explicit_grouping = value + def _get_result_precision(self, precisions): ''' Compares the two precisions to determine the precision of the result diff --git a/src/psyclone/tests/psyad/transformations/test_assignment_trans.py b/src/psyclone/tests/psyad/transformations/test_assignment_trans.py index c43b33916d..4fd8acdb03 100644 --- a/src/psyclone/tests/psyad/transformations/test_assignment_trans.py +++ b/src/psyclone/tests/psyad/transformations/test_assignment_trans.py @@ -350,7 +350,7 @@ def test_multi_add(tmpdir): " real, dimension(10) :: a\n real, dimension(10) :: b\n" " real, dimension(10) :: c\n real, dimension(10) :: d\n" " integer :: i\n integer :: j\n integer :: n\n\n" - " b(j) = b(j) + 3 / n * a(i + 2)\n" + " b(j) = b(j) + (3 / n) * a(i + 2)\n" " c(1) = c(1) + a(i + 2) / (2 * n)\n" " d(n) = d(n) + a(i + 2)\n" " a(i + 2) = 0.0\n\n") diff --git a/src/psyclone/tests/psyir/backend/fortran_test.py b/src/psyclone/tests/psyir/backend/fortran_test.py index fea5b63625..ab06d947ae 100644 --- a/src/psyclone/tests/psyir/backend/fortran_test.py +++ b/src/psyclone/tests/psyir/backend/fortran_test.py @@ -1106,14 +1106,15 @@ def test_fw_binaryoperator_precedence(fortran_reader, fortran_writer, tmpdir): " a = b * (c + d)\n" " a = b * c + d\n" " a = (b * c) + d\n" - " a = b * c * d * a\n" - " a = (((b * c) * d) * a)\n" - " a = (b * (c * (d * a)))\n" + " a = b * c * d * a\n" # Left-to-right + " a = (((b * c) * d) * a)\n" # Left-to-right with explicit par. + " a = (b * (c * (d * a)))\n" # Right-to-left " a = -(a + b)\n" " e = .not.(e .and. (f .or. g))\n" " e = (((.not.e) .and. f) .or. g)\n" " e = (e .and. (f .eqv. g))\n" " e = (e .and. f .neqv. g)\n" + " a = ((a + b) + (c + d)) / a * b\n" "end subroutine tmp\n" "end module test") schedule = fortran_reader.psyir_from_source(code) @@ -1124,13 +1125,14 @@ def test_fw_binaryoperator_precedence(fortran_reader, fortran_writer, tmpdir): " a = b * c + d\n" " a = b * c + d\n" " a = b * c * d * a\n" - " a = b * c * d * a\n" + " a = ((b * c) * d) * a\n" " a = b * (c * (d * a))\n" " a = -(a + b)\n" " e = .NOT.(e .AND. (f .OR. g))\n" " e = .NOT.e .AND. f .OR. g\n" " e = e .AND. (f .EQV. g)\n" - " e = e .AND. f .NEQV. g\n") + " e = e .AND. f .NEQV. g\n" + " a = ((a + b) + (c + d)) / a * b\n") assert expected in result assert Compile(tmpdir).string_compiles(result) diff --git a/src/psyclone/tests/psyir/frontend/fparser2_test.py b/src/psyclone/tests/psyir/frontend/fparser2_test.py index e6b5d195e9..53c5cfdd12 100644 --- a/src/psyclone/tests/psyir/frontend/fparser2_test.py +++ b/src/psyclone/tests/psyir/frontend/fparser2_test.py @@ -1938,6 +1938,29 @@ def test_handling_parenthesis(): assert isinstance(new_node, BinaryOperation) +@pytest.mark.usefixtures("disable_declaration_check", "f2008_parser") +def test_handling_parenthesis_over_binary_op(): + ''' Test that fparser2 parenthesis are recorded in the appropriate + attribute when they are explicit over BinaryOperations. + ''' + reader = FortranStringReader("a = (a + b) + (c + d)") + fparser2parenthesis = Execution_Part.match(reader)[0][0] + + fake_parent = Schedule() + processor = Fparser2Reader() + processor.process_nodes(fake_parent, [fparser2parenthesis]) + + bop1 = fake_parent[0].rhs + bop2 = bop1.children[0] + bop3 = bop1.children[1] + + # The parent addition does not have explicit parenthesis + assert not bop1.has_explicit_grouping + # But the two inner ones have explict parenthesis syntax + assert bop2.has_explicit_grouping + assert bop3.has_explicit_grouping + + @pytest.mark.usefixtures("disable_declaration_check", "f2008_parser") def test_handling_array_product(): ''' Check that we correctly handle array products. diff --git a/src/psyclone/tests/psyir/nodes/operation_test.py b/src/psyclone/tests/psyir/nodes/operation_test.py index 1102d1c688..d9799657cf 100644 --- a/src/psyclone/tests/psyir/nodes/operation_test.py +++ b/src/psyclone/tests/psyir/nodes/operation_test.py @@ -67,6 +67,11 @@ def test_binaryoperation_initialization(): "BinaryOperation.Operator but found" in str(err.value) bop = BinaryOperation(BinaryOperation.Operator.ADD) assert bop._operator is BinaryOperation.Operator.ADD + assert not bop._has_explicit_grouping # Defaults to False + + bop = BinaryOperation(BinaryOperation.Operator.ADD, + has_explicit_grouping=True) + assert bop._has_explicit_grouping # But can be set to True def test_binaryoperation_operator(): @@ -78,6 +83,23 @@ def test_binaryoperation_operator(): assert binary_operation.operator == BinaryOperation.Operator.ADD +def test_binaryoperation_has_explicit_grouping(): + ''' Check the setter/getter methods of the has_explicit_grouping' of + BinaryOperation.''' + + bop = BinaryOperation(BinaryOperation.Operator.ADD) + assert not bop.has_explicit_grouping + + with pytest.raises(TypeError) as err: + bop.has_explicit_grouping = "3" + assert ("BinaryOperation.has_explicit_grouping must be boolean, but " + "found 'str'.") in str(err.value) + + # Try valid setter/getter + bop.has_explicit_grouping = True + assert bop.has_explicit_grouping + + def test_binaryoperation_node_str(): ''' Check the node_str method of the Binary Operation class.''' binary_operation = BinaryOperation(BinaryOperation.Operator.ADD) @@ -114,6 +136,7 @@ def test_binaryoperation_create(): rhs = Reference(DataSymbol("tmp2", REAL_SINGLE_TYPE)) oper = BinaryOperation.Operator.ADD binaryoperation = BinaryOperation.create(oper, lhs, rhs) + assert not binaryoperation._has_explicit_grouping check_links(binaryoperation, [lhs, rhs]) result = FortranWriter().binaryoperation_node(binaryoperation) assert result == "tmp1 + tmp2" From 185729a9d595a8faccb9b37cb0ccf46811947246 Mon Sep 17 00:00:00 2001 From: Sergi Siso Date: Tue, 21 Jan 2025 14:28:48 +0000 Subject: [PATCH 36/58] #2862 Fix doc build warning --- src/psyclone/psyir/nodes/operation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/psyclone/psyir/nodes/operation.py b/src/psyclone/psyir/nodes/operation.py index c1c664144d..405e5d4a86 100644 --- a/src/psyclone/psyir/nodes/operation.py +++ b/src/psyclone/psyir/nodes/operation.py @@ -169,11 +169,11 @@ def create(operator, operand): '''Create a UnaryOperation instance given an operator and operand. :param operator: the specified operator. - :type operator: + :type operator: \ :py:class:`psyclone.psyir.nodes.UnaryOperation.Operator` :param operand: the PSyIR node that oper operates on, or a tuple containing the name of the argument and the PSyIR node. - :type operand: Union[:py:class:`psyclone.psyir.nodes.Node` | + :type operand: Union[:py:class:`psyclone.psyir.nodes.Node`, Tuple[str, :py:class:`psyclone.psyir.nodes.Node`]] :returns: a UnaryOperation instance. From 8edda4e43113d2ed9db57e38925da339d205587d Mon Sep 17 00:00:00 2001 From: Sergi Siso Date: Tue, 21 Jan 2025 15:15:18 +0000 Subject: [PATCH 37/58] #2862 Fix reference guide issues --- src/psyclone/psyir/nodes/operation.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/psyclone/psyir/nodes/operation.py b/src/psyclone/psyir/nodes/operation.py index 405e5d4a86..eab1fa58c6 100644 --- a/src/psyclone/psyir/nodes/operation.py +++ b/src/psyclone/psyir/nodes/operation.py @@ -169,7 +169,7 @@ def create(operator, operand): '''Create a UnaryOperation instance given an operator and operand. :param operator: the specified operator. - :type operator: \ + :type operator: :py:class:`psyclone.psyir.nodes.UnaryOperation.Operator` :param operand: the PSyIR node that oper operates on, or a tuple containing the name of the argument and the PSyIR node. @@ -269,8 +269,8 @@ def create(operator, lhs, rhs, has_explicit_grouping=False): :type rhs: Union[:py:class:`psyclone.psyir.nodes.Node`, Tuple[str, :py:class:`psyclone.psyir.nodes.Node`]] :param bool has_explicit_grouping: Whether this operation should be - surrounded by explicit grouping syntax (e.g. parenthesis) regarless of - not breaking any other precedence rules. Defaults to False. + surrounded by explicit grouping syntax (e.g. parenthesis) regarless + of not breaking any other precedence rules. Defaults to False. :returns: a BinaryOperator instance. :rtype: :py:class:`psyclone.psyir.nodes.BinaryOperation` From 808a1bce090d8d81ea05d60cde0785f15877fe92 Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Wed, 22 Jan 2025 16:53:20 +1100 Subject: [PATCH 38/58] #2853 Fixed comments. --- src/psyclone/domain/gocean/kernel/psyir.py | 2 +- src/psyclone/psyGen.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/psyclone/domain/gocean/kernel/psyir.py b/src/psyclone/domain/gocean/kernel/psyir.py index 45bfe9a973..a21837ae96 100644 --- a/src/psyclone/domain/gocean/kernel/psyir.py +++ b/src/psyclone/domain/gocean/kernel/psyir.py @@ -252,7 +252,7 @@ def create_from_fortran_string(fortran_string): ''' kernel_metadata = GOceanKernelMetadata() - # Ensure the Fortran2003 parser is initialised. + # Ensure the Fortran parser is initialised. std = Config.get().fortran_standard _ = ParserFactory().create(std=std) reader = FortranStringReader(fortran_string) diff --git a/src/psyclone/psyGen.py b/src/psyclone/psyGen.py index bb9661a8ad..5fc3cdeb96 100644 --- a/src/psyclone/psyGen.py +++ b/src/psyclone/psyGen.py @@ -1576,7 +1576,7 @@ def ast(self): return self._fp2_ast # Use the fparser1 AST to generate Fortran source fortran = self._module_code.tofortran() - # Create an fparser2 Fortran2008 parser + # Create an fparser2 Fortran parser std = Config.get().fortran_standard my_parser = parser.ParserFactory().create(std=std) # Parse that Fortran using our parser From 497f589711e1ced1b5a887cb2839bb7f1a0bedc8 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 09:37:22 +0000 Subject: [PATCH 39/58] #2271 replace COMPILE_TIME with TYPE_INFO --- src/psyclone/core/access_type.py | 28 ++++++++++++++--------- src/psyclone/domain/lfric/arg_ordering.py | 2 +- src/psyclone/psyir/nodes/codeblock.py | 3 +++ src/psyclone/psyir/nodes/literal.py | 2 +- src/psyclone/psyir/nodes/scoping_node.py | 4 ++-- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/psyclone/core/access_type.py b/src/psyclone/core/access_type.py index 6e0b34a00f..6c75bed78b 100644 --- a/src/psyclone/core/access_type.py +++ b/src/psyclone/core/access_type.py @@ -48,22 +48,28 @@ class AccessType(Enum): READ = 1 WRITE = 2 READWRITE = 3 + #: Incremented from more than one cell column (see the LFRic API section + #: of the User Guide). INC = 4 + #: Read before incrementing. Requires that the outermost halo be clean (see + #: the LFRic API section of the User Guide). READINC = 5 SUM = 6 - # This is used internally to indicate unknown access type of - # a variable, e.g. when a variable is passed to a subroutine - # and the access type of this variable in the subroutine - # is unknown. + #: This is used internally to indicate unknown access type of + #: a variable, e.g. when a variable is passed to a subroutine + #: and the access type of this variable in the subroutine + #: is unknown. + #: TODO #2863 - VariablesAccessInfo does not currently consider + #: UNKNOWN accesses and it should! UNKNOWN = 7 - # A symbol representing a routine is called. + #: A symbol representing a routine is called. CALL = 8 - # The property/ies of a symbol is/are queried but the data it - # represents is not accessed (e.g. 'var' in SIZE(var, dim=1)). + #: The property/ies of a symbol is/are queried but the data it + #: represents is not accessed (e.g. 'var' in SIZE(var, dim=1)). INQUIRY = 9 - # The symbol is only accessed at compile time - e.g. precision - # of a literal or a type definition. - COMPILE_TIME = 10 + #: The symbol is used to access its type information (available at compile + #: time) - e.g. precision values such as 'wp' in 1.0_wp. + TYPE_INFO = 10 def __str__(self) -> str: '''Convert to a string representation, returning just the @@ -144,7 +150,7 @@ def non_data_accesses(): a symbol. :rtype: list[:py:class:`psyclone.core.AccessType`] ''' - return [AccessType.CALL, AccessType.COMPILE_TIME, AccessType.INQUIRY] + return [AccessType.CALL, AccessType.TYPE_INFO, AccessType.INQUIRY] # ---------- Documentation utils -------------------------------------------- # diff --git a/src/psyclone/domain/lfric/arg_ordering.py b/src/psyclone/domain/lfric/arg_ordering.py index 3e5773603b..ce00697750 100644 --- a/src/psyclone/domain/lfric/arg_ordering.py +++ b/src/psyclone/domain/lfric/arg_ordering.py @@ -763,7 +763,7 @@ def scalar(self, scalar_arg, var_accesses=None): metadata_posn=scalar_arg.metadata_index) if scalar_arg.precision and var_accesses is not None: var_accesses.add_access(Signature(scalar_arg.precision), - AccessType.COMPILE_TIME, self._kern) + AccessType.TYPE_INFO, self._kern) else: self.append(scalar_arg.name, var_accesses, mode=scalar_arg.access, metadata_posn=scalar_arg.metadata_index) diff --git a/src/psyclone/psyir/nodes/codeblock.py b/src/psyclone/psyir/nodes/codeblock.py index fbe9fcb830..8b6b4d4814 100644 --- a/src/psyclone/psyir/nodes/codeblock.py +++ b/src/psyclone/psyir/nodes/codeblock.py @@ -214,6 +214,9 @@ def reference_accesses(self, var_accesses: VariablesAccessInfo): them all as READWRITE, unfortunately, this will include the names of any routines that are called. + TODO #2863 - it would be better to use AccessType.UNKNOWN here but + currently VariablesAccessInfo does not consider that type of access. + This method makes use of :py:meth:`~psyclone.psyir.nodes.CodeBlock.get_symbol_names` and is therefore subject to the same limitations as that method. diff --git a/src/psyclone/psyir/nodes/literal.py b/src/psyclone/psyir/nodes/literal.py index 84fc78e508..d710df5596 100644 --- a/src/psyclone/psyir/nodes/literal.py +++ b/src/psyclone/psyir/nodes/literal.py @@ -182,7 +182,7 @@ def reference_accesses(self, access_info: VariablesAccessInfo): ''' if isinstance(self.datatype.precision, Symbol): access_info.add_access(Signature(self.datatype.precision.name), - AccessType.COMPILE_TIME, self) + AccessType.TYPE_INFO, self) def replace_symbols_using(self, table): ''' diff --git a/src/psyclone/psyir/nodes/scoping_node.py b/src/psyclone/psyir/nodes/scoping_node.py index 7da6106299..440166dfbd 100644 --- a/src/psyclone/psyir/nodes/scoping_node.py +++ b/src/psyclone/psyir/nodes/scoping_node.py @@ -199,13 +199,13 @@ def _get_accesses(dtype: DataType, info: VariablesAccessInfo): # a read (since it is resolved at compile time). access_info.add_access( Signature(dtype.precision.name), - AccessType.COMPILE_TIME, self) + AccessType.TYPE_INFO, self) if isinstance(dtype, DataTypeSymbol): # The use of a DataTypeSymbol in a declaration is a compile- # time access. info.add_access(Signature(dtype.name), - AccessType.COMPILE_TIME, self) + AccessType.TYPE_INFO, self) elif isinstance(dtype, StructureType): for cmpt in sym.datatype.components.values(): # Recurse for members of a StructureType From 542c4b68889bdd56bae9d3c824f1387a05dda524 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 10:35:16 +0000 Subject: [PATCH 40/58] #2271 update text output from VAI for vars with no data access --- src/psyclone/core/variables_access_info.py | 2 +- .../tests/core/variables_access_info_test.py | 18 +++++++++--------- src/psyclone/tests/dependency_test.py | 8 ++++---- .../tests/domain/lfric/lfric_builtins_test.py | 4 ++-- .../tests/psyir/nodes/intrinsic_call_test.py | 6 +++--- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/psyclone/core/variables_access_info.py b/src/psyclone/core/variables_access_info.py index 75ed8b9881..3e7af33b84 100644 --- a/src/psyclone/core/variables_access_info.py +++ b/src/psyclone/core/variables_access_info.py @@ -159,7 +159,7 @@ def __str__(self): mode = "WRITE" else: # The data associated with this signature is not accessed. - mode = "INQUIRY" + mode = "NO DATA ACCESS" output_list.append(f"{signature}: {mode}") return ", ".join(output_list) diff --git a/src/psyclone/tests/core/variables_access_info_test.py b/src/psyclone/tests/core/variables_access_info_test.py index 8839c3f980..dd85a82b69 100644 --- a/src/psyclone/tests/core/variables_access_info_test.py +++ b/src/psyclone/tests/core/variables_access_info_test.py @@ -420,7 +420,7 @@ def test_variables_access_info_shape_bounds(fortran_reader, function): # Array-shape accesses are 'inquiry' vai = VariablesAccessInfo(node1) - assert str(vai) == "a: INQUIRY, n: WRITE" + assert str(vai) == "a: NO DATA ACCESS, n: WRITE" # ----------------------------------------------------------------------------- @@ -433,10 +433,10 @@ def test_variables_access_info_domain_loop(): vai = VariablesAccessInfo(invoke.schedule) assert str(vai) == ( "a: READ, b: READ, f1_data: READWRITE, f2_data: " - "READWRITE, field_type: INQUIRY, i_def: INQUIRY, " - "map_w3: READ, mesh_type: INQUIRY, ncell_2d_no_halos: " + "READWRITE, field_type: NO DATA ACCESS, i_def: NO DATA ACCESS, " + "map_w3: READ, mesh_type: NO DATA ACCESS, ncell_2d_no_halos: " "READ, ndf_w3: READ, nlayers_f1: READ, nlayers_f2: READ, " - "r_def: INQUIRY, undf_w3: READ") + "r_def: NO DATA ACCESS, undf_w3: READ") # ----------------------------------------------------------------------------- @@ -456,9 +456,9 @@ def test_lfric_access_info(): assert ( "basis_w1_qr: READ, basis_w3_qr: READ, cell: READ+WRITE, " "diff_basis_w2_qr: READ, diff_basis_w3_qr: READ, f1_data: " - "READ+WRITE, f2_data: READ, field_type: INQUIRY, i_def: INQUIRY, " - "loop0_start: READ, loop0_stop: READ, m1_data: READ, m2_data: READ, " - "map_w1: READ, map_w2: READ, map_w3: READ, ndf_w1: READ, " - "ndf_w2: READ, ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, " - "np_z_qr: READ, r_def: INQUIRY, undf_w1: READ, undf_w2: READ, " + "READ+WRITE, f2_data: READ, field_type: NO DATA ACCESS, i_def: " + "NO DATA ACCESS, loop0_start: READ, loop0_stop: READ, m1_data: READ, " + "m2_data: READ, map_w1: READ, map_w2: READ, map_w3: READ, ndf_w1: " + "READ, ndf_w2: READ, ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, " + "np_z_qr: READ, r_def: NO DATA ACCESS, undf_w1: READ, undf_w2: READ, " "undf_w3: READ, weights_xy_qr: READ, weights_z_qr: READ" == str(vai)) diff --git a/src/psyclone/tests/dependency_test.py b/src/psyclone/tests/dependency_test.py index a1cd499be2..a12783c57b 100644 --- a/src/psyclone/tests/dependency_test.py +++ b/src/psyclone/tests/dependency_test.py @@ -291,11 +291,11 @@ def test_lfric(): var_accesses = VariablesAccessInfo(schedule) assert str(var_accesses) == ( "a: READ, cell: READ+WRITE, f1_data: READ+WRITE, f2_data: READ, " - "field_type: INQUIRY, i_def: INQUIRY, loop0_start: READ, " - "loop0_stop: READ, m1_data: READ, m2_data: READ, map_w1: READ, " + "field_type: NO DATA ACCESS, i_def: NO DATA ACCESS, loop0_start: " + "READ, loop0_stop: READ, m1_data: READ, m2_data: READ, map_w1: READ, " "map_w2: READ, map_w3: READ, ndf_w1: READ, ndf_w2: READ, ndf_w3: READ," - " nlayers_f1: READ, r_def: INQUIRY, undf_w1: READ, undf_w2: READ, " - "undf_w3: READ") + " nlayers_f1: READ, r_def: NO DATA ACCESS, undf_w1: READ, undf_w2: " + "READ, undf_w3: READ") def test_lfric_kern_cma_args(): diff --git a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py index 5f7a835d37..c2f2c99ff0 100644 --- a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py +++ b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py @@ -2143,5 +2143,5 @@ def test_field_access_info_for_arrays_in_builtins(): assert ( "a: READ, df: READ+WRITE, f1_data: READ, f2_data: WRITE, " - "field_type: INQUIRY, i_def: INQUIRY, loop0_start: READ, " - "loop0_stop: READ, r_def: INQUIRY" == str(vai)) + "field_type: NO DATA ACCESS, i_def: NO DATA ACCESS, loop0_start: " + "READ, loop0_stop: READ, r_def: NO DATA ACCESS" == str(vai)) diff --git a/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py b/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py index b598ee7142..3adad63a4b 100644 --- a/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py +++ b/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py @@ -434,10 +434,10 @@ def test_reference_accesses_bounds(operator, fortran_reader): psyir = fortran_reader.psyir_from_source(code) schedule = psyir.walk(Assignment)[0] - # The access to 'a' should be reported as inquiry as its actual data - # is not accessed. + # The access to 'a' should be reported as 'NO DATA ACCESS' as its + # actual data is not accessed. vai = VariablesAccessInfo(schedule) - assert str(vai) == "a: INQUIRY, b: READ, n: WRITE" + assert str(vai) == "a: NO DATA ACCESS, b: READ, n: WRITE" def test_enumerator_name_matches_name_field(): From ba5d069dd240e47de798290e12a337dc4c297a2b Mon Sep 17 00:00:00 2001 From: Sergi Siso Date: Wed, 22 Jan 2025 10:44:35 +0000 Subject: [PATCH 41/58] #2862 Improve comments and testing --- examples/psyir/create.py | 5 ++--- src/psyclone/psyir/backend/fortran.py | 11 +++++------ src/psyclone/psyir/frontend/fparser2.py | 5 ++++- src/psyclone/psyir/nodes/operation.py | 11 ++++++----- .../intrinsics/minormax2code_trans.py | 14 ++++++-------- src/psyclone/tests/psyir/nodes/operation_test.py | 5 +++++ 6 files changed, 28 insertions(+), 23 deletions(-) diff --git a/examples/psyir/create.py b/examples/psyir/create.py index bb6a9e31f3..5b42fafeb0 100644 --- a/examples/psyir/create.py +++ b/examples/psyir/create.py @@ -208,9 +208,8 @@ def tmp2(): result = writer(psyir_tree) print(result) - # Write out the code as C. At the moment NaryOperator, Routine - # and Container are not supported in the C backend so the full example - # can't be output. + # Write out the code as C. At the moment Routine and Container are not + # supported in the C backend so the full example can't be output. writer = CWriter() result = writer(psyir_tree.children[0].children[0].children[3]) print(result) diff --git a/src/psyclone/psyir/backend/fortran.py b/src/psyclone/psyir/backend/fortran.py index 18bede53d3..f87c1141ec 100644 --- a/src/psyclone/psyir/backend/fortran.py +++ b/src/psyclone/psyir/backend/fortran.py @@ -337,14 +337,13 @@ def _reverse_map(reverse_dict, op_map): mapping. Any key that does already exist in `reverse_dict` is not overwritten, only new keys are added. - :param reverse_dict: the dictionary to which the new mapping of \ + :param reverse_dict: the dictionary to which the new mapping of operator to string is added. - :type reverse_dict: dict from \ - :py:class:`psyclone.psyir.nodes.BinaryOperation`, \ - :py:class:`psyclone.psyir.nodes.NaryOperation` or \ - :py:class:`psyclone.psyir.nodes.UnaryOperation` to str + :type reverse_dict: dict[ + :py:class:`psyclone.psyir.nodes.Operation`, str + ] - :param op_map: mapping from string representation of operator to \ + :param op_map: mapping from string representation of operator to enumerated type. :type op_map: :py:class:`collections.OrderedDict` diff --git a/src/psyclone/psyir/frontend/fparser2.py b/src/psyclone/psyir/frontend/fparser2.py index 09f31a3861..12d96dfc49 100644 --- a/src/psyclone/psyir/frontend/fparser2.py +++ b/src/psyclone/psyir/frontend/fparser2.py @@ -4898,7 +4898,10 @@ def _parenthesis_handler(self, node, parent): new_node = self._create_child(node.items[1], parent) # Explicit parenthesis on BinaryOperations are sometimes needed for - # reproducibility, so we store the fact that they are here. + # reproducibility (because a Fortran compiler may evaluate any + # mathematically-equivalent expression, provided that the integrity + # of parentheses is not violated - Fortran2008 section 7.1.5.2.4), + # so we store the fact that they are here. if isinstance(new_node, BinaryOperation): new_node.has_explicit_grouping = True diff --git a/src/psyclone/psyir/nodes/operation.py b/src/psyclone/psyir/nodes/operation.py index eab1fa58c6..f276f277fd 100644 --- a/src/psyclone/psyir/nodes/operation.py +++ b/src/psyclone/psyir/nodes/operation.py @@ -212,7 +212,7 @@ class BinaryOperation(Operation): :param operator: the operator used in the operation. :type operator: :py:class:`psyclone.psyir.nodes.BinaryOperation.Operator` :param bool has_explicit_grouping: Whether this operation should be - surrounded by explicit grouping syntax (e.g. parenthesis) regarless of + surrounded by explicit grouping syntax (e.g. parenthesis) regardless of not breaking any other precedence rules. Defaults to False. :param parent: the parent node of this Operation in the PSyIR. :type parent: Optional[:py:class:`psyclone.psyir.nodes.Node`] @@ -269,8 +269,9 @@ def create(operator, lhs, rhs, has_explicit_grouping=False): :type rhs: Union[:py:class:`psyclone.psyir.nodes.Node`, Tuple[str, :py:class:`psyclone.psyir.nodes.Node`]] :param bool has_explicit_grouping: Whether this operation should be - surrounded by explicit grouping syntax (e.g. parenthesis) regarless - of not breaking any other precedence rules. Defaults to False. + surrounded by explicit grouping syntax (e.g. parenthesis) + regardless of not breaking any other precedence rules. Defaults to + False. :returns: a BinaryOperator instance. :rtype: :py:class:`psyclone.psyir.nodes.BinaryOperation` @@ -294,7 +295,7 @@ def create(operator, lhs, rhs, has_explicit_grouping=False): def has_explicit_grouping(self) -> bool: ''' :returns: Whether this operation should be surrounded by explicit - grouping syntax (e.g. parenthesis) regarless of not breaking any + grouping syntax (e.g. parenthesis) regardless of not breaking any other precedence rules. ''' return self._has_explicit_grouping @@ -303,7 +304,7 @@ def has_explicit_grouping(self) -> bool: def has_explicit_grouping(self, value: bool): ''' :param value: Whether this operation should be surrounded by explicit - grouping syntax (e.g. parenthesis) regarless of not breaking any + grouping syntax (e.g. parenthesis) regardless of not breaking any other precedence rules. :raises TypeError: if the provided value is not a boolean. diff --git a/src/psyclone/psyir/transformations/intrinsics/minormax2code_trans.py b/src/psyclone/psyir/transformations/intrinsics/minormax2code_trans.py index d232971384..417af518e3 100644 --- a/src/psyclone/psyir/transformations/intrinsics/minormax2code_trans.py +++ b/src/psyclone/psyir/transformations/intrinsics/minormax2code_trans.py @@ -82,9 +82,8 @@ def __init__(self): def apply(self, node, options=None): '''Apply this utility transformation to the specified node. This node - must be a MIN or MAX BinaryOperation or NaryOperation. The - operation is converted to equivalent inline code. This is - implemented as a PSyIR transform from: + must be a MIN or MAX IntrinsicCall. The intrinsic is converted to + equivalent inline code. This is implemented as a PSyIR transform from: .. code-block:: python @@ -108,13 +107,12 @@ def apply(self, node, options=None): PSyIR expressions and the ``...`` before and after ``[MIN or MAX](A, B, C ...)`` can be arbitrary PSyIR code. - This transformation requires the operation node to be a + This transformation requires the IntrinsicCall node to be a descendent of an assignment and will raise an exception if this is not the case. - :param node: a MIN or MAX Binary- or Nary-Operation node. - :type node: :py:class:`psyclone.psyir.nodes.BinaryOperation` or \ - :py:class:`psyclone.psyir.nodes.NaryOperation` + :param node: a MIN or MAX intrinsic. + :type node: :py:class:`psyclone.psyir.nodes.IntrinsicCall` :param options: a dictionary with options for transformations. :type options: Optional[Dict[str, Any]] @@ -141,7 +139,7 @@ def apply(self, node, options=None): f"tmp_{self._intrinsic.name.lower()}", symbol_type=DataSymbol, datatype=REAL_TYPE) - # Replace operation with a temporary (res_var). + # Replace intrinsic with a temporary (res_var). node.replace_with(Reference(res_var_symbol)) # res_var=A (child[0] of node) diff --git a/src/psyclone/tests/psyir/nodes/operation_test.py b/src/psyclone/tests/psyir/nodes/operation_test.py index d9799657cf..2ce5d5375a 100644 --- a/src/psyclone/tests/psyir/nodes/operation_test.py +++ b/src/psyclone/tests/psyir/nodes/operation_test.py @@ -141,6 +141,11 @@ def test_binaryoperation_create(): result = FortranWriter().binaryoperation_node(binaryoperation) assert result == "tmp1 + tmp2" + # Check with the optional has_explicit_grouping parameter + binaryoperation = BinaryOperation.create( + oper, lhs.copy(), rhs.copy(), has_explicit_grouping=True) + assert binaryoperation.has_explicit_grouping + def test_binaryoperation_create_invalid(): '''Test that the create method in a BinaryOperation class raises the From d28c8eb31ff9dd5dc0f751d712b0825a33501987 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 11:32:00 +0000 Subject: [PATCH 42/58] #2271 update Dev Guide --- doc/developer_guide/dependency.rst | 46 +++++++++++++----------------- src/psyclone/core/access_type.py | 6 +++- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/doc/developer_guide/dependency.rst b/doc/developer_guide/dependency.rst index b4974f6a9d..eec7dcd676 100644 --- a/doc/developer_guide/dependency.rst +++ b/doc/developer_guide/dependency.rst @@ -263,16 +263,17 @@ DataAccess class i.e. the `_field_write_arguments()` and Variable Accesses ================= -Especially in the NEMO API, it is not possible to rely on pre-defined -kernel information to determine dependencies between loops. So an additional, -somewhat lower-level API has been implemented that can be used to determine -variable accesses (READ, WRITE etc.), which is based on the PSyIR information. -The only exception to this is if a kernel is called, in which case the -metadata for the kernel declaration will be used to determine the variable -accesses for the call statement. The information about all variable usage -of a PSyIR node or a list of nodes can be gathered by creating an object of -type `psyclone.core.VariablesAccessInfo`. -This class uses a `Signature` object to keep track of the variables used. +When using PSyclone with generic Fortran code, it is not possible to +rely on pre-defined kernel information to determine dependencies +between loops. So an additional, somewhat lower-level API has been +implemented that can be used to determine variable accesses (READ, +WRITE etc.), which is based on the PSyIR information. The only +exception to this is if a kernel is called, in which case the metadata +for the kernel declaration will be used to determine the variable +accesses for the call statement. The information about all variable +usage of a PSyIR node or a list of nodes can be gathered by creating +an object of type `psyclone.core.VariablesAccessInfo`. This class +uses a `Signature` object to keep track of the variables used. Signature --------- @@ -289,6 +290,14 @@ a single component. :members: :special-members: __hash__, __eq__, __lt__ +AccessType +---------- + +An individual access to a ``Signature`` is described by an instance of the +``AccessType`` enumeration: + +.. autoclass:: psyclone.core.access_type.AccessType + :members: VariablesAccessInfo ------------------- @@ -319,22 +328,7 @@ instance is holding information about. VariablesAccessInfo Options +++++++++++++++++++++++++++ -By default, `VariablesAccessInfo` will not report the first argument of -the PSyIR operators `lbound`, `ubound`, or `size` as read accesses, -since these functions do not actually access the content of the array, -they only query the size. If these accesses are required (e.g. in kernel -extraction this could be important if an array is only used in these -intrinsic - a driver would still need these arrays in order to query -the size), the optional `options` parameter of the `VariablesAccessInfo` -constructor can be used: add the key -`COLLECT-ARRAY-SHAPE-READS` and set it to true:: - - vai = VariablesAccessInfo(options={'COLLECT-ARRAY-SHAPE-READS': True}) - -In this case all arrays specified as first parameter to one of the -PSyIR operators above will be reported as read access. - -Fortran also allows to rename a symbol locally when it is being imported, +Fortran allows an imported symbol to be renamed locally (`use some_mod, only: renamed => original_name`). Depending on use case, it might be useful to get the non-local, original name. By default, `VariablesAccessInfo` will report the local name (i.e. the renamed name), diff --git a/src/psyclone/core/access_type.py b/src/psyclone/core/access_type.py index 6c75bed78b..f772173a8c 100644 --- a/src/psyclone/core/access_type.py +++ b/src/psyclone/core/access_type.py @@ -44,9 +44,12 @@ class AccessType(Enum): '''A simple enum-class for the various valid access types. ''' - + #: Data associated with the symbol is read. READ = 1 + #: Data associated with the symbols is written. WRITE = 2 + #: Data associated with the symbol is both read and written (e.g. is passed + #: to a routine with intent(inout)). READWRITE = 3 #: Incremented from more than one cell column (see the LFRic API section #: of the User Guide). @@ -54,6 +57,7 @@ class AccessType(Enum): #: Read before incrementing. Requires that the outermost halo be clean (see #: the LFRic API section of the User Guide). READINC = 5 + #: Is the output of a SUM reduction. SUM = 6 #: This is used internally to indicate unknown access type of #: a variable, e.g. when a variable is passed to a subroutine From 91e7ec24ec08a8eb9b4be324f6bc41e030100481 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 11:33:04 +0000 Subject: [PATCH 43/58] #2271 updates for review --- src/psyclone/core/variables_access_info.py | 4 ---- src/psyclone/psyir/nodes/codeblock.py | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/psyclone/core/variables_access_info.py b/src/psyclone/core/variables_access_info.py index 3e7af33b84..c3ee0265e9 100644 --- a/src/psyclone/core/variables_access_info.py +++ b/src/psyclone/core/variables_access_info.py @@ -62,10 +62,6 @@ class VariablesAccessInfo(dict): :param options: a dictionary with options to influence which variable accesses are to be collected. :type options: Dict[str, Any] - :param Any options["COLLECT-ARRAY-SHAPE-READS"]: if this option is set - to a True value, arrays used as first parameter to the PSyIR query - operators lbound, ubound, or size will be reported as 'read'. - Otherwise, these accesses will be ignored. :param Any options["USE-ORIGINAL-NAMES"]: if this option is set to a True value, an imported symbol that is renamed (``use mod, a=>b``) will be reported using the original name (``b`` in the example). diff --git a/src/psyclone/psyir/nodes/codeblock.py b/src/psyclone/psyir/nodes/codeblock.py index 8b6b4d4814..072f934d67 100644 --- a/src/psyclone/psyir/nodes/codeblock.py +++ b/src/psyclone/psyir/nodes/codeblock.py @@ -168,6 +168,9 @@ def get_symbol_names(self) -> List[str]: variable/routine as still being an intrinsic call and, as such, it will be omitted from the names returned by this method. + TODO #2863 - these limitations (blanket use of READWRITE and the + ignoring of Fortran intrinsics) need to be re-visited. + :returns: the symbol names used inside the CodeBock. ''' parse_tree = self.get_ast_nodes From 6e23251b4c4f6ac87587476555c85992643c9a34 Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Wed, 22 Jan 2025 22:52:27 +1100 Subject: [PATCH 44/58] #2853 Renamed config_test to configuration_test to follow naming convention. --- src/psyclone/tests/{config_test.py => configuration_test.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/psyclone/tests/{config_test.py => configuration_test.py} (100%) diff --git a/src/psyclone/tests/config_test.py b/src/psyclone/tests/configuration_test.py similarity index 100% rename from src/psyclone/tests/config_test.py rename to src/psyclone/tests/configuration_test.py From 9893b42b811f558797942c5e2d3f36eef822edc6 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 12:37:13 +0000 Subject: [PATCH 45/58] #2271 rm unused PSyDataTrans.get_default_options --- .../transformations/gocean_extract_trans.py | 18 +++--- .../psyir/transformations/extract_trans.py | 15 ----- .../psyir/transformations/psy_data_trans.py | 56 ++++--------------- .../transformations/read_only_verify_trans.py | 15 ----- .../transformations/extract_trans_test.py | 8 --- 5 files changed, 20 insertions(+), 92 deletions(-) diff --git a/src/psyclone/domain/gocean/transformations/gocean_extract_trans.py b/src/psyclone/domain/gocean/transformations/gocean_extract_trans.py index 8de38f1f2f..20225ffb0b 100644 --- a/src/psyclone/domain/gocean/transformations/gocean_extract_trans.py +++ b/src/psyclone/domain/gocean/transformations/gocean_extract_trans.py @@ -152,14 +152,14 @@ def apply(self, nodes, options=None): is required (and is supported by the runtime library). ''' - - my_options = self.merge_in_default_options(options) + if options is None: + options = {} ctu = CallTreeUtils() nodes = self.get_node_list(nodes) - region_name = self.get_unique_region_name(nodes, my_options) - my_options["region_name"] = region_name - my_options["prefix"] = my_options.get("prefix", "extract") + region_name = self.get_unique_region_name(nodes, options) + options["region_name"] = region_name + options["prefix"] = options.get("prefix", "extract") read_write_info = ctu.get_in_out_parameters( nodes, include_non_data_accesses=True) @@ -167,15 +167,15 @@ def apply(self, nodes, options=None): # that avoid any name clashes postfix = ExtractTrans.determine_postfix(read_write_info, postfix="_post") - my_options["post_var_postfix"] = postfix + options["post_var_postfix"] = postfix - if my_options.get("create_driver", False): + if options.get("create_driver", False): # We need to create the driver before inserting the ExtractNode # (since some of the visitors used in driver creation do not # handle an ExtractNode in the tree) self._driver_creator.write_driver(nodes, read_write_info, postfix=postfix, - prefix=my_options["prefix"], + prefix=options["prefix"], region_name=region_name) - super().apply(nodes, my_options) + super().apply(nodes, options) diff --git a/src/psyclone/psyir/transformations/extract_trans.py b/src/psyclone/psyir/transformations/extract_trans.py index b2d3acfd2e..ffc5116d97 100644 --- a/src/psyclone/psyir/transformations/extract_trans.py +++ b/src/psyclone/psyir/transformations/extract_trans.py @@ -79,21 +79,6 @@ def __init__(self, node_class=ExtractNode): # node class. super().__init__(node_class=node_class) - # ------------------------------------------------------------------------- - def get_default_options(self): - '''Returns a new dictionary with additional options, specific to the - transformation, that will be added to the user option. Any values - specified by the user will take precedence. For the extract - transformation, by default we want VariablesAccessInformation to - report array arguments to lbound, ubound and size as read accesses, - so we are certain these arrays will be included in the extraction. - - :returns: a dictionary with additional options. - :rtype: Dict[str, Any] - ''' - - return {"COLLECT-ARRAY-SHAPE-READS": True} - # ------------------------------------------------------------------------- @staticmethod def determine_postfix(read_write_info, postfix="_post"): diff --git a/src/psyclone/psyir/transformations/psy_data_trans.py b/src/psyclone/psyir/transformations/psy_data_trans.py index 04f6a80229..2672aee190 100644 --- a/src/psyclone/psyir/transformations/psy_data_trans.py +++ b/src/psyclone/psyir/transformations/psy_data_trans.py @@ -111,39 +111,6 @@ class name as a string, which means that the same function can return self.__class__.__name__ - # ------------------------------------------------------------------------- - def get_default_options(self): - '''Returns a new dictionary with additional options, specific to the - transformation, that will be added to the user option. Any values - specified by the user will take precedence. - - :returns: a dictionary with additional options. - :rtype: Dict[str, Any] - ''' - - return {} - - # ------------------------------------------------------------------------- - def merge_in_default_options(self, options): - '''This function returns a new dictionary which contains the default - options for this transformation plus al user-specified options. - Any user-specified option will take precedence over the default - values. - - :param options: a dictionary with options for transformations. - :type options: Dict[str, Any] - :returns: a new dictionary which merges the default options with \ - the user-specified options. - :rtype: Dict[str:Any] - - ''' - new_options = self.get_default_options() - if options: - # Update will overwrite any existing setting with the ones - # specified by the user: - new_options.update(options) - return new_options - # ------------------------------------------------------------------------ def get_unique_region_name(self, nodes, options): '''This function returns the region and module name. If they are @@ -254,9 +221,10 @@ def validate(self, nodes, options=None): raise TransformationError("A PSyData node cannot be inserted " "inside an OpenACC region.") - my_options = self.merge_in_default_options(options) - if "region_name" in my_options: - name = my_options["region_name"] + if options is None: + options = {} + if "region_name" in options: + name = options["region_name"] # pylint: disable=too-many-boolean-expressions if not isinstance(name, tuple) or not len(name) == 2 or \ not name[0] or not isinstance(name[0], str) or \ @@ -265,9 +233,9 @@ def validate(self, nodes, options=None): f"Error in {self.name}. User-supplied region name " f"must be a tuple containing two non-empty strings.") # pylint: enable=too-many-boolean-expressions - prefix = my_options.get("prefix", None) - if "prefix" in my_options: - prefix = my_options.get("prefix", None) + prefix = options.get("prefix", None) + if "prefix" in options: + prefix = options.get("prefix", None) if prefix not in Config.get().valid_psy_data_prefixes: raise TransformationError( f"Error in 'prefix' parameter: found '{prefix}', while" @@ -276,7 +244,7 @@ def validate(self, nodes, options=None): # We have to create an instance of the node that will be inserted in # order to find out what module name it will use. - pdata_node = self._node_class(options=my_options) + pdata_node = self._node_class(options=options) table = node_list[0].scope.symbol_table for name in ([sym.name for sym in pdata_node.imported_symbols] + [pdata_node.fortran_module]): @@ -295,7 +263,7 @@ def validate(self, nodes, options=None): except KeyError: pass - super().validate(node_list, my_options) + super().validate(node_list, options) # ------------------------------------------------------------------------ def apply(self, nodes, options=None): @@ -322,10 +290,8 @@ def apply(self, nodes, options=None): ''' node_list = self.get_node_list(nodes) - # Add any transformation-specific settings that are required: - my_options = self.merge_in_default_options(options) # Perform validation checks - self.validate(node_list, my_options) + self.validate(node_list, options) # Get useful references parent = node_list[0].parent @@ -345,7 +311,7 @@ def apply(self, nodes, options=None): node.detach() psy_data_node = self._node_class.create( - node_list, symbol_table=table, options=my_options) + node_list, symbol_table=table, options=options) parent.addchild(psy_data_node, position) diff --git a/src/psyclone/psyir/transformations/read_only_verify_trans.py b/src/psyclone/psyir/transformations/read_only_verify_trans.py index 20092a7971..c249d7393e 100644 --- a/src/psyclone/psyir/transformations/read_only_verify_trans.py +++ b/src/psyclone/psyir/transformations/read_only_verify_trans.py @@ -73,21 +73,6 @@ class ReadOnlyVerifyTrans(PSyDataTrans): def __init__(self, node_class=ReadOnlyVerifyNode): super().__init__(node_class=node_class) - # ------------------------------------------------------------------------- - def get_default_options(self): - '''Returns a new dictionary with additional options, specific to the - transformation, that will be added to the user option. Any values - specified by the user will take precedence. For the read-only verify - transformation, by default we want VariablesAccessInformation to - report array arguments to lbound, ubound and size as read accesses, - since these arguments should also not be overwritten. - - :returns: a dictionary with additional options. - :rtype: Dict[str, Any] - ''' - - return {"COLLECT-ARRAY-SHAPE-READS": True} - # ------------------------------------------------------------------------- def validate(self, node_list, options=None): # pylint: disable=arguments-renamed diff --git a/src/psyclone/tests/psyir/transformations/extract_trans_test.py b/src/psyclone/tests/psyir/transformations/extract_trans_test.py index 2889e3ffd8..dab1a80d96 100644 --- a/src/psyclone/tests/psyir/transformations/extract_trans_test.py +++ b/src/psyclone/tests/psyir/transformations/extract_trans_test.py @@ -118,14 +118,6 @@ def test_determine_postfix(): assert postfix == "_post1" -# --------------------------------------------------------------------------- # -def test_get_default_options(): - '''Check the default options.''' - - etrans = ExtractTrans() - assert etrans.get_default_options() == {"COLLECT-ARRAY-SHAPE-READS": True} - - # ----------------------------------------------------------------------------- def test_extract_validate(): '''Test that the validate function can successfully finish.''' From 4a49d15d2026b3dbe97c4b8b1f253a067c75945c Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 12:55:55 +0000 Subject: [PATCH 46/58] #2271 rm options from call_tree_utils methods --- examples/nemo/eg5/extract_kernels.py | 11 +---------- src/psyclone/psyir/tools/call_tree_utils.py | 20 ++------------------ 2 files changed, 3 insertions(+), 28 deletions(-) diff --git a/examples/nemo/eg5/extract_kernels.py b/examples/nemo/eg5/extract_kernels.py index 7639104f01..142452a5c6 100755 --- a/examples/nemo/eg5/extract_kernels.py +++ b/examples/nemo/eg5/extract_kernels.py @@ -88,16 +88,7 @@ def trans(psyir): if not isinstance(kern, Loop): continue try: - # TODO #2080: once this is fixed, the option can be removed - # The example contains array expressions, e.g.: - # zwx(:,:,jpk) = 0.e0 - # PSyclone represents this internally using Range with LBOUND - # and UBOUND intrinsics and currently this results in several - # occurrences of zws on the left hand side, which will trigger - # an exception in the dependency analysis. Therefore, disable - # the collection of read accesses for the shape of an array. - extract.apply(kern, - options={"COLLECT-ARRAY-SHAPE-READS": False}) + extract.apply(kern) except TransformationError as err: # Typically that's caused by a kernel having a CodeBlock # inside. diff --git a/src/psyclone/psyir/tools/call_tree_utils.py b/src/psyclone/psyir/tools/call_tree_utils.py index bfb2773b8e..7773477394 100644 --- a/src/psyclone/psyir/tools/call_tree_utils.py +++ b/src/psyclone/psyir/tools/call_tree_utils.py @@ -196,7 +196,7 @@ def get_input_parameters(self, read_write_info, node_list, # ------------------------------------------------------------------------- def get_output_parameters(self, read_write_info, node_list, - variables_info=None, options=None): + variables_info=None): '''Adds all variables that are output parameters (i.e. are written) to the read_write_info object. @@ -209,19 +209,11 @@ def get_output_parameters(self, read_write_info, node_list, can be used to avoid repeatedly collecting this information. :type variables_info: \ Optional[:py:class:`psyclone.core.variables_info.VariablesAccessInfo`] - :param options: a dictionary with options for the CallTreeUtils - which will also be used when creating the VariablesAccessInfo - instance if required. - :type param: Optional[dict[str, Any]] - :param Any options["COLLECT-ARRAY-SHAPE-READS"]: if this option is - set to a True value, arrays used as first parameter to the - PSyIR operators lbound, ubound, or size will be reported as - 'read'. Otherwise, these accesses will be ignored. ''' # Collect the information about all variables used: if not variables_info: - variables_info = VariablesAccessInfo(node_list, options=options) + variables_info = VariablesAccessInfo(node_list) for signature in variables_info.all_signatures: if variables_info.is_written(signature): @@ -249,14 +241,6 @@ def get_in_out_parameters(self, node_list, collect_non_local_symbols=False, :param bool collect_non_local_symbols: whether non-local symbols (i.e. symbols used in other modules either directly or indirectly) should be included in the in/out information. - :param options: a dictionary with options for the CallTreeUtils - which will also be used when creating the VariablesAccessInfo - instance if required. - :type options: Optional[dict[str, Any]] - :param Any options["COLLECT-ARRAY-SHAPE-READS"]: if this option is - set to a True value, arrays used as first parameter to the - PSyIR operators lbound, ubound, or size will be reported as - 'read'. Otherwise, these accesses will be ignored. :returns: a ReadWriteInfo object with the information about input- and output parameters. From bc22823fb63ac27bae9599878040bbc17cb17015 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 13:07:06 +0000 Subject: [PATCH 47/58] #2271 fix compilation target of nemo/eg6 --- examples/nemo/eg6/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/nemo/eg6/Makefile b/examples/nemo/eg6/Makefile index 5c15c7cd5a..5b1691dce7 100644 --- a/examples/nemo/eg6/Makefile +++ b/examples/nemo/eg6/Makefile @@ -76,7 +76,7 @@ $(READ_ONLY_CHECK_DIR)/$(LIB_NAME): make -C $(READ_ONLY_CHECK_DIR) # Compilation uses the 'kernels' transformed code -psy.f90: dummy.f90 read_only_check.py +psy.f90: dummy.f90 read_only_check.py kernels psy.o: $(READ_ONLY_CHECK_DIR)/$(LIB_NAME) %.o: %.f90 From 8394dc19a9c2511931ad9db2c63045f68752a6fa Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 13:29:45 +0000 Subject: [PATCH 48/58] #2271 update AccessType tests --- src/psyclone/tests/core/access_type_test.py | 23 ++++++++++++++++++- .../tests/psyir/nodes/codeblock_test.py | 5 ++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/psyclone/tests/core/access_type_test.py b/src/psyclone/tests/core/access_type_test.py index a613f8fe4c..32fb15b904 100644 --- a/src/psyclone/tests/core/access_type_test.py +++ b/src/psyclone/tests/core/access_type_test.py @@ -32,7 +32,7 @@ # POSSIBILITY OF SUCH DAMAGE. # ----------------------------------------------------------------------------- # Author: Joerg Henrichs, Bureau of Meteorology -# Modified by R. W. Ford and N. Nobre, STFC Daresbury Lab +# Modified by R. W. Ford, N. Nobre and A. R. Porter, STFC Daresbury Lab '''This module tests AccessType.''' @@ -52,6 +52,8 @@ def test_str(): assert str(AccessType.SUM) == "SUM" assert str(AccessType.CALL) == "CALL" assert str(AccessType.INQUIRY) == "INQUIRY" + assert str(AccessType.TYPE_INFO) == "TYPE_INFO" + assert str(AccessType.UNKNOWN) == "UNKNOWN" def test_api_specific_name(): @@ -68,6 +70,8 @@ def test_api_specific_name(): assert AccessType.SUM.api_specific_name() == "gh_sum" assert AccessType.CALL.api_specific_name() == "call" assert AccessType.INQUIRY.api_specific_name() == "inquiry" + assert AccessType.TYPE_INFO.api_specific_name() == "type_info" + assert AccessType.UNKNOWN.api_specific_name() == "unknown" assert AccessType.get_valid_reduction_modes() == [AccessType.SUM] assert AccessType.get_valid_reduction_names() == ["gh_sum"] # Use set to make this independent of the order: @@ -94,6 +98,7 @@ def test_from_string(): assert AccessType.from_string("readinc") == AccessType.READINC assert AccessType.from_string("sum") == AccessType.SUM assert AccessType.from_string("unknown") == AccessType.UNKNOWN + assert AccessType.from_string("type_info") == AccessType.TYPE_INFO with pytest.raises(ValueError) as err: AccessType.from_string("invalid") @@ -120,7 +125,23 @@ def test_all_read_accesses(): all_read_accesses = AccessType.all_read_accesses() assert isinstance(all_read_accesses, list) assert len(all_read_accesses) == 4 + # No duplications. assert (len(all_read_accesses) == len(set(all_read_accesses))) assert all(isinstance(read_access, AccessType) for read_access in all_read_accesses) + + +def test_non_data_accesses(): + '''Test the non_data_accesses() method.''' + accesses = AccessType.non_data_accesses() + assert isinstance(accesses, list) + # No duplications + assert (len(accesses) == len(set(accesses))) + assert all(isinstance(acc, AccessType) for acc in accesses) + all_read_accesses = AccessType.all_read_accesses() + all_write_accesses = AccessType.all_write_accesses() + all_reductions = AccessType.get_valid_reduction_modes() + all_data_accesses = all_read_accesses + all_write_accesses + all_reductions + for acc in accesses: + assert acc not in all_data_accesses diff --git a/src/psyclone/tests/psyir/nodes/codeblock_test.py b/src/psyclone/tests/psyir/nodes/codeblock_test.py index 94027a8f83..c6f952fc3a 100644 --- a/src/psyclone/tests/psyir/nodes/codeblock_test.py +++ b/src/psyclone/tests/psyir/nodes/codeblock_test.py @@ -136,6 +136,11 @@ def test_codeblock_get_symbol_names(parser): def test_codeblock_ref_accesses(parser): '''Test that the reference_accesses() method works as expected. + + TODO #2863 - accesses within a CodeBlock should really be marked as + AccessType.UNKNOWN but are currently always READWRITE. Also, calls to + Fortran intrinsics are not captured. + ''' vai = VariablesAccessInfo() reader = FortranStringReader(''' From 84abf5ddf738dbc38a2f3a9170de064197650ed2 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Wed, 22 Jan 2025 20:53:22 +0000 Subject: [PATCH 49/58] #2862 update changelog and UG --- changelog | 3 +++ psyclone.pdf | Bin 1272217 -> 1272827 bytes 2 files changed, 3 insertions(+) diff --git a/changelog b/changelog index 1918cc6092..701fa62f40 100644 --- a/changelog +++ b/changelog @@ -35,6 +35,9 @@ 12) PR #2509 for #2394. Adds support for logical and character types to the PSyData tooling. + 13) PR #2862 for #2858. Change to PSyIR frontend and backend to ensure + existing parentheses in expressions are preserved. + release 3.0.0 6th of December 2024 1) PR #2477 for #2463. Add support for Fortran Namelist statements. diff --git a/psyclone.pdf b/psyclone.pdf index 83e5e97263ac2eb2ade1de7bea9d815161667dde..b88deeefbd9bf30f081931711f97e0457a13ddf0 100644 GIT binary patch delta 122732 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 delta 122195 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%0AmUJ!0j2B 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 Date: Wed, 22 Jan 2025 21:13:35 +0000 Subject: [PATCH 50/58] #2271 Makefile fixes to ensure read_only psydata lib is cleaned --- examples/nemo/eg6/Makefile | 5 ++++- lib/read_only/Makefile | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/nemo/eg6/Makefile b/examples/nemo/eg6/Makefile index 5b1691dce7..66dc6f612e 100644 --- a/examples/nemo/eg6/Makefile +++ b/examples/nemo/eg6/Makefile @@ -73,7 +73,7 @@ kernels: read_only_check.py $(PSYCLONE) -l all -s ./read_only_check.py -o psy.f90 dummy.f90 $(READ_ONLY_CHECK_DIR)/$(LIB_NAME): - make -C $(READ_ONLY_CHECK_DIR) + $(MAKE) -C $(READ_ONLY_CHECK_DIR) # Compilation uses the 'kernels' transformed code psy.f90: dummy.f90 read_only_check.py kernels @@ -81,3 +81,6 @@ psy.o: $(READ_ONLY_CHECK_DIR)/$(LIB_NAME) %.o: %.f90 $(F90) $(F90FLAGS) -c $< + +allclean: clean + ${MAKE} -C $(READ_ONLY_CHECK_DIR) allclean diff --git a/lib/read_only/Makefile b/lib/read_only/Makefile index 0cc4789b99..2ea4103429 100644 --- a/lib/read_only/Makefile +++ b/lib/read_only/Makefile @@ -79,7 +79,7 @@ read_only_base.o: psy_data_base.o clean: rm -f read_only_base.f90 psy_data_base.f90 *.o *.mod -allclean: +allclean: clean $(MAKE) -C dl_esm_inf allclean $(MAKE) -C lfric allclean $(MAKE) -C generic allclean From b7310737c88604ae7fe38f08a6b942364ac57b09 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 23 Jan 2025 09:21:04 +0000 Subject: [PATCH 51/58] #2271 add allclean target to nemo/eg6/Makefile --- examples/nemo/eg5/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/nemo/eg5/Makefile b/examples/nemo/eg5/Makefile index 422a8e197f..c62c147a99 100644 --- a/examples/nemo/eg5/Makefile +++ b/examples/nemo/eg5/Makefile @@ -95,7 +95,7 @@ kernels: extract_kernels.py $(PSYCLONE) -l all -s ./extract_kernels.py -o psy.f90 ../code/tra_adv.F90 $(EXTRACT_DIR)/$(LIB_NAME): - make -C $(EXTRACT_DIR) + ${MAKE} -C $(EXTRACT_DIR) # Compilation uses the 'kernels' transformed code psy.f90: kernels @@ -103,3 +103,6 @@ psy.o: $(EXTRACT_DIR)/$(LIB_NAME) %.o: %.f90 $(F90) $(F90FLAGS) -c $< + +allclean: clean + ${MAKE} -C ${EXTRACT_DIR} allclean From c09254eb764820e55f9a814c06c1ca217887ddea Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 23 Jan 2025 10:09:33 +0000 Subject: [PATCH 52/58] #2271 change NO DATA ACCESS to NO_DATA_ACCESS --- src/psyclone/core/variables_access_info.py | 2 +- .../tests/core/variables_access_info_test.py | 14 +++++++------- src/psyclone/tests/dependency_test.py | 4 ++-- .../tests/domain/lfric/lfric_builtins_test.py | 4 ++-- .../tests/psyir/nodes/intrinsic_call_test.py | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/psyclone/core/variables_access_info.py b/src/psyclone/core/variables_access_info.py index c3ee0265e9..0fb8ec8459 100644 --- a/src/psyclone/core/variables_access_info.py +++ b/src/psyclone/core/variables_access_info.py @@ -155,7 +155,7 @@ def __str__(self): mode = "WRITE" else: # The data associated with this signature is not accessed. - mode = "NO DATA ACCESS" + mode = "NO_DATA_ACCESS" output_list.append(f"{signature}: {mode}") return ", ".join(output_list) diff --git a/src/psyclone/tests/core/variables_access_info_test.py b/src/psyclone/tests/core/variables_access_info_test.py index dd85a82b69..33665f9a54 100644 --- a/src/psyclone/tests/core/variables_access_info_test.py +++ b/src/psyclone/tests/core/variables_access_info_test.py @@ -420,7 +420,7 @@ def test_variables_access_info_shape_bounds(fortran_reader, function): # Array-shape accesses are 'inquiry' vai = VariablesAccessInfo(node1) - assert str(vai) == "a: NO DATA ACCESS, n: WRITE" + assert str(vai) == "a: NO_DATA_ACCESS, n: WRITE" # ----------------------------------------------------------------------------- @@ -433,10 +433,10 @@ def test_variables_access_info_domain_loop(): vai = VariablesAccessInfo(invoke.schedule) assert str(vai) == ( "a: READ, b: READ, f1_data: READWRITE, f2_data: " - "READWRITE, field_type: NO DATA ACCESS, i_def: NO DATA ACCESS, " - "map_w3: READ, mesh_type: NO DATA ACCESS, ncell_2d_no_halos: " + "READWRITE, field_type: NO_DATA_ACCESS, i_def: NO_DATA_ACCESS, " + "map_w3: READ, mesh_type: NO_DATA_ACCESS, ncell_2d_no_halos: " "READ, ndf_w3: READ, nlayers_f1: READ, nlayers_f2: READ, " - "r_def: NO DATA ACCESS, undf_w3: READ") + "r_def: NO_DATA_ACCESS, undf_w3: READ") # ----------------------------------------------------------------------------- @@ -456,9 +456,9 @@ def test_lfric_access_info(): assert ( "basis_w1_qr: READ, basis_w3_qr: READ, cell: READ+WRITE, " "diff_basis_w2_qr: READ, diff_basis_w3_qr: READ, f1_data: " - "READ+WRITE, f2_data: READ, field_type: NO DATA ACCESS, i_def: " - "NO DATA ACCESS, loop0_start: READ, loop0_stop: READ, m1_data: READ, " + "READ+WRITE, f2_data: READ, field_type: NO_DATA_ACCESS, i_def: " + "NO_DATA_ACCESS, loop0_start: READ, loop0_stop: READ, m1_data: READ, " "m2_data: READ, map_w1: READ, map_w2: READ, map_w3: READ, ndf_w1: " "READ, ndf_w2: READ, ndf_w3: READ, nlayers_f1: READ, np_xy_qr: READ, " - "np_z_qr: READ, r_def: NO DATA ACCESS, undf_w1: READ, undf_w2: READ, " + "np_z_qr: READ, r_def: NO_DATA_ACCESS, undf_w1: READ, undf_w2: READ, " "undf_w3: READ, weights_xy_qr: READ, weights_z_qr: READ" == str(vai)) diff --git a/src/psyclone/tests/dependency_test.py b/src/psyclone/tests/dependency_test.py index a12783c57b..9a5bd179fd 100644 --- a/src/psyclone/tests/dependency_test.py +++ b/src/psyclone/tests/dependency_test.py @@ -291,10 +291,10 @@ def test_lfric(): var_accesses = VariablesAccessInfo(schedule) assert str(var_accesses) == ( "a: READ, cell: READ+WRITE, f1_data: READ+WRITE, f2_data: READ, " - "field_type: NO DATA ACCESS, i_def: NO DATA ACCESS, loop0_start: " + "field_type: NO_DATA_ACCESS, i_def: NO_DATA_ACCESS, loop0_start: " "READ, loop0_stop: READ, m1_data: READ, m2_data: READ, map_w1: READ, " "map_w2: READ, map_w3: READ, ndf_w1: READ, ndf_w2: READ, ndf_w3: READ," - " nlayers_f1: READ, r_def: NO DATA ACCESS, undf_w1: READ, undf_w2: " + " nlayers_f1: READ, r_def: NO_DATA_ACCESS, undf_w1: READ, undf_w2: " "READ, undf_w3: READ") diff --git a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py index c2f2c99ff0..9c6bb0f87b 100644 --- a/src/psyclone/tests/domain/lfric/lfric_builtins_test.py +++ b/src/psyclone/tests/domain/lfric/lfric_builtins_test.py @@ -2143,5 +2143,5 @@ def test_field_access_info_for_arrays_in_builtins(): assert ( "a: READ, df: READ+WRITE, f1_data: READ, f2_data: WRITE, " - "field_type: NO DATA ACCESS, i_def: NO DATA ACCESS, loop0_start: " - "READ, loop0_stop: READ, r_def: NO DATA ACCESS" == str(vai)) + "field_type: NO_DATA_ACCESS, i_def: NO_DATA_ACCESS, loop0_start: " + "READ, loop0_stop: READ, r_def: NO_DATA_ACCESS" == str(vai)) diff --git a/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py b/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py index 3adad63a4b..4d1639902a 100644 --- a/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py +++ b/src/psyclone/tests/psyir/nodes/intrinsic_call_test.py @@ -434,10 +434,10 @@ def test_reference_accesses_bounds(operator, fortran_reader): psyir = fortran_reader.psyir_from_source(code) schedule = psyir.walk(Assignment)[0] - # The access to 'a' should be reported as 'NO DATA ACCESS' as its + # The access to 'a' should be reported as 'NO_DATA_ACCESS' as its # actual data is not accessed. vai = VariablesAccessInfo(schedule) - assert str(vai) == "a: NO DATA ACCESS, b: READ, n: WRITE" + assert str(vai) == "a: NO_DATA_ACCESS, b: READ, n: WRITE" def test_enumerator_name_matches_name_field(): From 23199f3a8b73fa487baba6a9958f9f8bafc4aad0 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 23 Jan 2025 10:11:32 +0000 Subject: [PATCH 53/58] #2271 ensure F90FLAGS passed to compiler for final link in nemo eg6 --- examples/nemo/eg6/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/nemo/eg6/Makefile b/examples/nemo/eg6/Makefile index 66dc6f612e..7468ec56bd 100644 --- a/examples/nemo/eg6/Makefile +++ b/examples/nemo/eg6/Makefile @@ -63,7 +63,7 @@ run: compile ./dummy dummy: psy.o $(READ_ONLY_CHECK_DIR)/$(LIB_NAME) - $(F90) psy.o -o dummy $(READ_ONLY_CHECK_DIR)/$(LIB_NAME) $(LDFLAGS) + $(F90) $(F90FLAGS) psy.o -o dummy $(READ_ONLY_CHECK_DIR)/$(LIB_NAME) $(LDFLAGS) transform: kernels From 0884cbb3ba0737bd2fa5fc9983b29eaf14fb9165 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 23 Jan 2025 10:49:18 +0000 Subject: [PATCH 54/58] #2271 rm is_query() method from SVAI --- src/psyclone/core/single_variable_access_info.py | 8 -------- src/psyclone/tests/psyir/nodes/scoping_node_test.py | 1 - 2 files changed, 9 deletions(-) diff --git a/src/psyclone/core/single_variable_access_info.py b/src/psyclone/core/single_variable_access_info.py index 6eb9242c0d..8adf93875a 100644 --- a/src/psyclone/core/single_variable_access_info.py +++ b/src/psyclone/core/single_variable_access_info.py @@ -224,14 +224,6 @@ def is_called(self) -> bool: return any(info.access_type == AccessType.CALL for info in self._accesses) - def is_queried(self) -> bool: - ''' - :returns: whether or not there are any queries/use of the *properties* - of this variable. - ''' - return any(info.access_type == AccessType.INQUIRY for - info in self._accesses) - def is_written(self) -> bool: ''' :returns: True if this variable is written (at least once). diff --git a/src/psyclone/tests/psyir/nodes/scoping_node_test.py b/src/psyclone/tests/psyir/nodes/scoping_node_test.py index 6ddd0681b6..71e2a94c50 100644 --- a/src/psyclone/tests/psyir/nodes/scoping_node_test.py +++ b/src/psyclone/tests/psyir/nodes/scoping_node_test.py @@ -299,7 +299,6 @@ def test_scoping_node_reference_accesses(): _ = table.new_symbol("var1", symbol_type=DataSymbol, datatype=new_type) sched.reference_accesses(vai) assert vai.all_signatures == [Signature("r_def")] - assert not vai[Signature("r_def")].is_queried() assert not vai[Signature("r_def")].has_data_access() # Add a Symbol with initialisation. idef = table.new_symbol("i_def", symbol_type=DataSymbol, From e4c1ad3a4ca5a18ee3cf34c6824fae18e7efcd6c Mon Sep 17 00:00:00 2001 From: Sergi Siso Date: Thu, 23 Jan 2025 12:18:34 +0000 Subject: [PATCH 55/58] #2271 Update changelog --- changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/changelog b/changelog index 701fa62f40..71386f4606 100644 --- a/changelog +++ b/changelog @@ -38,6 +38,9 @@ 13) PR #2862 for #2858. Change to PSyIR frontend and backend to ensure existing parentheses in expressions are preserved. + 14) PR #2825 for #2278 and #2849. Signatures AccessType now indentifies + INQUIRY and TYPE_INFO, for inquiry intrinsic accesses and precision symbols. + release 3.0.0 6th of December 2024 1) PR #2477 for #2463. Add support for Fortran Namelist statements. From 022a2c63f16e57ddb6ef9b1daf421d8c12b85de1 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Thu, 23 Jan 2025 16:20:16 +0000 Subject: [PATCH 56/58] #2854 changes for review --- .../psyir/transformations/acc_kernels_trans.py | 2 +- .../psyir/nodes/structure_reference_test.py | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/psyclone/psyir/transformations/acc_kernels_trans.py b/src/psyclone/psyir/transformations/acc_kernels_trans.py index 9acb73a68a..2ec6a23880 100644 --- a/src/psyclone/psyir/transformations/acc_kernels_trans.py +++ b/src/psyclone/psyir/transformations/acc_kernels_trans.py @@ -148,7 +148,7 @@ def validate(self, nodes: Union[Node, List[Node]], :raises TransformationError: if there are no Loops within the proposed region and options["disable_loop_check"] is not True. :raises TransformationError: if any assignments in the region contain a - character type child and the allow_strings option is not set. + character type child and options["allow_string"] is not True. ''' if not options: diff --git a/src/psyclone/tests/psyir/nodes/structure_reference_test.py b/src/psyclone/tests/psyir/nodes/structure_reference_test.py index 63bef89db4..c40a78b6b4 100644 --- a/src/psyclone/tests/psyir/nodes/structure_reference_test.py +++ b/src/psyclone/tests/psyir/nodes/structure_reference_test.py @@ -244,7 +244,7 @@ def test_struc_ref_datatype(): # A single member of structure type with a mixed-case name. ("roGEr", rtype, symbols.Symbol.Visibility.PUBLIC, None), # An array of structure type. - ("titty", artype, symbols.Symbol.Visibility.PUBLIC, None)]) + ("lucy", artype, symbols.Symbol.Visibility.PUBLIC, None)]) # Symbol with type defined by StructureType ssym0 = symbols.DataSymbol("grid", grid_type) # Reference to scalar member of structure @@ -272,28 +272,28 @@ def test_struc_ref_datatype(): # Reference to single element of array of structures within a structure singleref = nodes.StructureReference.create( - ssym, [("titty", [one.copy(), two.copy()])]) + ssym, [("lucy", [one.copy(), two.copy()])]) assert singleref.datatype == rtype_sym - # Reference to grid%titty(1,2)%gibber + # Reference to grid%lucy(1,2)%gibber sref = nodes.StructureReference.create( - ssym, [("titty", [one.copy(), two.copy()]), "gibber"]) + ssym, [("lucy", [one.copy(), two.copy()]), "gibber"]) assert sref.datatype == symbols.BOOLEAN_TYPE - # Reference to grid%titty(my_func(1), 2) where my_func is unresolved. + # Reference to grid%lucy(my_func(1), 2) where my_func is unresolved. func_sym = symbols.DataSymbol("my_func", datatype=symbols.UnresolvedType(), interface=symbols.UnresolvedInterface()) fref = nodes.ArrayReference.create(func_sym, [one.copy()]) sref2 = nodes.StructureReference.create( - ssym, [("titty", [fref, two.copy()])]) + ssym, [("lucy", [fref, two.copy()])]) assert isinstance(sref2.datatype, symbols.UnresolvedType) # Reference to sub-array of structure members of structure myrange = nodes.Range.create(two.copy(), nodes.Literal("4", symbols.INTEGER_TYPE)) arref = nodes.StructureReference.create( - ssym, [("titty", [nodes.Literal("3", symbols.INTEGER_TYPE), myrange])]) + ssym, [("lucy", [nodes.Literal("3", symbols.INTEGER_TYPE), myrange])]) dtype = arref.datatype assert isinstance(dtype, symbols.ArrayType) assert dtype.intrinsic == rtype_sym @@ -302,7 +302,7 @@ def test_struc_ref_datatype(): assert isinstance(dtype.shape[0].upper, nodes.BinaryOperation) # Reference to whole array of structures that are a member of a structure - fullref = nodes.StructureReference.create(ssym, ["titty"]) + fullref = nodes.StructureReference.create(ssym, ["lucy"]) dtype = fullref.datatype assert dtype == artype From 4bbdb4852ded9ebd138fe07e82c72cc7c3373999 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Fri, 24 Jan 2025 09:00:28 +0000 Subject: [PATCH 57/58] #2855 update changelog and UG --- changelog | 3 +++ psyclone.pdf | Bin 1272827 -> 1273003 bytes 2 files changed, 3 insertions(+) diff --git a/changelog b/changelog index 71386f4606..9fd88419a5 100644 --- a/changelog +++ b/changelog @@ -41,6 +41,9 @@ 14) PR #2825 for #2278 and #2849. Signatures AccessType now indentifies INQUIRY and TYPE_INFO, for inquiry intrinsic accesses and precision symbols. + 15) PR #2855 for #2853. Allows the Fortran standard used by fparser to + be set in the config file and ensure it is used consistently. + release 3.0.0 6th of December 2024 1) PR #2477 for #2463. Add support for Fortran Namelist statements. diff --git a/psyclone.pdf b/psyclone.pdf index b88deeefbd9bf30f081931711f97e0457a13ddf0..5abfb3ba63062277f029889474912355ba0214f3 100644 GIT binary patch delta 19079 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 delta 18879 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 z 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 From 3c92b65e2be0365542b9c15c82982cc874080252 Mon Sep 17 00:00:00 2001 From: LonelyCat124 <3043914+LonelyCat124@users.noreply.github.com.> Date: Fri, 24 Jan 2025 15:36:43 +0000 Subject: [PATCH 58/58] #2854 update changelog and UG --- changelog | 3 +++ psyclone.pdf | Bin 1273003 -> 1274063 bytes 2 files changed, 3 insertions(+) diff --git a/changelog b/changelog index 9fd88419a5..0811c1773e 100644 --- a/changelog +++ b/changelog @@ -44,6 +44,9 @@ 15) PR #2855 for #2853. Allows the Fortran standard used by fparser to be set in the config file and ensure it is used consistently. + 16) PR #2857 for 2854. Excludes character assignments from ACC KERNELS + regions to avoid issues in NEMO. + release 3.0.0 6th of December 2024 1) PR #2477 for #2463. Add support for Fortran Namelist statements. diff --git a/psyclone.pdf b/psyclone.pdf index 5abfb3ba63062277f029889474912355ba0214f3..f3c9b723a14c7a9d5f73b07b5a3012a470c6bbc1 100644 GIT binary patch delta 229342 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%0DUx|*qgJ(NKu>&C<64%dmICE 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 z%0D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