llvm-project/llvm/lib/Transforms
Matthew Simpson e794678404 [LV] Preserve order of dependences in interleaved accesses analysis
The interleaved access analysis currently assumes that the inserted run-time
pointer aliasing checks ensure the absence of dependences that would prevent
its instruction reordering. However, this is not the case.

Issues can arise from how code generation is performed for interleaved groups.
For a load group, all loads in the group are essentially moved to the location
of the first load in program order, and for a store group, all stores in the
group are moved to the location of the last store. For groups having members
involved in a dependence relation with any other instruction in the loop, this
reordering can violate the dependence.

This patch teaches the interleaved access analysis how to avoid breaking such
dependences, and should fix PR27626.

An assumption of the original analysis was that the accesses had been collected
in "program order". The analysis was then simplified by visiting the accesses
bottom-up. However, this ordering was never guaranteed for anything other than
single basic block loops. Thus, this patch also enforces the desired ordering.

Reference: https://llvm.org/bugs/show_bug.cgi?id=27626
Differential Revision: http://reviews.llvm.org/D19984

llvm-svn: 273687
2016-06-24 15:33:25 +00:00
..
Hello Add auto-exporting of symbols from tools so that plugins work on Windows 2016-05-26 11:16:43 +00:00
IPO IR: Introduce Module::global_objects(). 2016-06-22 20:29:42 +00:00
InstCombine InstCombine rule to fold trunc when value available 2016-06-23 20:22:22 +00:00
Instrumentation Switch more loops to be range-based 2016-06-24 04:05:21 +00:00
ObjCARC Switch more loops to be range-based 2016-06-24 04:05:21 +00:00
Scalar [LICM] Avoid repeating expensive call while promoting loads. NFC 2016-06-24 12:38:45 +00:00
Utils Switch more loops to be range-based 2016-06-24 04:05:21 +00:00
Vectorize [LV] Preserve order of dependences in interleaved accesses analysis 2016-06-24 15:33:25 +00:00
CMakeLists.txt
LLVMBuild.txt