; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
;
; Verify that the presence of a may-write (S1) between a read (S0) and a
; must-write (S2) does not block the generation of RAW dependences. This makes
; sure that we capture as many RAW dependences as possible.
;
; For this example, we want both (S0(Read) -> S1 (May-Write)) as well as
; (S0(Read) -> S2(Must-Write)).
;
; CHECK: WAR dependences:
; CHECK-NEXT:     { Stmt_S0[i0] -> Stmt_if_end__TO__S2[i0] : 0 < i0 <= 2; Stmt_S0[i0] -> Stmt_S2[i0] : 0 < i0 <= 2 }
;
;
;    static const int N = 3000;
;
;    void f(int *sum, int *A, int *B, int *out) {
;      for (int i = 0; i <= 2; i++) {
;        if (i) {
; S0:          *out += *sum;
;        }
;
;        if (i * i) {
; S1:          *sum = *A;
;        }
; S2:        *sum = *B;
;      }
;    }
;
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"

define void @f(i32* %sum, i32* %A, i32* %B, i32* %out) {
entry:
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
  %exitcond = icmp ne i32 %i.0, 3
  br i1 %exitcond, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %tobool = icmp eq i32 %i.0, 0
  br i1 %tobool, label %if.end, label %S0

S0:                                          ; preds = %for.body
  %tmp = load i32, i32* %sum, align 4
  %tmp1 = load i32, i32* %out, align 4
  %add = add nsw i32 %tmp1, %tmp
  store i32 %add, i32* %out, align 4
  br label %if.end

if.end:                                           ; preds = %for.body, %S0
  %mul = mul nsw i32 %i.0, %i.0
  %tobool1 = icmp eq i32 %mul, 0
  br i1 %tobool1, label %S2, label %S1

S1:                                         ; preds = %if.end
  %tmp2 = load i32, i32* %A, align 4
  store i32 %tmp2, i32* %sum, align 4
  br label %S2

S2:                                          ; preds = %if.end, %S1
  %tmp3 = load i32, i32* %B, align 4
  store i32 %tmp3, i32* %sum, align 4
  br label %for.inc

for.inc:                                          ; preds = %S2
  %inc = add nuw nsw i32 %i.0, 1
  br label %for.cond

for.end:                                          ; preds = %for.cond
  ret void
}

