[PATCH] D30477: [SCEV] Compute affine range in another way to avoid bitwidth extending.
Michael Zolotukhin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 28 15:14:06 PST 2017
mzolotukhin created this revision.
This approach has two major advantages over the existing one:
1. We don't need to extend bitwidth in our computations. Extending
bitwidth is a big issue for compile time as we often end up working with
APInts wider than 64bit, which is a slow case for APInt.
2. When we zero extend a wrapped range, we lose some information (we
replace the range with [0, 1 << src bit width)). Thus, avoiding such
extensions better preserves information.
Correctness testing:
I ran 'ninja check' with assertions that the new implementation of
getRangeForAffineAR gives the same results as the old one (this
functionality is not present in this patch). There were several failures
- I inspected them manually and found out that they all are caused by
the fact that we're returning more accurate results now (see bullet (2)
above).
Without such assertions 'ninja check' works just fine, as well as
SPEC2006.
Compile time testing:
CTMark/Os:
- mafft/pairlocalalign -16.98%
- tramp3d-v4/tramp3d-v4 -12.72%
- lencod/lencod -11.51%
- Bullet/bullet -4.36%
- ClamAV/clamscan -3.66%
- 7zip/7zip-benchmark -3.19%
- sqlite3/sqlite3 -2.95%
- SPASS/SPASS -2.74%
- Average -5.81%
Performance testing:
The changes are expected to be neutral for runtime performance. That
said, I plan to run some tests overnight to verify that.
https://reviews.llvm.org/D30477
Files:
lib/Analysis/ScalarEvolution.cpp
test/Analysis/ScalarEvolution/zext-wrap.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D30477.90092.patch
Type: text/x-patch
Size: 10814 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170228/f3fc7d8d/attachment.bin>
More information about the llvm-commits
mailing list