| /* PR27363. CSE was breaking on the arm store multiple insn used for |
| structure copies. */ |
| /* { dg-do run } */ |
| /* { dg-options "-Os" } */ |
| extern void abort (void); |
| |
| struct snd_mask { |
| unsigned int bits[6]; |
| }; |
| |
| static int __attribute__((noinline)) |
| snd_mask_refine(struct snd_mask *mask) |
| { |
| struct snd_mask old; |
| |
| old = *mask; |
| if (mask->bits[0]==0 && mask->bits[1]==0) |
| return 1; |
| |
| return old.bits[0] != mask->bits[0]; |
| } |
| |
| int main(int argc, char *argv[]) |
| { |
| struct snd_mask mask; |
| |
| |
| mask.bits[0] = 23; |
| mask.bits[1] = 42; |
| mask.bits[2] = 0; |
| mask.bits[3] = 0; |
| mask.bits[4] = 0; |
| mask.bits[5] = 0; |
| |
| |
| if (snd_mask_refine(&mask)) |
| abort(); |
| return 0; |
| } |