[GSoC] Do not process SCoPs with infeasible runtime context

Do not process SCoPs with infeasible runtime context in the new
  ScopInfoWrapperPass. Do not compute dependences for such SCoPs in the new
  DependenceInfoWrapperPass.

Patch by Utpal Bora <cs14mtech11017@iith.ac.in>

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

llvm-svn: 276631
This commit is contained in:
Johannes Doerfert 2016-07-25 12:40:59 +00:00
parent 1823d6c8af
commit 3b7ac0a691
3 changed files with 76 additions and 2 deletions

View File

@ -830,8 +830,10 @@ const Dependences &DependenceInfoWrapperPass::recomputeDependences(
bool DependenceInfoWrapperPass::runOnFunction(Function &F) {
auto &SI = getAnalysis<ScopInfoWrapperPass>();
for (auto &It : SI)
for (auto &It : SI) {
assert(It.second && "Invalid SCoP object!");
recomputeDependences(It.second.get(), Dependences::AL_Access);
}
return false;
}

View File

@ -4273,8 +4273,11 @@ bool ScopInfoWrapperPass::runOnFunction(Function &F) {
continue;
ScopBuilder SB(R, AC, AA, DL, DT, LI, SD, SE);
std::unique_ptr<Scop> S = SB.getScop();
if (!S)
continue;
bool Inserted =
RegionToScopMap.insert(std::make_pair(R, SB.getScop())).second;
RegionToScopMap.insert(std::make_pair(R, std::move(S))).second;
assert(Inserted && "Building Scop for the same region twice!");
(void)Inserted;
}

View File

@ -0,0 +1,69 @@
; RUN: opt %loadPolly -polly-function-scops -analyze < %s \
; RUN: | FileCheck %s -check-prefix=FUNC-SCOP
; RUN: opt %loadPolly -polly-function-dependences -analyze < %s \
; RUN: | FileCheck %s -check-prefix=FUNC-DEPS
;
; FUNC-SCOP-NOT: Statement
; FUNC-DEPS-LABEL: Printing analysis 'Polly - Calculate dependences for all the SCoPs of a function' for function 'readgeo'
; FUNC-DEPS-NOT: RAW dependences
;
; Due to an infeasible run-time check, scop object is empty and we do not compute dependences.
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
%struct.tnode.1.7.13.67.121.175.217.307.325.337.349.367.379.391.433.445.667.727.733.739 = type { i32, i32, %struct.tnode.1.7.13.67.121.175.217.307.325.337.349.367.379.391.433.445.667.727.733.739*, %struct.tnode.1.7.13.67.121.175.217.307.325.337.349.367.379.391.433.445.667.727.733.739*, %struct.tnode.1.7.13.67.121.175.217.307.325.337.349.367.379.391.433.445.667.727.733.739*, %struct.tnode.1.7.13.67.121.175.217.307.325.337.349.367.379.391.433.445.667.727.733.739*, %struct.tnode.1.7.13.67.121.175.217.307.325.337.349.367.379.391.433.445.667.727.733.739*, i32, i32, %struct.plist.0.6.12.66.120.174.216.306.324.336.348.366.378.390.432.444.666.726.732.738* }
%struct.plist.0.6.12.66.120.174.216.306.324.336.348.366.378.390.432.444.666.726.732.738 = type { i32, %struct.plist.0.6.12.66.120.174.216.306.324.336.348.366.378.390.432.444.666.726.732.738* }
@vFixedEdgeRoot = external global %struct.tnode.1.7.13.67.121.175.217.307.325.337.349.367.379.391.433.445.667.727.733.739*, align 8
@hEdgeRoot = external global %struct.tnode.1.7.13.67.121.175.217.307.325.337.349.367.379.391.433.445.667.727.733.739*, align 8
; Function Attrs: nounwind uwtable
define void @readgeo() #0 {
entry:
%vx = alloca i32, align 4
br label %if.end64
if.end64: ; preds = %entry
br label %for.body73
for.body73: ; preds = %for.inc216, %if.end64
%v.0101 = phi i32 [ 0, %for.inc216 ], [ 1, %if.end64 ]
br i1 undef, label %if.then93, label %if.else
if.then93: ; preds = %for.body73
br label %for.inc216
if.else: ; preds = %for.body73
br i1 undef, label %if.then111, label %if.end116
if.then111: ; preds = %if.else
br label %if.end116
if.end116: ; preds = %if.then111, %if.else
%rippleCount.2 = phi i32 [ 1, %if.then111 ], [ undef, %if.else ]
%rem11790 = and i32 %v.0101, 1
%cmp118 = icmp eq i32 %rem11790, 0
br i1 %cmp118, label %if.then120, label %if.else154
if.then120: ; preds = %if.end116
call void @tinsert()
br label %if.end193
if.else154: ; preds = %if.end116
call void @tinsert()
br label %if.end193
if.end193: ; preds = %if.else154, %if.then120
%0 = load i32, i32* %vx, align 4
br label %for.inc216
for.inc216: ; preds = %if.end193, %if.then93
%rippleCount.3 = phi i32 [ undef, %if.then93 ], [ %rippleCount.2, %if.end193 ]
%ux.2 = phi i32 [ undef, %if.then93 ], [ %0, %if.end193 ]
br i1 undef, label %for.body73, label %for.end218
for.end218: ; preds = %for.inc216
unreachable
}
declare void @tinsert()