| /* { dg-do compile } */ | |
| /* { dg-require-effective-target int32 } */ | |
| /* { dg-options "-O2 -fdump-tree-pre-details" } */ | |
| int f; | |
| int g; | |
| unsigned int | |
| foo (int b, int x) | |
| { | |
| if (b) | |
| x = *(int *)&f; | |
| g = x; | |
| return *(unsigned int*)&f; | |
| } | |
| float | |
| bar (int b, int x) | |
| { | |
| if (b) | |
| x = *(int *)&f; | |
| g = x; | |
| return *(float *)&f; | |
| } | |
| /* We should see the partial redundant loads of f even though they | |
| are using different types (of the same size). */ | |
| /* { dg-final { scan-tree-dump-times "Replaced MEM" 2 "pre" } } */ |