Set Dependences::RED to be non-null once Dependences::calculateDependences()

occurs, even if there is no actual reduction. This ensures correctness
with isl operations.

llvm-svn: 297981
This commit is contained in:
Siddharth Bhat 2017-03-16 20:06:49 +00:00
parent e959544517
commit 65c4026992
2 changed files with 35 additions and 0 deletions

View File

@ -427,6 +427,7 @@ void Dependences::calculateDependences(Scop &S) {
// reduction dependences or dependences that are finer than statement
// level dependences.
if (!HasReductions && Level == AL_Statement) {
RED = isl_union_map_empty(isl_union_map_get_space(RAW));
TC_RED = isl_union_map_empty(isl_union_set_get_space(TaggedStmtDomain));
isl_union_set_free(TaggedStmtDomain);
return;

View File

@ -0,0 +1,34 @@
; Test that the reduction dependences are always initialised, even in a case
; where we have no reduction. If this object is NULL, then isl operations on
; it will fail.
; RUN: opt -S %loadPolly -polly-dependences -analyze < %s | FileCheck %s -check-prefix=VALUE
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
; for(i = 0; i < 100; i++ )
; S1: A[i] = 2;
define void @sequential_writes() {
entry:
%A = alloca [200 x i32]
br label %S1
S1:
%indvar.1 = phi i64 [ 0, %entry ], [ %indvar.next.1, %S1 ]
%arrayidx.1 = getelementptr [200 x i32], [200 x i32]* %A, i64 0, i64 %indvar.1
store i32 2, i32* %arrayidx.1
%indvar.next.1 = add i64 %indvar.1, 1
%exitcond.1 = icmp ne i64 %indvar.next.1, 100
br i1 %exitcond.1, label %S1, label %exit.1
exit.1:
ret void
}
; VALUE: RAW dependences:
; VALUE-NEXT: { }
; VALUE-NEXT: WAR dependences:
; VALUE-NEXT: { }
; VALUE-NEXT: WAW dependences:
; VALUE-NEXT: { }
; VALUE-NEXT: Reduction dependences:
; VALUE-NEXT: { }