| /* PR 17739 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-optimized" } */ |
| /* LLVM LOCAL test not applicable */ |
| /* { dg-require-fdump "" } */ |
| |
| #ifdef __hppa__ |
| #define REGISTER "1" |
| #else |
| #define REGISTER "0" |
| #endif |
| |
| static inline int source(void) |
| { |
| register int hardreg __asm__(REGISTER); |
| asm("" : "=r"(hardreg)); |
| return hardreg; |
| } |
| |
| void test(void) |
| { |
| int t = source(); |
| foo(t); |
| bar(t); |
| } |
| |
| /* Hardreg should appear exactly 3 times -- declaration, asm stmt, |
| and copy out. */ |
| /* { dg-final { scan-tree-dump-times "hardreg" 3 "optimized" } } */ |
| |
| /* In particular, hardreg should *not* appear in the call to bar. */ |
| /* { dg-final { scan-tree-dump-times "bar \[(\]t\[)\]" 1 "optimized" } } */ |
| |
| /* { dg-final { cleanup-tree-dump "optimized" } } */ |