1 /* { dg-do compile { target { ! ia32 } } } */
2 /* { dg-options "-O2 -fdump-rtl-pro_and_epilogue" } */
3 
4 enum machine_mode
5 {
6   FAKE_0,
7   FAKE_1,
8   FAKE_2,
9   FAKE_3,
10   FAKE_4,
11   FAKE_5,
12   NUM_MACHINE_MODES,
13 };
14 
15 typedef int *rtx;
16 typedef long unsigned int size_t;
17 extern unsigned char mode_size[NUM_MACHINE_MODES];
18 
19 extern rtx c_readstr (const char *, enum machine_mode);
20 extern rtx convert_to_mode (enum machine_mode, rtx, int);
21 extern rtx expand_mult (enum machine_mode, rtx, rtx, rtx, int);
22 extern rtx force_reg (enum machine_mode, rtx);
23 extern unsigned char mode_size_inline (enum machine_mode);
24 extern void *memset (void *__s, int __c, size_t __n);
25 
26 rtx
builtin_memset_gen_str(void * data,long offset,enum machine_mode mode)27 builtin_memset_gen_str (void *data, long offset __attribute__ ((__unused__)),
28 			enum machine_mode mode)
29 {
30   rtx target, coeff;
31   size_t size;
32   char *p;
33 
34   size = ((unsigned short) (__builtin_constant_p (mode)
35 			    ? mode_size_inline (mode) : mode_size[mode]));
36   if (size == 1)
37     return (rtx) data;
38 
39   p = ((char *) __builtin_alloca(sizeof (char) * (size)));
40   memset (p, 1, size);
41   coeff = c_readstr (p, mode);
42 
43   target = convert_to_mode (mode, (rtx) data, 1);
44   target = expand_mult (mode, target, coeff, (rtx) 0, 1);
45   return force_reg (mode, target);
46 }
47 
48 /* { dg-final { scan-rtl-dump "Performing shrink-wrapping" "pro_and_epilogue"  } } */
49