Viewing file: pr43491.c (1.05 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-optimized" } */
#define REGISTER register
#if defined __arm__ # define REG1 asm("r4") #elif defined __i386__ # define REG1 asm("ebx") #elif defined __mips__ # define REG1 asm("s0") #elif defined __x86_64__ # define REG1 asm("rbp") #else # undef REGISTER # define REGISTER # define REG1 #endif
REGISTER long data_0 REG1; long data_3;
long foo(long data, long v) { long i; long t, u;
if (data) i = data_0 + data_3; else { v = 2; i = 5; } t = data_0 + data_3; u = i; return v * t * u; }
/* We should not eliminate global register variable when it is the RHS of a single assignment. So the number of loads from data_0 has to match that of the number of adds (we hoist data_0 + data_3 above the if (data) and eliminate the useless copy). */
/* { dg-final { scan-tree-dump-times "= data_0;" 1 "optimized" { target { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } */ /* { dg-final { scan-tree-dump-times " \\+ " 1 "optimized" { target { ! { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } } */
|