1; RUN: opt -loop-vectorize -riscv-v-vector-bits-min=128 -scalable-vectorization=on -force-target-instruction-cost=1 -S < %s | FileCheck %s
2
3target triple = "riscv64"
4
5define void @trip5_i8(i8* noalias nocapture noundef %dst, i8* noalias nocapture noundef readonly %src) #0 {
6; CHECK-LABEL: @trip5_i8(
7; CHECK:       vector.body:
8; CHECK:         [[ACTIVE_LANE_MASK:%.*]] = icmp ule <vscale x 8 x i64> {{%.*}}, shufflevector (<vscale x 8 x i64> insertelement (<vscale x 8 x i64> poison, i64 4, i32 0), <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer)
9; CHECK:         {{%.*}} = call <vscale x 8 x i8> @llvm.masked.load.nxv8i8.p0nxv8i8(<vscale x 8 x i8>* {{%.*}}, i32 1, <vscale x 8 x i1> [[ACTIVE_LANE_MASK]], <vscale x 8 x i8> poison)
10; CHECK:         {{%.*}} = call <vscale x 8 x i8> @llvm.masked.load.nxv8i8.p0nxv8i8(<vscale x 8 x i8>* {{%.*}}, i32 1, <vscale x 8 x i1> [[ACTIVE_LANE_MASK]], <vscale x 8 x i8> poison)
11; CHECK:         call void @llvm.masked.store.nxv8i8.p0nxv8i8(<vscale x 8 x i8> {{%.*}}, <vscale x 8 x i8>* {{%.*}}, i32 1, <vscale x 8 x i1> [[ACTIVE_LANE_MASK]])
12;
13entry:
14  br label %for.body
15
16for.body:                                         ; preds = %entry, %for.body
17  %i.08 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
18  %arrayidx = getelementptr inbounds i8, i8* %src, i64 %i.08
19  %0 = load i8, i8* %arrayidx, align 1
20  %mul = shl i8 %0, 1
21  %arrayidx1 = getelementptr inbounds i8, i8* %dst, i64 %i.08
22  %1 = load i8, i8* %arrayidx1, align 1
23  %add = add i8 %mul, %1
24  store i8 %add, i8* %arrayidx1, align 1
25  %inc = add nuw nsw i64 %i.08, 1
26  %exitcond.not = icmp eq i64 %inc, 5
27  br i1 %exitcond.not, label %for.end, label %for.body
28
29for.end:                                          ; preds = %for.body
30  ret void
31}
32
33attributes #0 = { "target-features"="+v,+d" }
34