|  | 
|  | 1 | +; REQUIRES: asserts | 
|  | 2 | +; RUN: opt -S -passes=loop-vectorize -debug-only=loop-vectorize < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,NOVEC | 
|  | 3 | +; RUN: opt -S -passes=loop-vectorize -debug-only=loop-vectorize -enable-scalable-autovec-in-streaming-mode < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,VEC | 
|  | 4 | + | 
|  | 5 | +target triple = "aarch64-unknown-linux-gnu" | 
|  | 6 | + | 
|  | 7 | +define void @normal_function(ptr %a, ptr %b, ptr %c) #0 { | 
|  | 8 | +; CHECK: LV: Checking a loop in 'normal_function' | 
|  | 9 | +; CHECK: LV: Scalable vectorization is available | 
|  | 10 | +entry: | 
|  | 11 | +  br label %loop | 
|  | 12 | + | 
|  | 13 | +loop: | 
|  | 14 | +  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] | 
|  | 15 | +  %arrayidx = getelementptr inbounds i32, ptr %c, i64 %iv | 
|  | 16 | +  %0 = load i32, ptr %arrayidx, align 4 | 
|  | 17 | +  %arrayidx2 = getelementptr inbounds i8, ptr %b, i64 %iv | 
|  | 18 | +  %1 = load i8, ptr %arrayidx2, align 4 | 
|  | 19 | +  %zext = zext i8 %1 to i32 | 
|  | 20 | +  %add = add nsw i32 %zext, %0 | 
|  | 21 | +  %arrayidx5 = getelementptr inbounds i32, ptr %a, i64 %iv | 
|  | 22 | +  store i32 %add, ptr %arrayidx5, align 4 | 
|  | 23 | +  %iv.next = add nuw nsw i64 %iv, 1 | 
|  | 24 | +  %exitcond.not = icmp eq i64 %iv.next, 1024 | 
|  | 25 | +  br i1 %exitcond.not, label %exit, label %loop | 
|  | 26 | + | 
|  | 27 | +exit: | 
|  | 28 | +  ret void | 
|  | 29 | +} | 
|  | 30 | + | 
|  | 31 | +define void @streaming_function(ptr %a, ptr %b, ptr %c) #0 "aarch64_pstate_sm_enabled" { | 
|  | 32 | +; CHECK: LV: Checking a loop in 'streaming_function' | 
|  | 33 | +; VEC: LV: Scalable vectorization is available | 
|  | 34 | +; NOVEC: LV: Scalable vectorization is explicitly disabled | 
|  | 35 | +entry: | 
|  | 36 | +  br label %loop | 
|  | 37 | + | 
|  | 38 | +loop: | 
|  | 39 | +  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] | 
|  | 40 | +  %arrayidx = getelementptr inbounds i32, ptr %c, i64 %iv | 
|  | 41 | +  %0 = load i32, ptr %arrayidx, align 4 | 
|  | 42 | +  %arrayidx2 = getelementptr inbounds i8, ptr %b, i64 %iv | 
|  | 43 | +  %1 = load i8, ptr %arrayidx2, align 4 | 
|  | 44 | +  %zext = zext i8 %1 to i32 | 
|  | 45 | +  %add = add nsw i32 %zext, %0 | 
|  | 46 | +  %arrayidx5 = getelementptr inbounds i32, ptr %a, i64 %iv | 
|  | 47 | +  store i32 %add, ptr %arrayidx5, align 4 | 
|  | 48 | +  %iv.next = add nuw nsw i64 %iv, 1 | 
|  | 49 | +  %exitcond.not = icmp eq i64 %iv.next, 1024 | 
|  | 50 | +  br i1 %exitcond.not, label %exit, label %loop | 
|  | 51 | + | 
|  | 52 | +exit: | 
|  | 53 | +  ret void | 
|  | 54 | +} | 
|  | 55 | + | 
|  | 56 | +attributes #0 = { vscale_range(1, 16) "target-features"="+sve,+sme" } | 
0 commit comments