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