| /* PR tree-optimization/92860. */ |
| /* Testcase derived from 20111227-1.c to ensure that REE is combining |
| redundant zero extends with zero extend to wider mode. */ |
| /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ |
| /* { dg-options "-fdump-rtl-ree" } */ |
| |
| extern void abort (void); |
| |
| unsigned short s; |
| unsigned int i; |
| unsigned long l; |
| unsigned char v = -1; |
| |
| void |
| __attribute__ ((optimize("-O2"))) |
| baz() |
| { |
| } |
| |
| void __attribute__((noinline,noclone)) |
| bar (int t) |
| { |
| if (t == 2 && s != 0xff) |
| abort (); |
| if (t == 1 && i != 0xff) |
| abort (); |
| if (t == 0 && l != 0xff) |
| abort (); |
| } |
| |
| void __attribute__((noinline,noclone)) |
| foo (unsigned char *a, int t) |
| { |
| unsigned char r = v; |
| |
| if (t == 2) |
| s = (unsigned short) r; |
| else if (t == 1) |
| i = (unsigned int) r; |
| else if (t == 0) |
| l = (unsigned long) r; |
| bar (t); |
| } |
| |
| int main(void) |
| { |
| foo (&v, 0); |
| foo (&v, 1); |
| foo (&v, 2); |
| return 0; |
| } |
| |
| /* { dg-final { scan-rtl-dump-not "Elimination opportunities" "ree" } } */ |