95 lines · plain
1; REQUIRES: asserts2; RUN: opt < %s -passes='loop-vectorize' -debug-only=loop-vectorize --disable-output -S 2>&1 | FileCheck %s3 4target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"5 6; CHECK: LV: Checking a loop in 'f1'7; CHECK: LV: Loop hints: force=? width=0 interleave=18define dso_local void @f1(i32 signext %n, ptr %A) {9entry:10 %cmp1 = icmp sgt i32 %n, 011 br i1 %cmp1, label %for.body.preheader, label %for.end12 13for.body.preheader: ; preds = %entry14 %wide.trip.count = zext i32 %n to i6415 br label %for.body16 17for.body: ; preds = %for.body.preheader, %for.body18 %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]19 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %indvars.iv20 %0 = trunc i64 %indvars.iv to i3221 store i32 %0, ptr %arrayidx, align 422 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 123 %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count24 br i1 %exitcond, label %for.body, label %for.end.loopexit, !llvm.loop !125 26for.end.loopexit: ; preds = %for.body27 br label %for.end28 29for.end: ; preds = %for.end.loopexit, %entry30 ret void31}32 33; CHECK: LV: Checking a loop in 'f2'34; CHECK: LV: Loop hints: force=? width=0 interleave=435define dso_local void @f2(i32 signext %n, ptr %A) {36entry:37 %cmp1 = icmp sgt i32 %n, 038 br i1 %cmp1, label %for.body.preheader, label %for.end39 40for.body.preheader: ; preds = %entry41 %wide.trip.count = zext i32 %n to i6442 br label %for.body43 44for.body: ; preds = %for.body.preheader, %for.body45 %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]46 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %indvars.iv47 %0 = trunc i64 %indvars.iv to i3248 store i32 %0, ptr %arrayidx, align 449 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 150 %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count51 br i1 %exitcond, label %for.body, label %for.end.loopexit, !llvm.loop !352 53for.end.loopexit: ; preds = %for.body54 br label %for.end55 56for.end: ; preds = %for.end.loopexit, %entry57 ret void58}59 60; CHECK: LV: Checking a loop in 'f3'61; CHECK: LV: Loop hints: force=? width=0 interleave=162define dso_local void @f3(i32 signext %n, ptr %A) {63entry:64 %cmp1 = icmp sgt i32 %n, 065 br i1 %cmp1, label %for.body.preheader, label %for.end66 67for.body.preheader: ; preds = %entry68 %wide.trip.count = zext i32 %n to i6469 br label %for.body70 71for.body: ; preds = %for.body.preheader, %for.body72 %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]73 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %indvars.iv74 %0 = trunc i64 %indvars.iv to i3275 store i32 %0, ptr %arrayidx, align 476 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 177 %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count78 br i1 %exitcond, label %for.body, label %for.end.loopexit, !llvm.loop !679 80for.end.loopexit: ; preds = %for.body81 br label %for.end82 83for.end: ; preds = %for.end.loopexit, %entry84 ret void85}86 87!1 = distinct !{!1, !2}88!2 = !{!"llvm.loop.unroll.disable"}89!3 = distinct !{!3, !4, !5}90!4 = !{!"llvm.loop.unroll.disable"}91!5 = !{!"llvm.loop.interleave.count", i32 4}92!6 = distinct !{!6, !7, !8}93!7 = !{!"llvm.loop.mustprogress"}94!8 = !{!"llvm.loop.unroll.count", i32 1}95