Skip to content

Commit

Permalink
[GSoC] Do not process SCoPs with infeasible runtime context
Browse files Browse the repository at this point in the history
  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
  • Loading branch information
Johannes Doerfert committed Jul 25, 2016
1 parent 1823d6c commit 3b7ac0a
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 2 deletions.
4 changes: 3 additions & 1 deletion polly/lib/Analysis/DependenceInfo.cpp
Expand Up @@ -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;
}

Expand Down
5 changes: 4 additions & 1 deletion polly/lib/Analysis/ScopInfo.cpp
Expand Up @@ -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;
}
Expand Down
69 changes: 69 additions & 0 deletions polly/test/DependenceInfo/infeasible_context.ll
@@ -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()

0 comments on commit 3b7ac0a

Please sign in to comment.