(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
reduc_13.c
       1  /* { dg-options "-O3 -msve-vector-bits=256 --param vect-partial-vector-usage=1" } */
       2  
       3  void __attribute__((noipa))
       4  add_loop (unsigned int *x, unsigned int *res)
       5  {
       6    unsigned int res0 = res[0];
       7    unsigned int res1 = res[1];
       8    for (int i = 0; i < 0x7ff; ++i)
       9      {
      10        res0 += x[i * 2];
      11        res1 += x[i * 2 + 1];
      12      }
      13    res[0] = res0;
      14    res[1] = res1;
      15  }
      16  
      17  void __attribute__((noipa))
      18  min_loop (unsigned int *x, unsigned int *res)
      19  {
      20    unsigned int res0 = res[0];
      21    unsigned int res1 = res[1];
      22    for (int i = 0; i < 0x7ff; ++i)
      23      {
      24        res0 = res0 < x[i * 2] ? res0 : x[i * 2];
      25        res1 = res1 < x[i * 2 + 1] ? res1 : x[i * 2 + 1];
      26      }
      27    res[0] = res0;
      28    res[1] = res1;
      29  }
      30  
      31  void __attribute__((noipa))
      32  max_loop (unsigned int *x, unsigned int *res)
      33  {
      34    unsigned int res0 = res[0];
      35    unsigned int res1 = res[1];
      36    for (int i = 0; i < 0x7ff; ++i)
      37      {
      38        res0 = res0 > x[i * 2] ? res0 : x[i * 2];
      39        res1 = res1 > x[i * 2 + 1] ? res1 : x[i * 2 + 1];
      40      }
      41    res[0] = res0;
      42    res[1] = res1;
      43  }
      44  
      45  void __attribute__((noipa))
      46  and_loop (unsigned int *x, unsigned int *res)
      47  {
      48    unsigned int res0 = res[0];
      49    unsigned int res1 = res[1];
      50    for (int i = 0; i < 0x7ff; ++i)
      51      {
      52        res0 &= x[i * 2];
      53        res1 &= x[i * 2 + 1];
      54      }
      55    res[0] = res0;
      56    res[1] = res1;
      57  }
      58  
      59  void __attribute__((noipa))
      60  or_loop (unsigned int *x, unsigned int *res)
      61  {
      62    unsigned int res0 = res[0];
      63    unsigned int res1 = res[1];
      64    for (int i = 0; i < 0x7ff; ++i)
      65      {
      66        res0 |= x[i * 2];
      67        res1 |= x[i * 2 + 1];
      68      }
      69    res[0] = res0;
      70    res[1] = res1;
      71  }
      72  
      73  void __attribute__((noipa))
      74  eor_loop (unsigned int *x, unsigned int *res)
      75  {
      76    unsigned int res0 = res[0];
      77    unsigned int res1 = res[1];
      78    for (int i = 0; i < 0x7ff; ++i)
      79      {
      80        res0 ^= x[i * 2];
      81        res1 ^= x[i * 2 + 1];
      82      }
      83    res[0] = res0;
      84    res[1] = res1;
      85  }
      86  
      87  /* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      88  /* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      89  
      90  /* { dg-final { scan-assembler-times {\tumin\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
      91  
      92  /* { dg-final { scan-assembler-times {\tumax\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
      93  
      94  /* { dg-final { scan-assembler-times {\tand\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
      95  /* { dg-final { scan-assembler-times {\tand\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      96  
      97  /* { dg-final { scan-assembler-times {\torr\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
      98  /* { dg-final { scan-assembler-times {\torr\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      99  
     100  /* { dg-final { scan-assembler-times {\teor\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
     101  /* { dg-final { scan-assembler-times {\teor\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */