[polly] r244606 - Revise the simplification of regions

Michael Kruse via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 08:32:22 PDT 2015


Looking into it. I find an assertion fail in the log:

clang: /home/grosser/buildslave/perf-x86_64-penryn-O3-polly-fast/llvm.src/lib/Analysis/ScalarEvolution.cpp:3317:
const llvm::SCEV* llvm::ScalarEvolution::getSCEV(llvm::Value*):
Assertion `isSCEVable(V->getType()) && "Value is not SCEVable!"'
failed.

Michael


2015-08-11 17:08 GMT+02:00 Tobias Grosser <tobias at grosser.es>:
> On 08/11/2015 04:39 PM, Michael Kruse via llvm-commits wrote:
>>
>> Author: meinersbur
>> Date: Tue Aug 11 09:39:21 2015
>> New Revision: 244606
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=244606&view=rev
>> Log:
>> Revise the simplification of regions
>>
>> The previous code had several problems:
>>
>> For newly created BasicBlocks it did not (always) call
>> RegionInfo::setRegionFor in order to update its analysis. At the moment
>> RegionInfo does not verify its BBMap, but will in the future. This is fixed
>> by determining the region new BBs belong to and set it accordingly. The new
>> executeScopConditionally() requires accurate getRegionFor information.
>>
>> Which block is created by SplitEdge depends on the incoming and outgoing
>> edges of the blocks it connects, which makes handling its output more
>> difficult than it needs to be. Especially for finding which block has been
>> created an to assign a region to it for the setRegionFor problem above. This
>> patch uses an implementation for splitEdge that always creates a block
>> between the predecessor and successor. simplifyRegion has also been
>> simplified by using SplitBlockPredecessors instead of SplitEdge. Isolating
>> the entries and exits have been refectored into individual functions.
>>
>> Previously simplifyRegion did more than just ensuring that there is only
>> one entering and one exiting edge. It ensured that the entering block had no
>> other outgoing edge which was necessary for executeScopConditionally(). Now
>> the latter uses the alternative splitEdge implementation which can handle
>> this situation so simplifyRegion really only needs to simplify the region.
>>
>> Also, executeScopConditionally assumed that there can be no PHI nodes in
>> blocks with one incoming edge. This is wrong and LCSSA deliberately produces
>> such edges. However, previous passes ensured that there can be no such PHIs
>> in exit nodes, but which will no longer hold in the future.
>>
>> The new code that the property that it preserves the identity of region
>> block (the property that the memory address of the BasicBlock containing the
>> instructions remains the same; new blocks only contain PHI nodes and a
>> terminator), especially the entry block. As a result, there is no need to
>> update the reference to the BasicBlock of ScopStmt that contain its
>> instructions because they have been moved to other basic blocks.
>>
>> Reviewers: grosser
>>
>> Part of Differential Revision: http://reviews.llvm.org/D11867
>
>
> It seems this triggers two LNT failures:
>
> http://lab.llvm.org:8011/builders/perf-x86_64-penryn-O3-polly-fast/builds/10539
>
> Tobias


More information about the llvm-commits mailing list