; RUN: opt %loadPolly -polly-detect-unprofitable -polly-detect -analyze < %s | FileCheck %s
; RUN: opt %loadPolly -polly-detect-unprofitable -polly-detect -analyze < %s | FileCheck %s

; void f(long A[], long N) {
;   long i;
;   if (true)
;     for (i = 0; i < N; ++i)
;       A[i] = i;
;   else
;     for (j = 0; j < N; ++j)
;        A[j] = j;
; }

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"

declare i64 @foo()

define void @f(i64* %A, i64 %N) nounwind {
entry:
  fence seq_cst
  br i1 true, label %next, label %next2

next2:
  br i1 true, label %for.j, label %return

for.j:
  %indvar2 = phi i64 [ 0, %next2], [ %indvar2.next2, %for.j]
  %scevgep2 = getelementptr i64, i64* %A, i64 %indvar2
  store i64 %indvar2, i64* %scevgep2
  %indvar2.next2 = add nsw i64 %indvar2, 1
  %exitcond2 = icmp eq i64 %indvar2.next2, %N
  br i1 %exitcond2, label %return, label %for.j

next:
  br i1 true, label %for.i, label %return

for.i:
  %indvar = phi i64 [ 0, %next], [ %indvar.next, %for.i ]
  %scevgep = getelementptr i64, i64* %A, i64 %indvar
  store i64 %indvar, i64* %scevgep
  %i = call i64 @foo()
  %indvar.next = add nsw i64 %indvar, 1
  %exitcond = icmp eq i64 %indvar.next, %N
  br i1 %exitcond, label %return, label %for.i

return:
  br i1 true, label %return_a, label %return_b

return_a:
  br label %return_join

return_b:
  br label %return_join

return_join:
  fence seq_cst
  ret void
}

; CHECK-NOT: Valid Region for Scop: next => return
; CHECK: Valid Region for Scop: next2 => return
