(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr102483.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -msse4.1 -ftree-vectorize -fdump-tree-optimized" } */
       3  /* { dg-final { scan-tree-dump-times "\.REDUC_MIN" 2 "optimized" } } */
       4  /* { dg-final { scan-tree-dump-times "\.REDUC_MAX" 2 "optimized" } } */
       5  /* { dg-final { scan-tree-dump-times "\.REDUC_PLUS" 1 "optimized" } } */
       6  
       7  char
       8  __attribute__((noipa, optimize("Ofast"),target("sse4.1")))
       9  reduce_add (char* p)
      10  {
      11    char sum = 0;
      12    for (int i = 0; i != 4; i++)
      13      sum += p[i];
      14    return sum;
      15  }
      16  
      17  #define MAX(a, b) ((a) > (b) ? (a) : (b))
      18  #define MIN(a, b) ((a) > (b) ? (b) : (a))
      19  
      20  unsigned char
      21  __attribute__((noipa, optimize("Ofast"),target("sse4.1")))
      22  reduce_umax (unsigned char* p)
      23  {
      24    unsigned char sum = p[0];
      25    for (int i = 0; i != 4; i++)
      26      sum = MAX(sum, p[i]);
      27    return sum;
      28  }
      29  
      30  unsigned char
      31  __attribute__((noipa, optimize("Ofast"),target("sse4.1")))
      32  reduce_umin (unsigned char* p)
      33  {
      34    unsigned char sum = p[0];
      35    for (int i = 0; i != 4; i++)
      36      sum = MIN(sum, p[i]);
      37    return sum;
      38  }
      39  
      40  char
      41  __attribute__((noipa, optimize("Ofast"),target("sse4.1")))
      42  reduce_smax (char* p)
      43  {
      44    char sum = p[0];
      45    for (int i = 0; i != 4; i++)
      46      sum = MAX(sum, p[i]);
      47    return sum;
      48  }
      49  
      50  char
      51  __attribute__((noipa, optimize("Ofast"),target("sse4.1")))
      52  reduce_smin (char* p)
      53  {
      54    char sum = p[0];
      55    for (int i = 0; i != 4; i++)
      56      sum = MIN(sum, p[i]);
      57    return sum;
      58  }