POET, or Parameterized Optimizations for Empirical Tuning, is an open-source transformation
scripting language that can be used to conveniently apply advanced compiler optimizations to applications
written in arbitrary programming languages as well as build ad-hoc translators between these languages.
POET is used to support a large number of compiler optimizations, including loop interchange, parallelization, blocking, fusion/
fission, strength reduction, scalar replacement, SSE vectorization, among others,
and to fully support the code generation of several domain-specific languages, including
automatic tester/timer generation, and automatically translating a finite-statemachine-
based behavior modeling language to C++/Java code.
For more information on POET, refer
Documents or
Publications sections.
History
The POET language was designed and implemented by Dr. Qing Yi at the University of Texas
at San Antonio.
POET was first proposed in Mar 2007 by
Qing Yi
POET Transformation Engine
POET is an interpreted language designed for
applying advanced program transformations to
code in arbitrary languages as well as quickly
building ad-hoc source-to-source translators between
these languages. It has been used to
support the transformation needs of both popular
programming languages such as C/C++,
Java, FORTRAN, and several domain-specific
languages that we have designed on the fly for
various purposes. Figure shows the structure
of a typical POET transformation engine, which
is essentially a POET language interpreter coupled
with a set of transformation libraries and
language syntax descriptions. The transformation
libraries include predefined POET routines
which can be invoked to apply a large number
of compiler optimizations such as loop interchange,
parallelization, fusion, blocking, unrolling,
array copying, scalar replacement, among others. The language syntax specifications,
on the other hand, are used by the POET interpreter to dynamically parse input code in
a variety of different programming languages. The developer needs to write a POET script
to specify which input files to parse using which syntax descriptions, what transformations
to apply to the input code after parsing, and which syntax to use to unparse the transformation
result. The POET script can be extensively parameterized and reconfigured via
command-line options when invoking the transformation engine.