| /* PR tree-optimization/90271 */ |
| /* { dg-do run { target int32 } } */ |
| /* { dg-require-effective-target store_merge } */ |
| /* { dg-options "-O2 -fdump-tree-store-merging-details" } */ |
| /* { dg-final { scan-tree-dump "New sequence of 1 stores to replace old one of 2 stores" "store-merging" } } */ |
| |
| __attribute__((noipa)) void |
| foo (int *x) |
| { |
| asm volatile ("" : : "r" (x) : "memory"); |
| } |
| |
| __attribute__((noipa)) int |
| bar () |
| { |
| int x; |
| foo (&x); |
| x = 3; |
| ((char *) &x)[1] = 1; |
| foo (&x); |
| return x; |
| } |
| |
| int |
| main () |
| { |
| int x; |
| foo (&x); |
| x = 3; |
| foo (&x); |
| ((char *) &x)[1] = 1; |
| foo (&x); |
| if (x != bar ()) |
| __builtin_abort (); |
| return 0; |
| } |