1/* { dg-do compile { target { ! ia32 } } } */ 2/* { dg-options "-O2 -fdump-rtl-pro_and_epilogue" } */ 3 4enum 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 15typedef int *rtx; 16typedef long unsigned int size_t; 17extern unsigned char mode_size[NUM_MACHINE_MODES]; 18 19extern rtx c_readstr (const char *, enum machine_mode); 20extern rtx convert_to_mode (enum machine_mode, rtx, int); 21extern rtx expand_mult (enum machine_mode, rtx, rtx, rtx, int); 22extern rtx force_reg (enum machine_mode, rtx); 23extern unsigned char mode_size_inline (enum machine_mode); 24extern void *memset (void *__s, int __c, size_t __n); 25 26rtx 27builtin_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/* { dg-final { cleanup-rtl-dump "pro_and_epilogue" } } */ 50