At some point we enforced lcssa for the loop surrounding the entry block. This is not only questionable as it does not check any other loop but also not needed any more. llvm-svn: 253789
45 lines
962 B
LLVM
45 lines
962 B
LLVM
; RUN: opt %loadPolly -polly-detect -analyze < %s | FileCheck %s
|
|
|
|
; void f(long A[], long N) {
|
|
; long i;
|
|
;
|
|
; if (true)
|
|
; goto loop;
|
|
; else
|
|
; goto loop;
|
|
;
|
|
; loop:
|
|
; for (i = 0; i < N; ++i)
|
|
; A[i] = i;
|
|
; }
|
|
|
|
; We will detect this scop even if the loop is not in lcssa form
|
|
|
|
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"
|
|
|
|
define void @f(i64* %A, i64 %N) nounwind {
|
|
entry:
|
|
fence seq_cst
|
|
br i1 true, label %then, label %else
|
|
|
|
then:
|
|
br label %for.i
|
|
|
|
else:
|
|
br label %for.i
|
|
|
|
for.i:
|
|
%indvar = phi i64 [ 0, %then ], [ 0, %else], [ %indvar.next, %for.i ]
|
|
%scevgep = getelementptr i64, i64* %A, i64 %indvar
|
|
store i64 %indvar, i64* %scevgep
|
|
%indvar.next = add nsw i64 %indvar, 1
|
|
%exitcond = icmp eq i64 %indvar.next, %N
|
|
br i1 %exitcond, label %return, label %for.i
|
|
|
|
return:
|
|
fence seq_cst
|
|
ret void
|
|
}
|
|
|
|
; CHECK: Valid Region for Scop
|