summaryrefslogtreecommitdiffstats
path: root/polly/docs
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2016-02-04 13:18:42 +0000
committerTobias Grosser <tobias@grosser.es>2016-02-04 13:18:42 +0000
commitd840fc7277bf43214f7622cf43ac8cea5e0ee052 (patch)
tree8d9282ad7e399f81f4138072acd66a79fc240a51 /polly/docs
parent2293685731bd02a352d36ca2a54211169631f5bd (diff)
downloadbcm5719-llvm-d840fc7277bf43214f7622cf43ac8cea5e0ee052.tar.gz
bcm5719-llvm-d840fc7277bf43214f7622cf43ac8cea5e0ee052.zip
Support accesses with differently sized types to the same array
This allows code such as: 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]; } } To model such code we use as canonical element type of the modeled array the smallest element type of all original array accesses, if type allocation sizes are multiples of each other. Otherwise, we use a newly created iN type, where N is the gcd of the allocation size of the types used in the accesses to this array. Accesses with types larger as the canonical element type are modeled as multiple accesses with the smaller type. For example the second load access is modeled as: { Stmt_bb2[i0] -> MemRef_Float[o0] : 4i0 <= o0 <= 3 + 4i0 } To support code-generating these memory accesses, we introduce a new method getAccessAddressFunction that assigns each statement instance a single memory location, the address we load from/store to. Currently we obtain this address by taking the lexmin of the access function. We may consider keeping track of the memory location more explicitly in the future. We currently do _not_ handle multi-dimensional arrays and also keep the restriction of not supporting accesses where the offset expression is not a multiple of the access element type size. This patch adds tests that ensure we correctly invalidate a scop in case these accesses are found. Both types of accesses can be handled using the very same model, but are left to be added in the future. We also move the initialization of the scop-context into the constructor to ensure it is already available when invalidating the scop. Finally, we add this as a new item to the 2.9 release notes Reviewers: jdoerfert, Meinersbur Differential Revision: http://reviews.llvm.org/D16878 llvm-svn: 259784
Diffstat (limited to 'polly/docs')
-rw-r--r--polly/docs/ReleaseNotes.rst21
1 files changed, 21 insertions, 0 deletions
diff --git a/polly/docs/ReleaseNotes.rst b/polly/docs/ReleaseNotes.rst
index d6eb1c81525..1f75ead6a4e 100644
--- a/polly/docs/ReleaseNotes.rst
+++ b/polly/docs/ReleaseNotes.rst
@@ -4,6 +4,27 @@ Release Notes
In Polly 3.9 the following important changes have been incorporated.
+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];
+ }
+ }
Update of the isl math library
------------------------------
OpenPOWER on IntegriCloud