1 /* Make sure that short memset's with constant length are emitted
2 without loop statements. */
4 /* { dg-do compile } */
5 /* { dg-options "-O3 -mzarch" } */
9 *memset1(void *s
, int c
)
11 return __builtin_memset (s
, c
, 42);
16 *memset2(void *s
, int c
)
18 return __builtin_memset (s
, c
, 700);
23 *memset3(void *s
, int c
)
25 return __builtin_memset (s
, c
, 0);
30 *memset4(void *s
, int c
)
32 return __builtin_memset (s
, c
, 256);
37 *memset5(void *s
, int c
)
39 return __builtin_memset (s
, c
, 512);
42 /* still 2 mvc through the additional first byte */
44 *memset6(void *s
, int c
)
46 return __builtin_memset (s
, c
, 514);
51 *memset7(void *s
, int c
)
53 return __builtin_memset (s
, c
, 515);
56 /* still 3 mvc through the additional first byte */
58 *memset8(void *s
, int c
)
60 return __builtin_memset (s
, c
, 771);
63 /* Use mvc loop: 2 mvc */
65 *memset9(void *s
, int c
)
67 return __builtin_memset (s
, c
, 772);
70 /* 3 mvc with displacement overflow after the first */
72 *memset10(void *s
, int c
)
74 return __builtin_memset ((char*)s
+ 4000, c
, 700);
81 return __builtin_memset (s
, 0, 42);
88 return __builtin_memset (s
, 0, 700);
95 return __builtin_memset (s
, 0, 0);
102 return __builtin_memset (s
, 0, 256);
109 return __builtin_memset (s
, 0, 512);
116 return __builtin_memset (s
, 0, 768);
119 /* start using xc loop */
123 return __builtin_memset (s
, 0, 1281);
126 /* 3 xc with displacement overflow after the first */
130 return __builtin_memset (s
+ 4000, 0, 700);
133 /* { dg-final { scan-assembler-times "mvc" 19 } } */
134 /* { dg-final { scan-assembler-times "xc" 15 } } */