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