xref: /llvm-project/llvm/test/Analysis/LoopAccessAnalysis/scalable-vector-regression-tests.ll (revision 0f111ba790a28056d42a0ae376371d7b694454ae)
1543f1aa6SRoman Lebedev; RUN: opt -passes=loop-load-elim -mtriple=aarch64 -mattr=+sve -S -debug < %s 2>&1 | FileCheck %s
2787b66ebSPeter Waller; REQUIRES: asserts
3787b66ebSPeter Waller
4787b66ebSPeter Waller; Regression tests verifying "assumption that TypeSize is not scalable" and
5787b66ebSPeter Waller; "Invalid size request on a scalable vector." are not produced by
6543f1aa6SRoman Lebedev; -load-loop-elim (this would cause the test to fail because opt would exit with
7787b66ebSPeter Waller; a non-zero exit status).
8787b66ebSPeter Waller
9787b66ebSPeter Waller; No output checked for this one, but causes a fatal error if the regression is present.
10787b66ebSPeter Waller
1105dc149cSNikita Popovdefine void @regression_test_get_gep_induction_operand_typesize_warning(i64 %n, ptr %a) {
12787b66ebSPeter Wallerentry:
13787b66ebSPeter Waller  br label %loop.body
14787b66ebSPeter Waller
15787b66ebSPeter Wallerloop.body:
16787b66ebSPeter Waller  %0 = phi i64 [ 0, %entry ], [ %1, %loop.body ]
1705dc149cSNikita Popov  %idx = getelementptr <vscale x 4 x i32>, ptr %a, i64 %0
1805dc149cSNikita Popov  store <vscale x 4 x i32> zeroinitializer, ptr %idx
19787b66ebSPeter Waller  %1 = add i64 %0, 1
20787b66ebSPeter Waller  %2 = icmp eq i64 %1, %n
21787b66ebSPeter Waller  br i1 %2, label %loop.end, label %loop.body
22787b66ebSPeter Waller
23787b66ebSPeter Wallerloop.end:
24787b66ebSPeter Waller  ret void
25787b66ebSPeter Waller}
26787b66ebSPeter Waller
27*0f111ba7SRamkumar Ramachandra; CHECK-LABEL: 'regression_test_loop_access_scalable_typesize'
28*0f111ba7SRamkumar Ramachandra; CHECK: LAA: Found an analyzable loop: vector.body
29787b66ebSPeter Waller; CHECK: LAA: Bad stride - Scalable object:
3005dc149cSNikita Popovdefine void @regression_test_loop_access_scalable_typesize(ptr %input_ptr) {
31787b66ebSPeter Wallerentry:
32787b66ebSPeter Waller  br label %vector.body
33787b66ebSPeter Wallervector.body:
3405dc149cSNikita Popov  %ind_ptr = phi ptr [ %next_ptr, %vector.body ], [ %input_ptr, %entry ]
35787b66ebSPeter Waller  %ind = phi i64 [ %next, %vector.body ], [ 0, %entry ]
3605dc149cSNikita Popov  %ld = load <vscale x 16 x i8>, ptr %ind_ptr, align 16
3705dc149cSNikita Popov  store <vscale x 16 x i8> zeroinitializer, ptr %ind_ptr, align 16
3805dc149cSNikita Popov  %next_ptr = getelementptr inbounds <vscale x 16 x i8>, ptr %ind_ptr, i64 1
39787b66ebSPeter Waller  %next = add i64 %ind, 1
40787b66ebSPeter Waller  %cond = icmp ult i64 %next, 1024
41787b66ebSPeter Waller  br i1 %cond, label %end, label %vector.body
42787b66ebSPeter Wallerend:
43787b66ebSPeter Waller  ret void
44787b66ebSPeter Waller}
45787b66ebSPeter Waller
46*0f111ba7SRamkumar Ramachandra; CHECK-LABEL: 'regression_test_loop_access_scalable_typesize_nonscalable_object'
47*0f111ba7SRamkumar Ramachandra; CHECK: LAA: Found an analyzable loop: vector.body
48787b66ebSPeter Waller; CHECK: LAA: Bad stride - Scalable object:
4905dc149cSNikita Popovdefine void @regression_test_loop_access_scalable_typesize_nonscalable_object(ptr %input_ptr) {
50787b66ebSPeter Wallerentry:
51787b66ebSPeter Waller  br label %vector.body
52787b66ebSPeter Wallervector.body:
5305dc149cSNikita Popov  %ind_ptr = phi ptr [ %next_ptr, %vector.body ], [ %input_ptr, %entry ]
54787b66ebSPeter Waller  %ind = phi i64 [ %next, %vector.body ], [ 0, %entry ]
5505dc149cSNikita Popov  %ld = load <vscale x 16 x i8>, ptr %ind_ptr, align 16
5605dc149cSNikita Popov  store <vscale x 16 x i8> zeroinitializer, ptr %ind_ptr, align 16
5705dc149cSNikita Popov  %next_ptr = getelementptr inbounds i8, ptr %ind_ptr, i64 1
58787b66ebSPeter Waller  %next = add i64 %ind, 1
59787b66ebSPeter Waller  %cond = icmp ult i64 %next, 1024
60787b66ebSPeter Waller  br i1 %cond, label %end, label %vector.body
61787b66ebSPeter Wallerend:
62787b66ebSPeter Waller  ret void
63787b66ebSPeter Waller}
64