| /* { dg-do compile } */ |
| /* { dg-require-effective-target non_strict_align } */ |
| /* { dg-options "-O2 -fdump-tree-store-merging-details" } */ |
| |
| /* Make sure stores to volatile addresses don't get combined with |
| other accesses. */ |
| |
| struct bar |
| { |
| int a; |
| char b; |
| char c; |
| volatile short d; |
| char e; |
| char f; |
| char g; |
| }; |
| |
| void |
| foozero (struct bar *p) |
| { |
| p->b = 0xa; |
| p->a = 0xb; |
| p->c = 0xc; |
| p->d = 0; |
| p->e = 0xd; |
| p->f = 0xe; |
| p->g = 0xf; |
| } |
| |
| /* { dg-final { scan-tree-dump "Volatile access terminates all chains" "store-merging" } } */ |
| /* { dg-final { scan-tree-dump-times "=\{v\} 0;" 1 "store-merging" } } */ |