1/* PR optimization/10955 */ 2/* Originator: <heinrich.brand@fujitsu-siemens.com> */ 3 4/* This used to fail on SPARC32 at -O3 because the loop unroller 5 wrongly thought it could eliminate a pseudo in a loop, while 6 the pseudo was used outside the loop. */ 7 8extern void abort(void); 9 10#define COMPLEX struct CS 11 12COMPLEX { 13 long x; 14 long y; 15}; 16 17 18static COMPLEX CCID (COMPLEX x) 19{ 20 COMPLEX a; 21 22 a.x = x.x; 23 a.y = x.y; 24 25 return a; 26} 27 28 29static COMPLEX CPOW (COMPLEX x, int y) 30{ 31 COMPLEX a; 32 a = x; 33 34 while (--y > 0) 35 a=CCID(a); 36 37 return a; 38} 39 40 41static int c5p (COMPLEX x) 42{ 43 COMPLEX a,b; 44 a = CPOW (x, 2); 45 b = CCID( CPOW(a,2) ); 46 47 return (b.x == b.y); 48} 49 50 51int main (void) 52{ 53 COMPLEX x; 54 55 x.x = -7; 56 x.y = -7; 57 58 if (!c5p(x)) 59 abort(); 60 61 return 0; 62} 63