(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
memcpy-pr95886.c
       1  /* PR middle-end/95886 - suboptimal memcpy with embedded zero bytes
       2     { dg-do compile { target { ! ia32 } } }
       3     { dg-options "-O2 -Wall -fdump-rtl-expand" } */
       4  
       5  const char a1234567890[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
       6  
       7  void cpy_123456789 (void *d)
       8  {
       9    /* Expands into:
      10         movabsq  $578437695752307201, %rax
      11         movb     $9, 8(%rdi)
      12         movq     %rax, (%rdi)  */
      13    __builtin_memcpy (d, a1234567890, 9);
      14  }
      15  
      16  const char a1234567800[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 0 };
      17  
      18  void cpy_1234567800 (void *d)
      19  {
      20    /* Expands into:
      21         movabsq  $578437695752307201, %rax
      22         movb     $0, 8(%rdi)
      23         movq     %rax, (%rdi)  */
      24    __builtin_memcpy (d, a1234567800, 9);
      25  }
      26  
      27  /* { dg-final { scan-rtl-dump-times "const_int 578437695752307201" 2 "expand"} } */
      28  
      29  
      30  const char a0234567890[10] = { 0, 2, 3, 4, 5, 6, 7, 8, 9 };
      31  
      32  void cpy_023456789 (void *d)
      33  {
      34    __builtin_memcpy (d, a0234567890, 9);
      35  }
      36  
      37  /* { dg-final { scan-rtl-dump-times "const_int 578437695752307200" 1 "expand"} } */
      38  
      39  
      40  const char a1034567890[10] = { 1, 0, 3, 4, 5, 6, 7, 8, 9 };
      41  
      42  void cpy_103456789 (void *d)
      43  {
      44    __builtin_memcpy (d, a1034567890, 9);
      45  }
      46  
      47  /* { dg-final { scan-rtl-dump-times "const_int 578437695752306689" 1 "expand"} } */
      48  
      49  
      50  const char a1204567890[10] = { 1, 2, 0, 4, 5, 6, 7, 8, 9 };
      51  
      52  void cpy_120456789 (void *d)
      53  {
      54    __builtin_memcpy (d, a1204567890, 9);
      55  }
      56  
      57  /* { dg-final { scan-rtl-dump-times "const_int 578437695752110593" 1 "expand"} } */
      58  
      59  
      60  const char a1230567890[10] = { 1, 2, 3, 0, 5, 6, 7, 8, 9 };
      61  
      62  void cpy_123056789 (void *d)
      63  {
      64    __builtin_memcpy (d, a1230567890, 9);
      65  }
      66  
      67  /* { dg-final { scan-rtl-dump-times "const_int 578437695685198337" 1 "expand"} } */
      68  
      69  
      70  const char a1234067890[10] = { 1, 2, 3, 4, 0, 6, 7, 8, 9 };
      71  
      72  void cpy_123406789 (void *d)
      73  {
      74    __builtin_memcpy (d, a1234067890, 9);
      75  }
      76  
      77  /* { dg-final { scan-rtl-dump-times "const_int 578437695685198337" 1 "expand"} } */
      78  
      79  
      80  const char a1234507890[10] = { 1, 2, 3, 4, 5, 0, 7, 8, 9 };
      81  
      82  void cpy_123450789 (void *d)
      83  {
      84    __builtin_memcpy (d, a1234507890, 9);
      85  }
      86  
      87  /* { dg-final { scan-rtl-dump-times "const_int 578431098682540545" 1 "expand"} } */
      88  
      89  
      90  const char a1234560890[10] = { 1, 2, 3, 4, 5, 6, 0, 8, 9 };
      91  
      92  void cpy_123456089 (void *d)
      93  {
      94    __builtin_memcpy (d, a1234560890, 9);
      95  }
      96  
      97  /* { dg-final { scan-rtl-dump-times "const_int 576467370915332609" 1 "expand"} } */
      98  
      99  
     100  const char a1234567090[10] = { 1, 2, 3, 4, 5, 6, 7, 0, 9 };
     101  
     102  void cpy_123456709 (void *d)
     103  {
     104    __builtin_memcpy (d, a1234567090, 9);
     105  }
     106  
     107  /* { dg-final { scan-rtl-dump-times "const_int 1976943448883713" 1 "expand"} } */