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 invalid uses of local register variables. */
8
9 long
test0(void)10 test0 (void)
11 {
12 register long var1 asm (REG1);
13 register long var2 asm (REG1);
14 asm ("blah %0 %1" : "=r" (var1), "=r" (var2)); /* { dg-error "invalid hard register usage between output operands" } */
15 return var1;
16 }
17
18 long
test1(void)19 test1 (void)
20 {
21 register long var1 asm (REG1);
22 register long var2 asm (REG2);
23 asm ("blah %0 %1" : "=r" (var1) : "0" (var2)); /* { dg-error "invalid hard register usage between output operand and matching constraint operand" } */
24 return var1;
25 }
26
27 long
test2(void)28 test2 (void)
29 {
30 register long var1 asm (REG1);
31 register long var2 asm (REG1);
32 asm ("blah %0 %1" : "=&r" (var1) : "r" (var2)); /* { dg-error "invalid hard register usage between earlyclobber operand and input operand" } */
33 return var1;
34 }
35
36 long
test3(void)37 test3 (void)
38 {
39 register long var1 asm (REG1);
40 register long var2 asm (REG1);
41 long var3;
42 asm ("blah %0 %1" : "=&r" (var1), "=r" (var3) : "1" (var2)); /* { dg-error "invalid hard register usage between earlyclobber operand and input operand" } */
43 return var1 + var3;
44 }
45