summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/lib/Support/SCEVAffinator.cpp3
-rw-r--r--polly/test/ScopInfo/multidim_only_ivs_3d_cast.ll2
-rw-r--r--polly/test/ScopInfo/zero_ext_space_mismatch.ll30
3 files changed, 33 insertions, 2 deletions
diff --git a/polly/lib/Support/SCEVAffinator.cpp b/polly/lib/Support/SCEVAffinator.cpp
index 1e6fb5ce2e6..ed3eb10345e 100644
--- a/polly/lib/Support/SCEVAffinator.cpp
+++ b/polly/lib/Support/SCEVAffinator.cpp
@@ -338,8 +338,9 @@ SCEVAffinator::visitZeroExtendExpr(const SCEVZeroExtendExpr *Expr) {
auto *NegDom = isl_pw_aff_pos_set(NegOpPWA);
auto *ExprDomain = BB ? S->getDomainConditions(BB) : nullptr;
NegDom = ExprDomain ? isl_set_intersect(NegDom, ExprDomain) : NegDom;
- auto DL = BB ? BB->getTerminator()->getDebugLoc() : DebugLoc();
OpPWAC.second = isl_set_union(OpPWAC.second, isl_set_copy(NegDom));
+ NegDom = BB ? NegDom : isl_set_params(NegDom);
+ auto DL = BB ? BB->getTerminator()->getDebugLoc() : DebugLoc();
S->recordAssumption(UNSIGNED, NegDom, DL, AS_RESTRICTION, BB);
return OpPWAC;
}
diff --git a/polly/test/ScopInfo/multidim_only_ivs_3d_cast.ll b/polly/test/ScopInfo/multidim_only_ivs_3d_cast.ll
index 8960cabf4f8..fbe722e7361 100644
--- a/polly/test/ScopInfo/multidim_only_ivs_3d_cast.ll
+++ b/polly/test/ScopInfo/multidim_only_ivs_3d_cast.ll
@@ -11,7 +11,7 @@
; CHECK: Assumed Context:
; CHECK-NEXT: [o, m, n] -> { : }
; CHECK-NEXT: Invalid Context:
-; CHECK-NEXT: [o, m, n] -> { : o < 0 or (o >= 0 and m < 0) or (o >= 0 and m >= 0 and n <= 0) or (m = 0 and o >= 0 and n > 0) or (o = 0 and m > 0 and n > 0) }
+; CHECK-NEXT: [o, m, n] -> { : o < 0 or m < 0 or (o >= 0 and m >= 0 and n <= 0) or (m = 0 and o >= 0 and n > 0) or (o = 0 and m > 0 and n > 0) }
;
; CHECK: p0: %o
diff --git a/polly/test/ScopInfo/zero_ext_space_mismatch.ll b/polly/test/ScopInfo/zero_ext_space_mismatch.ll
new file mode 100644
index 00000000000..98f3750efd9
--- /dev/null
+++ b/polly/test/ScopInfo/zero_ext_space_mismatch.ll
@@ -0,0 +1,30 @@
+; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
+;
+; CHECK: Assumed Context:
+; CHECK-NEXT: [dim] -> { : dim > 0 }
+; CHECK-NEXT: Invalid Context:
+; CHECK-NEXT: [dim] -> { : dim < 0 }
+;
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+; Function Attrs: nounwind uwtable
+define void @horner_bezier_curve(float* %cp, i32 %dim) #0 {
+entry:
+ br label %for.body18.lr.ph
+
+for.body18.lr.ph: ; preds = %entry
+ %add.ptr = getelementptr inbounds float, float* %cp, i64 0
+ br label %for.body18
+
+for.body18: ; preds = %for.body18, %for.body18.lr.ph
+ %cp.addr.052 = phi float* [ %add.ptr, %for.body18.lr.ph ], [ %add.ptr43, %for.body18 ]
+ %arrayidx31 = getelementptr inbounds float, float* %cp.addr.052, i64 0
+ %0 = load float, float* %arrayidx31, align 4
+ store float %0, float* %arrayidx31, align 4
+ %idx.ext42 = zext i32 %dim to i64
+ %add.ptr43 = getelementptr inbounds float, float* %cp.addr.052, i64 %idx.ext42
+ br i1 false, label %for.body18, label %if.end
+
+if.end: ; preds = %for.body18
+ ret void
+}
OpenPOWER on IntegriCloud