HomePhabricator

[LSV] Look through selects for consecutive addresses

Description

[LSV] Look through selects for consecutive addresses

In some cases LSV sees (load/store _ (select _ <pointer expression>
<pointer expression>)) patterns in input IR, often due to sinking and
other forms of CFG simplification, sometimes interspersed with
bitcasts and all-constant-indices GEPs. With this
patch`areConsecutivePointers` method would attempt to handle select
instructions. This leads to an increased number of successful
vectorizations.

Technically, select instructions could appear in index arithmetic as
well, however, we don't see those in our test suites / benchmarks.
Also, there is a lot more freedom in IR shapes computing integral
indices in general than in what's common in pointer computations, and
it appears that it's quite unreliable to do anything short of making
select instructions first class citizens of Scalar Evolution, which
for the purposes of this patch is most definitely an overkill.

Reviewed By: rampitec

Differential Revision: https://reviews.llvm.org/D49428

Details

Committed
rtereshinJul 25 2018, 2:33 PM
Reviewer
rampitec
Differential Revision
D49428: [LSV] Look through selects for consecutive addresses
Parents
rL337964: [AArch, PowerPC] add more tests for legal rotate ops; NFC
Branches
Unknown
Tags
Unknown