summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/movsi-sm-1.c
blob: 35941405d9105c68facf94f908d7f4be18b88117 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* { dg-do run } */
/* { dg-options "-O2 -fgcse-sm -minline-all-stringops" } */

/* Store motion used to fail to recognize killed expressions within
   parallels such as those generated for memory copying.  */

static const char s[1024] __attribute__ ((__aligned__ (32)))
  = "This is what we should get!";

int bug (int arg) {
  char str[sizeof(s) > 4 ? sizeof(s) : 4] __attribute__ ((__aligned__ (32)));

  __builtin_memcpy (str, "Bug", 4);

  if (arg <= 2)
    __builtin_memcpy (str, s, sizeof (s));

  if (arg <= 1)
    __builtin_memcpy (str, "Err", 4);

  __builtin_puts (str);

  return str[0] != s[0];
}

int main () {
  if (bug (2))
    __builtin_abort ();

  return 0;
}