Generalize strided store pattern in interleave access pass
authorAlina Sbirlea <asbirlea@google.com>
Tue, 13 Dec 2016 19:32:36 +0000 (19:32 +0000)
committerAlina Sbirlea <asbirlea@google.com>
Tue, 13 Dec 2016 19:32:36 +0000 (19:32 +0000)
commit77c5eaaedac7dde060b72a67514c41d2fa9df466
treec211bcc74fdca5b533add6e0d3f1004a995ae935
parentc74da7ce581f0c42cb92b6a186c3e005f7b159d1
Generalize strided store pattern in interleave access pass

Summary:
This patch aims to generalize matching of the strided store accesses to more general masks.
The more general rule is to have consecutive accesses based on the stride:
[x, y, ... z, x+1, y+1, ...z+1, x+2, y+2, ...z+2, ...]
All elements in the masks need not form a contiguous space, there may be gaps.
As before, undefs are allowed and filled in with adjacent element loads.

Reviewers: HaoLiu, mssimpso

Subscribers: mkuper, delena, llvm-commits

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

llvm-svn: 289573
llvm/lib/CodeGen/InterleavedAccessPass.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/test/CodeGen/AArch64/aarch64-interleaved-accesses.ll
llvm/test/CodeGen/ARM/arm-interleaved-accesses.ll