(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-ssa/
ldist-strlen-1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 -ftree-loop-distribution -fdump-tree-ldist-details" } */
       3  /* { dg-additional-options "-march=z13 -mzarch" { target s390x-*-* } } */
       4  /* { dg-final { scan-tree-dump-times "generated strlenQI\n" 4 "ldist" } } */
       5  /* { dg-final { scan-tree-dump-times "generated strlenHI\n" 4 "ldist" { target s390x-*-* } } } */
       6  /* { dg-final { scan-tree-dump-times "generated strlenSI\n" 4 "ldist" { target s390x-*-* } } } */
       7  
       8  #include <stdint.h>
       9  #include <assert.h>
      10  
      11  typedef __SIZE_TYPE__ size_t;
      12  extern void* malloc (size_t);
      13  extern void* memset (void*, int, size_t);
      14  
      15  #define test(T, U)        \
      16  __attribute__((noinline)) \
      17  U test_##T##U (T *s)      \
      18  {                         \
      19    U i;                    \
      20    for (i=0; s[i]; ++i);   \
      21    return i;               \
      22  }
      23  
      24  test (uint8_t,  size_t)
      25  test (uint16_t, size_t)
      26  test (uint32_t, size_t)
      27  test (uint8_t,  int)
      28  test (uint16_t, int)
      29  test (uint32_t, int)
      30  
      31  test (int8_t,  size_t)
      32  test (int16_t, size_t)
      33  test (int32_t, size_t)
      34  test (int8_t,  int)
      35  test (int16_t, int)
      36  test (int32_t, int)
      37  
      38  #define run(T, U, i)             \
      39  {                                \
      40  T *q = p;                        \
      41  q[i] = 0;                        \
      42  assert (test_##T##U (p) == i);   \
      43  memset (&q[i], 0xf, sizeof (T)); \
      44  }
      45  
      46  int main(void)
      47  {
      48    void *p = malloc (1024);
      49    assert (p);
      50    memset (p, 0xf, 1024);
      51  
      52    run (uint8_t, size_t, 0);
      53    run (uint8_t, size_t, 1);
      54    run (uint8_t, size_t, 13);
      55  
      56    run (int8_t, size_t, 0);
      57    run (int8_t, size_t, 1);
      58    run (int8_t, size_t, 13);
      59  
      60    run (uint8_t, int, 0);
      61    run (uint8_t, int, 1);
      62    run (uint8_t, int, 13);
      63  
      64    run (int8_t, int, 0);
      65    run (int8_t, int, 1);
      66    run (int8_t, int, 13);
      67  
      68    run (uint16_t, size_t, 0);
      69    run (uint16_t, size_t, 1);
      70    run (uint16_t, size_t, 13);
      71  
      72    run (int16_t, size_t, 0);
      73    run (int16_t, size_t, 1);
      74    run (int16_t, size_t, 13);
      75  
      76    run (uint16_t, int, 0);
      77    run (uint16_t, int, 1);
      78    run (uint16_t, int, 13);
      79  
      80    run (int16_t, int, 0);
      81    run (int16_t, int, 1);
      82    run (int16_t, int, 13);
      83  
      84    run (uint32_t, size_t, 0);
      85    run (uint32_t, size_t, 1);
      86    run (uint32_t, size_t, 13);
      87  
      88    run (int32_t, size_t, 0);
      89    run (int32_t, size_t, 1);
      90    run (int32_t, size_t, 13);
      91  
      92    run (uint32_t, int, 0);
      93    run (uint32_t, int, 1);
      94    run (uint32_t, int, 13);
      95  
      96    run (int32_t, int, 0);
      97    run (int32_t, int, 1);
      98    run (int32_t, int, 13);
      99  
     100    return 0;
     101  }