summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
diff options
context:
space:
mode:
authorRoman Tereshin <rtereshin@apple.com>2018-07-24 21:48:56 +0000
committerRoman Tereshin <rtereshin@apple.com>2018-07-24 21:48:56 +0000
commit1ba1f9310c26507bdeaa70695e4e5529b33e842d (patch)
tree6778503ce98ac0f807dd0ddce31681974c9cc5f6 /llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
parent5ddc0a2b149daf41a4df3d215555c96343326cf5 (diff)
downloadbcm5719-llvm-1ba1f9310c26507bdeaa70695e4e5529b33e842d.tar.gz
bcm5719-llvm-1ba1f9310c26507bdeaa70695e4e5529b33e842d.zip
[SCEV] Add zext(C + x + ...) -> D + zext(C-D + x + ...)<nuw><nsw> transform
if the top level addition in (D + (C-D + x + ...)) could be proven to not wrap, where the choice of D also maximizes the number of trailing zeroes of (C-D + x + ...), ensuring homogeneous behaviour of the transformation and better canonicalization of such expressions. This enables better canonicalization of expressions like 1 + zext(5 + 20 * %x + 24 * %y) and zext(6 + 20 * %x + 24 * %y) which get both transformed to 2 + zext(4 + 20 * %x + 24 * %y) This pattern is common in address arithmetics and the transformation makes it easier for passes like LoadStoreVectorizer to prove that 2 or more memory accesses are consecutive and optimize (vectorize) them. Reviewed By: mzolotukhin Differential Revision: https://reviews.llvm.org/D48853 llvm-svn: 337859
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/LoopVectorize.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud