69 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -mtriple=riscv64 -mattr=+zve32x -passes=loop-vectorize < %s | FileCheck %s3 4define void @small_trip_count_min_vlen_128(ptr nocapture %a) nounwind vscale_range(4,1024) {5; CHECK-LABEL: @small_trip_count_min_vlen_128(6; CHECK-NEXT: entry:7; CHECK-NEXT: br label [[LOOP1:%.*]]8; CHECK: loop:9; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[IV_NEXT:%.*]], [[LOOP1]] ], [ 0, [[ENTRY:%.*]] ]10; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[TMP1:%.*]], i32 [[IV]]11; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[GEP]], align 412; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[V]], 113; CHECK-NEXT: store i32 [[ADD]], ptr [[GEP]], align 414; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 115; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[IV]], 316; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP1]]17; CHECK: exit:18; CHECK-NEXT: ret void19;20entry:21 br label %loop22 23loop:24 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]25 %gep = getelementptr inbounds i32, ptr %a, i32 %iv26 %v = load i32, ptr %gep, align 427 %add = add nsw i32 %v, 128 store i32 %add, ptr %gep, align 429 %iv.next = add i32 %iv, 130 %cond = icmp eq i32 %iv, 331 br i1 %cond, label %exit, label %loop32 33exit:34 ret void35}36 37define void @small_trip_count_min_vlen_32(ptr nocapture %a) nounwind vscale_range(1,1024) {38; CHECK-LABEL: @small_trip_count_min_vlen_32(39; CHECK-NEXT: entry:40; CHECK-NEXT: br label [[LOOP1:%.*]]41; CHECK: loop:42; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[IV_NEXT:%.*]], [[LOOP1]] ], [ 0, [[ENTRY:%.*]] ]43; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[TMP1:%.*]], i32 [[IV]]44; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[GEP]], align 445; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[V]], 146; CHECK-NEXT: store i32 [[ADD]], ptr [[GEP]], align 447; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 148; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[IV]], 349; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP1]]50; CHECK: exit:51; CHECK-NEXT: ret void52;53entry:54 br label %loop55 56loop:57 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]58 %gep = getelementptr inbounds i32, ptr %a, i32 %iv59 %v = load i32, ptr %gep, align 460 %add = add nsw i32 %v, 161 store i32 %add, ptr %gep, align 462 %iv.next = add i32 %iv, 163 %cond = icmp eq i32 %iv, 364 br i1 %cond, label %exit, label %loop65 66exit:67 ret void68}69