[PATCH] [SCEV][LoopVectorize] Allow ScalarEvolution to make assumptions about overflows
Silviu Baranga
Silviu.Baranga at arm.com
Thu Jun 11 02:57:28 PDT 2015
Ping? (http://reviews.llvm.org/D10161)
@Sanjoy: would you be willing to review this? It looks like you might be
the person to do it.
Also CC'ing Adam as he might be interested as well.
Thanks,
Silviu
>> -----Original Message-----
>> From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
>> bounces at cs.uiuc.edu] On Behalf Of silviu.baranga at arm.com
>> Sent: 01 June 2015 17:16
>> To: Silviu Baranga
>> Cc: llvm-commits at cs.uiuc.edu
>> Subject: [PATCH] [SCEV][LoopVectorize] Allow ScalarEvolution to make
>> assumptions about overflows
>>
>> Add a new pass - AssumingScalarEvolution - that extends SCEV, but can
>> make assumptions and generate code that can check these assumptions.
>> This pass uses the normal ScalarEvolution pass for anything outside the
>> current analyzed loop, but uses its own data structures to handle the SCEVs
>> within the loop. For now, the pass assumes that chrec expressions will not
>> overflow.
>>
>> The AssumingScalarEvolution pass can add checks for the made
>> assumptions, so that a loop can be versioned.
>>
>> We use this pass in order to add runtime overflow checks in the Loop
>> Vectorize pass of expressions which can in theory overflow and would
>> prevent the vectorization a loop. Also note that the runtime checks will
>> almost always pass, since having an overflow is usually a sign of a coding
>> error on the part of user.
>>
>> The main reasons behind inheriting from ScalarEvolution:
>> Since ScalarEvolution maintains its own cache for various results, making any
>> assumption would likely require invalidating the entire cache.
>>
>> This way we can use the new pass as an almost drop-in replacement for
>> ScalarEvolution. The users that are doing a transformation would have to
>> know about it in order to add the checks.
>>
>> However, there are probably a lot more ways in which this could be
>> implemented.
>>
>> Any comments are much appreciated!
>>
>> Thanks,
>> Silviu
>>
>> http://reviews.llvm.org/D10161
>>
>> Files:
>> include/llvm/Analysis/LoopAccessAnalysis.h
>> include/llvm/Analysis/ScalarEvolution.h
>> include/llvm/InitializePasses.h
>> lib/Analysis/Analysis.cpp
>> lib/Analysis/LoopAccessAnalysis.cpp
>> lib/Analysis/ScalarEvolution.cpp
>> lib/Transforms/Vectorize/LoopVectorize.cpp
>> test/Transforms/LoopVectorize/safegep.ll
>> test/Transforms/LoopVectorize/scev-overflow-check.ll
>> test/Transforms/LoopVectorize/version-mem-access.ll
>>
>> EMAIL PREFERENCES
>> http://reviews.llvm.org/settings/panel/emailpreferences/
More information about the llvm-commits
mailing list