1 /* Testcase derived from 20111227-1.c to ensure that REE is combining 2 redundant sign extends with sign extend to wider mode. */ 3 /* { dg-options "-fdump-rtl-ree -O" } */ 4 5 extern void abort (void); 6 7 signed short s; 8 signed int i; 9 signed long l; 10 signed char v = -1; 11 12 void __attribute__((noinline,noclone)) bar(int t)13bar (int t) 14 { 15 if (t == 2 && s != -1) 16 abort (); 17 if (t == 1 && i != -1) 18 abort (); 19 if (t == 0 && l != -1) 20 abort (); 21 } 22 23 void __attribute__((noinline,noclone)) foo(signed char * a,int t)24foo (signed char *a, int t) 25 { 26 signed char r = v; 27 28 if (t == 2) 29 s = (signed short) r; 30 else if (t == 1) 31 i = (signed int) r; 32 else if (t == 0) 33 l = (signed long) r; 34 bar (t); 35 } 36 main(void)37int main(void) 38 { 39 foo (&v, 0); 40 foo (&v, 1); 41 foo (&v, 2); 42 return 0; 43 } 44 /* { dg-final { scan-rtl-dump "Elimination opportunities = 3 realized = 3" "ree" } } */ 45 /* { dg-final { cleanup-rtl-dump "ree" } } */ 46