llvm-project/llvm/test/Analysis/LoopAccessAnalysis/scalable-vector-regression-tests.ll
Ramkumar Ramachandra 0f111ba790
LoopInfo: introduce Loop::getLocStr; unify debug output (#93051)
Introduce a Loop::getLocStr stolen from LoopVectorize's static function
getDebugLocString in order to have uniform debug output headers across
LoopVectorize, LoopAccessAnalysis, and LoopDistribute. The motivation
for this change is to have UpdateTestChecks recognize the headers and
automatically generate CHECK lines for debug output, with minimal
special-casing.
2024-06-25 13:12:15 +01:00

64 lines
2.3 KiB
LLVM

; RUN: opt -passes=loop-load-elim -mtriple=aarch64 -mattr=+sve -S -debug < %s 2>&1 | FileCheck %s
; REQUIRES: asserts
; Regression tests verifying "assumption that TypeSize is not scalable" and
; "Invalid size request on a scalable vector." are not produced by
; -load-loop-elim (this would cause the test to fail because opt would exit with
; a non-zero exit status).
; No output checked for this one, but causes a fatal error if the regression is present.
define void @regression_test_get_gep_induction_operand_typesize_warning(i64 %n, ptr %a) {
entry:
br label %loop.body
loop.body:
%0 = phi i64 [ 0, %entry ], [ %1, %loop.body ]
%idx = getelementptr <vscale x 4 x i32>, ptr %a, i64 %0
store <vscale x 4 x i32> zeroinitializer, ptr %idx
%1 = add i64 %0, 1
%2 = icmp eq i64 %1, %n
br i1 %2, label %loop.end, label %loop.body
loop.end:
ret void
}
; CHECK-LABEL: 'regression_test_loop_access_scalable_typesize'
; CHECK: LAA: Found an analyzable loop: vector.body
; CHECK: LAA: Bad stride - Scalable object:
define void @regression_test_loop_access_scalable_typesize(ptr %input_ptr) {
entry:
br label %vector.body
vector.body:
%ind_ptr = phi ptr [ %next_ptr, %vector.body ], [ %input_ptr, %entry ]
%ind = phi i64 [ %next, %vector.body ], [ 0, %entry ]
%ld = load <vscale x 16 x i8>, ptr %ind_ptr, align 16
store <vscale x 16 x i8> zeroinitializer, ptr %ind_ptr, align 16
%next_ptr = getelementptr inbounds <vscale x 16 x i8>, ptr %ind_ptr, i64 1
%next = add i64 %ind, 1
%cond = icmp ult i64 %next, 1024
br i1 %cond, label %end, label %vector.body
end:
ret void
}
; CHECK-LABEL: 'regression_test_loop_access_scalable_typesize_nonscalable_object'
; CHECK: LAA: Found an analyzable loop: vector.body
; CHECK: LAA: Bad stride - Scalable object:
define void @regression_test_loop_access_scalable_typesize_nonscalable_object(ptr %input_ptr) {
entry:
br label %vector.body
vector.body:
%ind_ptr = phi ptr [ %next_ptr, %vector.body ], [ %input_ptr, %entry ]
%ind = phi i64 [ %next, %vector.body ], [ 0, %entry ]
%ld = load <vscale x 16 x i8>, ptr %ind_ptr, align 16
store <vscale x 16 x i8> zeroinitializer, ptr %ind_ptr, align 16
%next_ptr = getelementptr inbounds i8, ptr %ind_ptr, i64 1
%next = add i64 %ind, 1
%cond = icmp ult i64 %next, 1024
br i1 %cond, label %end, label %vector.body
end:
ret void
}