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