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