; RUN: opt -basic-aa -loop-idiom < %s -S | FileCheck %s
target datalayout = "e-p:64:64:64:32-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"

; CHECK: @.memset_pattern = private unnamed_addr constant [4 x i32] [i32 2, i32 2, i32 2, i32 2], align 16

target triple = "x86_64-apple-darwin10.0.0"

;void test(int *f, unsigned n) {
;  for (unsigned i = 0; i < 2 * n; i += 2) {
;    f[i] = 0;
;    f[i+1] = 0;
;  }
;}
define void @test(i32* %f, i32 %n) nounwind ssp {
entry:
  %0 = shl i32 %n, 1
  %cmp1 = icmp eq i32 %0, 0
  br i1 %cmp1, label %for.end, label %for.body.preheader

for.body.preheader:                               ; preds = %entry
  br label %for.body

for.body:                                         ; preds = %for.body.preheader, %for.body
  %indvars.iv = phi i32 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
  %arrayidx = getelementptr inbounds i32, i32* %f, i32 %indvars.iv
  store i32 0, i32* %arrayidx, align 4
  %1 = or i32 %indvars.iv, 1
  %arrayidx2 = getelementptr inbounds i32, i32* %f, i32 %1
  store i32 0, i32* %arrayidx2, align 4
  %indvars.iv.next = add nuw nsw i32 %indvars.iv, 2
  %cmp = icmp ult i32 %indvars.iv.next, %0
  br i1 %cmp, label %for.body, label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %entry
  ret void
; CHECK-LABEL: @test(
; CHECK: call void @llvm.memset
; CHECK-NOT: store
}

;void test_pattern(int *f, unsigned n) {
;  for (unsigned i = 0; i < 2 * n; i += 2) {
;    f[i] = 2;
;    f[i+1] = 2;
;  }
;}
define void @test_pattern(i32* %f, i32 %n) nounwind ssp {
entry:
  %mul = shl i32 %n, 1
  %cmp1 = icmp eq i32 %mul, 0
  br i1 %cmp1, label %for.end, label %for.body.preheader

for.body.preheader:                               ; preds = %entry
  br label %for.body

for.body:                                         ; preds = %for.body.preheader, %for.body
  %indvars.iv = phi i32 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
  %arrayidx = getelementptr inbounds i32, i32* %f, i32 %indvars.iv
  store i32 2, i32* %arrayidx, align 4
  %x1 = or i32 %indvars.iv, 1
  %arrayidx2 = getelementptr inbounds i32, i32* %f, i32 %x1
  store i32 2, i32* %arrayidx2, align 4
  %indvars.iv.next = add nuw nsw i32 %indvars.iv, 2
  %cmp = icmp ult i32 %indvars.iv.next, %mul
  br i1 %cmp, label %for.body, label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %entry
  ret void
; CHECK-LABEL: @test_pattern(
; CHECK: call void @memset_pattern16
; CHECK-NOT: store
}
