Source code for psyclone.psyir.transformations.metatransformations.arrayintrinsic2loop_trans
# -----------------------------------------------------------------------------
# SPDX-FileCopyrightText: Copyright (c) 2026 Science and Technology
# Facilities Council
# SPDX-License-Identifier: BSD-3-Clause
# See the full LICENSE file in the project root for details.
# -----------------------------------------------------------------------------
'''This module contains the ArrayIntrinsic2LoopTrans metatransformation.'''
from psyclone.psyir.nodes import IntrinsicCall
from psyclone.psyir.transformations.intrinsics.maxval2loop_trans\
import Maxval2LoopTrans
from psyclone.psyir.transformations.intrinsics.minval2loop_trans\
import Minval2LoopTrans
from psyclone.psyir.transformations.intrinsics.product2loop_trans\
import Product2LoopTrans
from psyclone.psyir.transformations.intrinsics.sum2loop_trans\
import Sum2LoopTrans
from psyclone.psyir.transformations.metatransformations.intrinsic2code_trans\
import Intrinsic2CodeTrans
from psyclone.utils import transformation_documentation_wrapper
[docs]
@transformation_documentation_wrapper
class ArrayIntrinsic2LoopTrans(Intrinsic2CodeTrans):
'''This metatransformation applies any of the Intrinsic2Loop
transformations to the provided input. The available transformations are
Maxval2LoopTrans, Sum2LoopTrans, Minval2LoopTrans, or Product2LoopTrans.
'''
_SUB_TRANSFORMATIONS = [Maxval2LoopTrans, Sum2LoopTrans,
Minval2LoopTrans, Product2LoopTrans]
# Create a map of intrinsic names to the appropriate Intrinsic2Code
# transformation. This should be in the same order as the
# _SUB_TRANSFORMATIONS else the _split_kwargs on this Transformation
# may not work correctly.
intrinsic_to_trans = {
IntrinsicCall.Intrinsic.MAXVAL: Maxval2LoopTrans,
IntrinsicCall.Intrinsic.SUM: Sum2LoopTrans,
IntrinsicCall.Intrinsic.MINVAL: Minval2LoopTrans,
IntrinsicCall.Intrinsic.PRODUCT: Product2LoopTrans}
[docs]
def apply(self, node: IntrinsicCall, **kwargs) -> None:
'''
Applies the appropriate Intrinsic2Loop transformation to the provided
input node.
:param node: the IntrinsicCall to be transformed.
'''
# The apply function is required for the docstring wrapper to work
# correctly.
super().apply(node, **kwargs)
__all__ = ["ArrayIntrinsic2LoopTrans"]