PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.target / arm / memset-inline-5.c
blob6e7ae65eef47cde841fae0f9ee7d82372b8960c0
1 /* { dg-do run } */
2 /* { dg-skip-if "Don't inline memset using neon instructions" { ! arm_tune_string_ops_prefer_neon } } */
3 /* { dg-options "-save-temps -O2 -fno-inline" } */
4 /* { dg-add-options "arm_neon" } */
6 #include <string.h>
7 #include <stdlib.h>
9 #define LEN (100)
10 int a[LEN];
11 int b[LEN];
12 int c[LEN];
13 int d[LEN];
14 void
15 foo1 (void)
17 memset (a, -1, 16);
18 return;
21 void
22 foo2 (void)
24 memset (b, 1, 25);
25 return;
28 void
29 foo3 (void)
31 memset (c, -1, 19);
32 return;
35 void
36 foo4 (void)
38 memset (d, 1, 23);
39 return;
42 void
43 check (signed char *arr, int idx, int len, int v)
45 int i;
46 for (i = 0; i < idx; i++)
47 if (arr[i] != v)
48 abort ();
50 for (i = idx; i < len; i++)
51 if (arr[i] != 0)
52 abort ();
55 int
56 main(void)
58 foo1 ();
59 check ((signed char *)a, 16, sizeof (a), -1);
61 foo2 ();
62 check ((signed char *)b, 25, sizeof (b), 1);
64 foo3 ();
65 check ((signed char *)c, 19, sizeof (c), -1);
67 foo4 ();
68 check ((signed char *)d, 23, sizeof (d), 1);
70 return 0;
73 /* { dg-final { scan-assembler-not "bl?\[ \t\]+memset" { target { arm_little_endian && arm_neon } } } } */
74 /* { dg-final { scan-assembler "vst1" { target { arm_little_endian && arm_neon } } } } */
75 /* { dg-final { scan-assembler-not "vstr" { target { arm_little_endian && arm_neon } } } } */