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