1*b1ff20fdSSander de Smalen; RUN: opt < %s  -loop-vectorize -force-vector-interleave=1 -force-target-supports-scalable-vectors=true -dce -instcombine -S | FileCheck %s
2cee313d2SEric Christopher
3cee313d2SEric Christophertarget 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-n8:16:32:64-S128"
4cee313d2SEric Christopher
5cee313d2SEric Christopher; CHECK-LABEL: @test1(
6cee313d2SEric Christopher; CHECK: store <8 x i32>
7cee313d2SEric Christopher; CHECK: ret void
8cee313d2SEric Christopherdefine void @test1(i32* nocapture %a, i32 %n) #0 {
9cee313d2SEric Christopherentry:
10cee313d2SEric Christopher  %cmp4 = icmp sgt i32 %n, 0
11cee313d2SEric Christopher  br i1 %cmp4, label %for.body, label %for.end
12cee313d2SEric Christopher
13cee313d2SEric Christopherfor.body:                                         ; preds = %entry, %for.body
14cee313d2SEric Christopher  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
15cee313d2SEric Christopher  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
16d568cff6SSander de Smalen  store i32 42, i32* %arrayidx, align 4
17cee313d2SEric Christopher  %indvars.iv.next = add i64 %indvars.iv, 1
18cee313d2SEric Christopher  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
19cee313d2SEric Christopher  %exitcond = icmp eq i32 %lftr.wideiv, %n
20cee313d2SEric Christopher  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !0
21cee313d2SEric Christopher
22cee313d2SEric Christopherfor.end:                                          ; preds = %for.body, %entry
23cee313d2SEric Christopher  ret void
24cee313d2SEric Christopher}
25cee313d2SEric Christopher
2671bd59f0SDavid Sherwood; CHECK-LABEL: @test2(
27d568cff6SSander de Smalen; CHECK: store <vscale x 8 x i32>
2871bd59f0SDavid Sherwood; CHECK: ret void
2971bd59f0SDavid Sherwooddefine void @test2(i32* nocapture %a, i32 %n) #0 {
3071bd59f0SDavid Sherwoodentry:
3171bd59f0SDavid Sherwood  %cmp4 = icmp sgt i32 %n, 0
3271bd59f0SDavid Sherwood  br i1 %cmp4, label %for.body, label %for.end
3371bd59f0SDavid Sherwood
3471bd59f0SDavid Sherwoodfor.body:                                         ; preds = %entry, %for.body
3571bd59f0SDavid Sherwood  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
3671bd59f0SDavid Sherwood  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
37d568cff6SSander de Smalen  store i32 42, i32* %arrayidx, align 4
3871bd59f0SDavid Sherwood  %indvars.iv.next = add i64 %indvars.iv, 1
3971bd59f0SDavid Sherwood  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
4071bd59f0SDavid Sherwood  %exitcond = icmp eq i32 %lftr.wideiv, %n
4171bd59f0SDavid Sherwood  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !2
4271bd59f0SDavid Sherwood
4371bd59f0SDavid Sherwoodfor.end:                                          ; preds = %for.body, %entry
4471bd59f0SDavid Sherwood  ret void
4571bd59f0SDavid Sherwood}
4671bd59f0SDavid Sherwood
4771bd59f0SDavid Sherwood; CHECK-LABEL: @test3(
4871bd59f0SDavid Sherwood; CHECK: store <8 x i32>
4971bd59f0SDavid Sherwood; CHECK: ret void
5071bd59f0SDavid Sherwooddefine void @test3(i32* nocapture %a, i32 %n) #0 {
5171bd59f0SDavid Sherwoodentry:
5271bd59f0SDavid Sherwood  %cmp4 = icmp sgt i32 %n, 0
5371bd59f0SDavid Sherwood  br i1 %cmp4, label %for.body, label %for.end
5471bd59f0SDavid Sherwood
5571bd59f0SDavid Sherwoodfor.body:                                         ; preds = %entry, %for.body
5671bd59f0SDavid Sherwood  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
5771bd59f0SDavid Sherwood  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
58d568cff6SSander de Smalen  store i32 42, i32* %arrayidx, align 4
5971bd59f0SDavid Sherwood  %indvars.iv.next = add i64 %indvars.iv, 1
6071bd59f0SDavid Sherwood  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
6171bd59f0SDavid Sherwood  %exitcond = icmp eq i32 %lftr.wideiv, %n
6271bd59f0SDavid Sherwood  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !4
6371bd59f0SDavid Sherwood
6471bd59f0SDavid Sherwoodfor.end:                                          ; preds = %for.body, %entry
6571bd59f0SDavid Sherwood  ret void
6671bd59f0SDavid Sherwood}
6771bd59f0SDavid Sherwood
684f86aa65SSander de Smalen; Test that when only the width property is specified, and not the scalable.enable flag,
694f86aa65SSander de Smalen; that the hint defaults to 'scalable.enable = false'.
704f86aa65SSander de Smalen
714f86aa65SSander de Smalen; CHECK-LABEL: @test4(
724f86aa65SSander de Smalen; CHECK: store <8 x i32>
734f86aa65SSander de Smalen; CHECK: ret void
744f86aa65SSander de Smalendefine void @test4(i32* nocapture %a, i32 %n) #0 {
754f86aa65SSander de Smalenentry:
764f86aa65SSander de Smalen  %cmp4 = icmp sgt i32 %n, 0
774f86aa65SSander de Smalen  br i1 %cmp4, label %for.body, label %for.end
784f86aa65SSander de Smalen
794f86aa65SSander de Smalenfor.body:                                         ; preds = %entry, %for.body
804f86aa65SSander de Smalen  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
814f86aa65SSander de Smalen  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
824f86aa65SSander de Smalen  store i32 42, i32* %arrayidx, align 4
834f86aa65SSander de Smalen  %indvars.iv.next = add i64 %indvars.iv, 1
844f86aa65SSander de Smalen  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
854f86aa65SSander de Smalen  %exitcond = icmp eq i32 %lftr.wideiv, %n
864f86aa65SSander de Smalen  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !6
874f86aa65SSander de Smalen
884f86aa65SSander de Smalenfor.end:                                          ; preds = %for.body, %entry
894f86aa65SSander de Smalen  ret void
904f86aa65SSander de Smalen}
914f86aa65SSander de Smalen
924ab3041aSserge-sans-pailleattributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
93cee313d2SEric Christopher
944f86aa65SSander de Smalen!0 = !{!0, !1, !5}
95cee313d2SEric Christopher!1 = !{!"llvm.loop.vectorize.width", i32 8}
9671bd59f0SDavid Sherwood!2 = !{!2, !1, !3}
9771bd59f0SDavid Sherwood!3 = !{!"llvm.loop.vectorize.scalable.enable", i32 1}
9871bd59f0SDavid Sherwood!4 = !{!4, !1, !5}
9971bd59f0SDavid Sherwood!5 = !{!"llvm.loop.vectorize.scalable.enable", i32 0}
1004f86aa65SSander de Smalen!6 = !{!6, !7}
1014f86aa65SSander de Smalen!7 = !{!"llvm.loop.vectorize.width", i32 8}
102