1 /* { dg-do compile } */
2 /* { dg-options "-O -fshrink-wrap -fstack-clash-protection -g" } */
3 /* { dg-final { check-function-bodies "**" "" } } */
4 
5 #pragma GCC aarch64 "arm_sve.h"
6 
7 /*
8 ** test_1:
9 **	str	x24, \[sp, -32\]!
10 **	cntb	x13
11 **	mov	x11, sp
12 **	...
13 **	sub	sp, sp, x13
14 **	str	p4, \[sp\]
15 **	cbz	w0, [^\n]*
16 **	...
17 **	ptrue	p0\.b, all
18 **	ldr	p4, \[sp\]
19 **	addvl	sp, sp, #1
20 **	ldr	x24, \[sp\], 32
21 **	ret
22 */
23 svbool_t
test_1(int n)24 test_1 (int n)
25 {
26   asm volatile ("" ::: "x24");
27   if (n)
28     {
29       volatile int x = 1;
30       asm volatile ("" ::: "p4");
31     }
32   return svptrue_b8 ();
33 }
34 
35 /*
36 ** test_2:
37 **	str	x24, \[sp, -32\]!
38 **	cntb	x13
39 **	mov	x11, sp
40 **	...
41 **	sub	sp, sp, x13
42 **	str	p4, \[sp\]
43 **	cbz	w0, [^\n]*
44 **	str	p5, \[sp, #1, mul vl\]
45 **	str	p6, \[sp, #2, mul vl\]
46 **	...
47 **	ptrue	p0\.b, all
48 **	ldr	p4, \[sp\]
49 **	addvl	sp, sp, #1
50 **	ldr	x24, \[sp\], 32
51 **	ret
52 */
53 svbool_t
test_2(int n)54 test_2 (int n)
55 {
56   asm volatile ("" ::: "x24");
57   if (n)
58     {
59       volatile int x = 1;
60       asm volatile ("" ::: "p4", "p5", "p6");
61     }
62   return svptrue_b8 ();
63 }
64