========================
Release Notes (upcoming)
========================

In Polly 4 the following important changes have been incorporated.


Polly directly available in clang/opt/bugpoint
----------------------------------------------

Polly supported since a long time to be directly linked into tools such as
opt/clang/bugpoint. Since this release, the default for a source checkout that
contains Polly is to provide Polly directly through these tools, rather than as
an additional module. This makes using Polly significantly easier.

Instead of

.. code-block:: bash

    opt -load lib/LLVMPolly.so -O3 -polly file.ll
    clang -Xclang -load -Xclang lib/LLVMPolly.so -O3 -mllvm -polly file.ll

one can now use

.. code-block:: bash

    opt -O3 -polly file.ll
    clang -O3 -mllvm -polly file.c


Increased analysis coverage
---------------------------

Polly's modeling has been improved to increase the applicability of Polly. The
following code pieces are newly supported:

Arrays accessed through different types
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

It is not uncommon that one array stores elements of different types. Polly now
can model and optimize such code.

.. code-block:: c

    void multiple_types(char *Short, char *Float, char *Double) {
      for (long i = 0; i < 100; i++) {
        Short[i] = *(short *)&Short[2 * i];
        Float[i] = *(float *)&Float[4 * i];
        Double[i] = *(double *)&Double[8 * i];
      }
    }


If the accesses are not aligned with the size of the access type we model them
as multiple accesses to an array of smaller elements. This is especially
useful for structs containing different typed elements as accesses to them are
represented using only one base pointer, namely the ``struct`` itself.  In the
example below the accesses to ``s`` are all modeled as if ``s`` was a single
char array because the accesses to ``s->A`` and ``s->B`` are not aligned with
their respective type size (both are off-by-one due to the ``char`` field in
the ``struct``).

.. code-block:: c

    struct S {
      char Offset;
      int A[100];
      double B[100];
    };

    void struct_accesses(struct S *s) {
      for (long i = 0; i < 100; i++)
        s->B[i] += s->A[i];
    }



Function calls with known side effects
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Function calls that have only known memory effects can be represented as
accesses in the polyhedral model. While calls without side effects were
supported before, we now allow and model two other kinds. The first are
intrinsic calls to ``memcpy``, ``memmove`` and ``memset``. These calls can be
represented precisely if the pointers involved are known and the given length
is affine. Additionally, we allow to over-approximate function calls that are
known only to read memory, read memory accessible through pointer arguments or
access only memory accessible through pointer arguments. See also the function
attributes ``readonly`` and ``argmemonly`` for more information.

Fine-grain dependences analysis
-------------------------------

In addition of the ScopStmt wise dependences analysis, now the "polly-dependence"
pass provides dependences analysis at memory reference wise and memory access wise.
The memory reference wise analysis distinguishes the accessed references in the
same statement, and generates dependences relationships between (statement, reference)
pairs. The memory access wise analysis distinguishes accesses in the same statement,
and generates dependences relationships between (statement, access) pairs. These
fine-grain dependences are enabled by "-polly-dependences-analysis-level=reference-wise"
and "-polly-dependences-analysis-level=access-wise", respectively.

Update of the isl math library
------------------------------

We imported the latest version of the isl math library into Polly.

