; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes="loop-idiom" < %s -S | FileCheck %s

define void @looper(ptr nocapture %out) {
; CHECK-LABEL: @looper(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[M:%.*]] = getelementptr double, ptr [[OUT:%.*]], i32 16
; CHECK-NEXT:    call void @llvm.memmove.p0.p0.i64(ptr align 8 [[OUT]], ptr align 8 [[M]], i64 256, i1 false), !tbaa [[TBAA0:![0-9]+]]
; CHECK-NEXT:    br label [[FOR_BODY4:%.*]]
; CHECK:       for.body4:
; CHECK-NEXT:    [[J_020:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY4]] ]
; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[M]], i64 [[J_020]]
; CHECK-NEXT:    [[A0:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA0]]
; CHECK-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[OUT]], i64 [[J_020]]
; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[J_020]], 1
; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i64 [[J_020]], 31
; CHECK-NEXT:    br i1 [[CMP2]], label [[FOR_BODY4]], label [[FOR_COND_CLEANUP:%.*]]
; CHECK:       for.cond.cleanup:
; CHECK-NEXT:    ret void
;
entry:
  %M = getelementptr double, ptr %out, i32 16
  br label %for.body4

for.body4:                                        ; preds = %for.cond1.preheader, %for.body4
  %j.020 = phi i64 [ 0, %entry ], [ %inc, %for.body4 ]
  %arrayidx = getelementptr inbounds double, ptr %M, i64 %j.020
  %a0 = load double, ptr %arrayidx, align 8, !tbaa !5
  %arrayidx8 = getelementptr inbounds double, ptr %out, i64 %j.020
  store double %a0, ptr %arrayidx8, align 8, !tbaa !5
  %inc = add nuw nsw i64 %j.020, 1
  %cmp2 = icmp ult i64 %j.020, 31
  br i1 %cmp2, label %for.body4, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond.cleanup3
  ret void
}


define void @looperBadMerge(ptr nocapture %out) {
; CHECK-LABEL: @looperBadMerge(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[M:%.*]] = getelementptr double, ptr [[OUT:%.*]], i32 16
; CHECK-NEXT:    call void @llvm.memmove.p0.p0.i64(ptr align 8 [[OUT]], ptr align 8 [[M]], i64 256, i1 false), !tbaa [[TBAA4:![0-9]+]]
; CHECK-NEXT:    br label [[FOR_BODY4:%.*]]
; CHECK:       for.body4:
; CHECK-NEXT:    [[J_020:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY4]] ]
; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[M]], i64 [[J_020]]
; CHECK-NEXT:    [[A0:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA0]]
; CHECK-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[OUT]], i64 [[J_020]]
; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[J_020]], 1
; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i64 [[J_020]], 31
; CHECK-NEXT:    br i1 [[CMP2]], label [[FOR_BODY4]], label [[FOR_COND_CLEANUP:%.*]]
; CHECK:       for.cond.cleanup:
; CHECK-NEXT:    ret void
;
entry:
  %M = getelementptr double, ptr %out, i32 16
  br label %for.body4

for.body4:                                        ; preds = %for.cond1.preheader, %for.body4
  %j.020 = phi i64 [ 0, %entry ], [ %inc, %for.body4 ]
  %arrayidx = getelementptr inbounds double, ptr %M, i64 %j.020
  %a0 = load double, ptr %arrayidx, align 8, !tbaa !5
  %arrayidx8 = getelementptr inbounds double, ptr %out, i64 %j.020
  store double %a0, ptr %arrayidx8, align 8, !tbaa !3
  %inc = add nuw nsw i64 %j.020, 1
  %cmp2 = icmp ult i64 %j.020, 31
  br i1 %cmp2, label %for.body4, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond.cleanup3
  ret void
}

define void @looperGoodMerge(ptr nocapture %out) {
; CHECK-LABEL: @looperGoodMerge(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[M:%.*]] = getelementptr double, ptr [[OUT:%.*]], i32 16
; CHECK-NEXT:    call void @llvm.memmove.p0.p0.i64(ptr align 8 [[OUT]], ptr align 8 [[M]], i64 256, i1 false)
; CHECK-NEXT:    br label [[FOR_BODY4:%.*]]
; CHECK:       for.body4:
; CHECK-NEXT:    [[J_020:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY4]] ]
; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[M]], i64 [[J_020]]
; CHECK-NEXT:    [[A0:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA0]]
; CHECK-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[OUT]], i64 [[J_020]]
; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[J_020]], 1
; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i64 [[J_020]], 31
; CHECK-NEXT:    br i1 [[CMP2]], label [[FOR_BODY4]], label [[FOR_COND_CLEANUP:%.*]]
; CHECK:       for.cond.cleanup:
; CHECK-NEXT:    ret void
;
entry:
  %M = getelementptr double, ptr %out, i32 16
  br label %for.body4

for.body4:                                        ; preds = %for.cond1.preheader, %for.body4
  %j.020 = phi i64 [ 0, %entry ], [ %inc, %for.body4 ]
  %arrayidx = getelementptr inbounds double, ptr %M, i64 %j.020
  %a0 = load double, ptr %arrayidx, align 8, !tbaa !5
  %arrayidx8 = getelementptr inbounds double, ptr %out, i64 %j.020
  store double %a0, ptr %arrayidx8, align 8
  %inc = add nuw nsw i64 %j.020, 1
  %cmp2 = icmp ult i64 %j.020, 31
  br i1 %cmp2, label %for.body4, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond.cleanup3
  ret void
}


!3 = !{!4, !4, i64 0}
!4 = !{!"float", !7, i64 0}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
