(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
memcmp-5.c
       1  /* PR middle-end/78257 - missing memcmp optimization with constant arrays
       2     { dg-do compile }
       3     { dg-options "-O -Wall -fdump-tree-optimized" } */
       4  
       5  #define A "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
       6            "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
       7            "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
       8            "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
       9            "0"
      10  
      11  const char a257[sizeof A - 1] = A;
      12  const char a258[sizeof A] = A;
      13  
      14  _Static_assert (sizeof A == 258);
      15  _Static_assert (sizeof a257 == 257);
      16  
      17  /* Verify that initializers longer than 256 characters (an internal limit
      18     on the size of a buffer used to store representations in) are handled.  */
      19  
      20  void eq_256plus (void)
      21  {
      22    int n = 0;
      23  
      24    n += __builtin_memcmp (a257,       A,       sizeof a257);
      25    n += __builtin_memcmp (a257 +   1, A +   1, sizeof a257 - 1);
      26    n += __builtin_memcmp (a257 +   2, A +   2, sizeof a257 - 2);
      27    n += __builtin_memcmp (a257 + 127, A + 127, sizeof a257 - 127);
      28    n += __builtin_memcmp (a257 + 128, A + 128, sizeof a257 - 128);
      29    n += __builtin_memcmp (a257 + 255, A + 255, 2);
      30    n += __builtin_memcmp (a257 + 256, A + 256, 1);
      31  
      32    n += __builtin_memcmp (a258,       A,       sizeof a257);
      33    n += __builtin_memcmp (a258 +   1, A +   1, sizeof a257 - 1);
      34    n += __builtin_memcmp (a258 +   2, A +   2, sizeof a257 - 2);
      35    n += __builtin_memcmp (a258 + 127, A + 127, sizeof a257 - 127);
      36    n += __builtin_memcmp (a258 + 128, A + 128, sizeof a257 - 128);
      37    n += __builtin_memcmp (a258 + 256, A + 256, 2);
      38    n += __builtin_memcmp (a258 + 257, A + 257, 1);
      39  
      40    if (n)
      41      __builtin_abort ();
      42  }
      43  
      44  #define X "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
      45            "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
      46            "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
      47            "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
      48            "1"
      49  
      50  void lt_256plus (void)
      51  {
      52    int n = 0;
      53  
      54    n += 0 >  __builtin_memcmp (a257,       X,       sizeof a257);
      55    n += 0 >  __builtin_memcmp (a257 +   1, X +   1, sizeof a257 - 1);
      56    n += 0 >  __builtin_memcmp (a257 +   2, X +   2, sizeof a257 - 2);
      57    n += 0 >  __builtin_memcmp (a257 + 127, X + 127, sizeof a257 - 127);
      58    n += 0 >  __builtin_memcmp (a257 + 128, X + 128, sizeof a257 - 128);
      59    n += 0 >  __builtin_memcmp (a257 + 255, X + 255, 2);
      60    n += 0 >  __builtin_memcmp (a257 + 256, X + 256, 1);
      61  
      62    n += 0 >  __builtin_memcmp (a258,       X,       sizeof a258);
      63    n += 0 >  __builtin_memcmp (a258 +   1, X +   1, sizeof a258 - 1);
      64    n += 0 >  __builtin_memcmp (a258 +   2, X +   2, sizeof a258 - 2);
      65    n += 0 >  __builtin_memcmp (a258 + 127, X + 127, sizeof a257 - 127);
      66    n += 0 >  __builtin_memcmp (a258 + 128, X + 128, sizeof a257 - 128);
      67    n += 0 >  __builtin_memcmp (a258 + 256, X + 256, 2);
      68    n += 0 == __builtin_memcmp (a258 + 257, X + 257, 1);
      69  
      70    if (n != 14)
      71      __builtin_abort ();
      72  }