  OpenMP 5.1 introduced the first loop nest transformation directives unroll
and tile, and more are expected to be included in OpenMP 6.0. We discuss the
two Abstract Syntax Tree (AST) representations used by Clang's implementation
that is currently under development. The first representation is designed for
compatibility with the existing implementation and stores the transformed loop
nest in a shadow AST next to the syntactical AST. The second representation
introduces a new meta AST-node OMPCanonicalLoop that guarantees that the
semantic requirements of an OpenMP loop are met, and a CanonicalLoopInfo type
that the OpenMPIRBuilder uses to represent literal and transformed loops. This
second approach provides a better abstraction of loop semantics, removes the
need for shadow AST nodes that are only relevant for code generation, allows
sharing the implementation with other front-ends such as flang, but depends on
the OpenMPIRBuilder which is currently under development.
