PolyJIT provides polyhedral compilation techniques at run-time of a program. By exploiting run-time information that is not available at compile-time some constraints due to the linear nature of the polyhedral model can be relaxed or ignored all-together, e.g. non-linear parameters in array-subscript expressions or may-aliases.
PolyJIT is implemented in 2 stages. The first stage selects suitable targets for just-in-time compilation (LLVMPolyJIT). This can be integrated into clang just as any other clang compiler plugin. The selected JIT candidates are instrumented with library calls that let us enter the JIT environment on demand.
The second stage (libPolyJIT) is a runtime module that needs to be linked to instrumented binaries. It provides the JIT itself and becomes active as soon as one of the selected candidates gets called the first time.
PolyJIT relies on the work of the following projects:
It is easiest to use the pprof build
command included with
simbuerg/pprof-study. More details follow.
The following sections describe the components available in the static clang/llvm compiler plugin.
TODO
TODO
TODO
TODO
TODO
The following sections describe the components available in the run-time library.
TODO