# TODO

## Overview

- Phase 4
- Phase 3 - Improve Robustness, Interoperability and Optimizations (ongoing)
- Polly as a LLVM Project (Finished February 2012)
- Phase 2 - First Optimizations and Enhanced User Experience (Finished February 2012)
- Phase 1 - Get Something Working (Finished October 2010)

## Individual Phases

### Phase 4

Infrastructure
Task | Status | Owner
--- | --- | ---
Move to isl C++ bindings | Open |
| - Add isl C++ bindings generator to isl | Open |
Add isl as an external library to Polly SVN | Done |
Compile-time: Speed up transformations |  |
| - Optimize isl_int for small integers | Done |
Compile-time: Minimize SCoP detection time | Open |
| - Reconsider pass-ordering (move Polly later) | Open |
Increase coverage
Task | Status | Owner
Support for Modulos | Done | Johannes
Boolean Combinations | Done | Johannes
Unsigned Integers | Done | Johannes
Pointer Comparisons | Done | Johannes
Non-affine subregions | Done | Johannes
Polly as an analysis
Task | Status | Owner
Model scalars dependences directly in Polly | Done |
Code generate scalar dependences | Done |
Model PHI dependences directly in Polly | Done |
Code generate PHI dependences | Done |
Remove the need for independent blocks | Done |
Remove polly-prepare pass | Open |
Correctness in cornercases
Task | Status | Owner
Derive optimal types (instead of always using i64) | Open |
Model integer wrapping | Done | Johannes
Optimize Julia code with Polly analysis
Task | Status | Owner
| Integrate Polly into Julia | Open |
Eliminate run-time bounds checks | Open |
- Reconsider unreachables in post-dominance tree | Open |
| - Actually eliminate statements | Done |
Improved Optimizations in Polly
Task | Status | Owner
| Multi-level tiling | Open |
Register Tiling | Open |
Full/partial tile separation for vectorization | Done |
| Loop interchange after vectorization to maximize stride-one accesses | Open |

### Phase 3 - Improve Robustness, Interoperability and Optimizations (ongoing)

Frontend
Task | Status | Owner
--- | --- | ---
Non-affine access functions | Done, needs testing | Marcello
Variable-size multi-dimensional arrays | Done | Sebastian
Derive information for the SCoP context | Open |
Finer grained statements | Open |
Detect reductions | Done | Johannes
Generate code for reductions | in progress | Johannes
Assume static sized arrays are only accessed in-bounds | Done | Tobias
Optimizer
Task | Status | Owner
Polyhedral dead code elimination | Done |
Back End
Task | Status | Owner
OpenMP code generation support in isl backend (requirement to drop CLooG) | Done | Tobias
Run-time alias checks | Done | Johannes
Allow optimizers to change memory access functions | Done | Johannes
Make code generation independent of the clast | Done |
General
Task | Status | Owner
Teach bugpoint to extract regions | Open |
Add Polybench 3.2 to the LLVM test suite | Done |
Build against an installed LLVM | Done |
Setup buildbot regression testers using LNT | Done | Tobias

### Polly as a LLVM Project (Finished February 2012)

Task | Status | Owner
--- | --- | ---
Move to LLVM SVN | https://llvm.org/svn/llvm-project/polly | Tobias
Commit mails | llvm-commits@lists.llvm.org | Tobias
LLVM Bugzilla category | LLVM Bugzilla (Product is 'Projects', Component is 'Polly') | Tobias
Website | https://polly.llvm.org | Tobias
Buildbot that runs 'make polly-test' | Buildbot | Tobias, Andreas

### Phase 2 - First Optimizations and Enhanced User Experience (Finished February 2012)

First optimizations to show the usefulness of Polly and enhance the user experience. We also try to increase the amount of code we can optimize.

Frontend
Task | Status | Owner
--- | --- | ---
Allow parameters in access functions | Done | Tobias
Improved Scalar Evolution parsing | Done | Tobias
(Graphical) user feedback on Scop Detection | Done | Tobias
Optimizer
Task | Status | Owner
Dependency Analysis | Done | Tobias
Optimizer - Connect Pluto (through PoCC) | Done | Tobias
Optimizer - Add ISL internal Pluto like optimizer | Done | Tobias
Import/Export - SCoPLib 0.2 (needed for PoCC) | Done | Tobias
Back End
Task | Status | Owner
SIMD code generation for trivially vectorizable loops | Done | Tobias
OpenMP code generation | Done | Raghesh, Tobias
General
Task | Status | Owner
clang integration | done | Tobias
Commit RegionPass patch upstream | done | Tobias

### Phase 1 - Get Something Working (Finished October 2010)

Create a minimal version of Polly that can transform an LLVM-IR program to the polyhedral model and back to LLVM-IR. No transformations are performed.

Front End
Task | Status | Owner
--- | --- | ---
| Region detection | Done | Ether
Access Functions | Done | John, Ether
Alias sets | Done | Ether
Scalar evolution to affine expression | Done | Ether
SCoP extraction | Done | Tobias, Ether
SCoPs to polyhedral model | Done | Tobias, Ether
Optimizer
Task | Status | Owner
Define polyhedral description | Done | Tobias
Back End
Task | Status | Owner
Create LLVM-IR using CLooG | Done | Tobias
General
Task | Status | Owner
Setup git repositories | Done | Tobias
Add CLooG/isl to build system | Done | Tobias