1 /* PR rtl-optimization/87600 */
2 /* { dg-do compile { target aarch64*-*-* arm*-*-* i?86-*-* powerpc*-*-* s390*-*-* x86_64-*-* } } */
3 /* { dg-options "-O2" } */
4
5 #include "pr87600.h"
6
7 /* The following are all valid uses of local register variables. */
8
9 long
10 test0 (long arg)
11 {
12 register long var asm (REG1);
13 asm ("blah %0 %1" : "+&r" (var) : "r" (arg));
14 return var;
15 }
16
17 long
18 test1 (long arg0, long arg1)
19 {
20 register long var asm (REG1);
21 asm ("blah %0, %1, %2" : "=&r" (var) : "r" (arg0), "0" (arg1));
22 return var + arg1;
23 }
24
25 long
26 test2 (void)
27 {
28 register long var1 asm (REG1);
29 register long var2 asm (REG1);
30 asm ("blah %0 %1" : "=&r" (var1) : "0" (var2));
31 return var1;
32 }
33
34 long
35 test3 (void)
36 {
37 register long var1 asm (REG1);
38 register long var2 asm (REG2);
39 long var3;
40 asm ("blah %0 %1" : "=&r" (var1), "=r" (var3) : "1" (var2));
41 return var1 + var3;
42 }
43
44 long
45 test4 (void)
46 {
47 register long var1 asm (REG1);
48 register long var2 asm (REG2);
49 register long var3 asm (REG2);
50 asm ("blah %0 %1" : "=&r" (var1), "=r" (var2) : "1" (var3));
51 return var1;
52 }