blob: e98434bab7f74186e1dc74007e9af8e1916d4cb6 [file] [edit]
; REQUIRES: asserts
; RUN: opt -p loop-vectorize -mtriple=arm64-apple-macosx -S -debug-only=loop-vectorize -disable-output %s 2>&1 | FileCheck %s
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
define i32 @scalar_steps_all_lanes(ptr %start, ptr %end) {
; CHECK-LABEL: LV: Checking a loop in 'scalar_steps_all_lanes'
; CHECK: Cost of 1 for VF 2: {{.*}} = SCALAR-STEPS {{.*}}, ir<1>, {{.*}}
; CHECK: Cost of 1 for VF 4: {{.*}} = SCALAR-STEPS {{.*}}, ir<1>, {{.*}}
entry:
br label %loop
loop:
%iv = phi ptr [ %start, %entry ], [ %iv.next, %loop ]
%rdx = phi i32 [ 0, %entry ], [ %rdx.next, %loop ]
%l = load i32, ptr %iv, align 1
%1 = and i32 %l, 1
%rdx.next = or i32 %rdx, %1
%iv.next = getelementptr i8, ptr %iv, i64 1
%ec = icmp ult ptr %iv, %end
br i1 %ec, label %loop, label %exit
exit:
ret i32 %rdx.next
}
define void @scalar_steps_first_lane_only(ptr %a, ptr %b, ptr %c) {
; CHECK-LABEL: LV: Checking a loop in 'scalar_steps_first_lane_only'
; CHECK: Cost of 0 for VF 2: {{.*}} = SCALAR-STEPS {{.*}}, ir<1>, {{.*}}
; CHECK: Cost of 0 for VF 4: {{.*}} = SCALAR-STEPS {{.*}}, ir<1>, {{.*}}
entry:
br label %loop
loop:
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
%gep1 = getelementptr inbounds i32, ptr %b, i64 %iv
%ld1 = load i32, ptr %gep1
%gep2 = getelementptr inbounds i32, ptr %c, i64 %iv
%ld2 = load i32, ptr %gep2
%add = add nsw i32 %ld2, %ld1
%gep3 = getelementptr inbounds i32, ptr %a, i64 %iv
store i32 %add, ptr %gep3
%iv.next = add i64 %iv, 1
%iv.trunc = trunc i64 %iv.next to i32
%exitcond = icmp eq i32 %iv.trunc, 128
br i1 %exitcond, label %exit, label %loop
exit:
ret void
}