(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512fp16-reduce-op-2.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -msse2 -mprefer-vector-width=512 -fdump-tree-optimized" } */
       3  
       4  /* { dg-final { scan-tree-dump-times "\.REDUC_PLUS" 3 "optimized" } } */
       5  /* { dg-final { scan-tree-dump-times "\.REDUC_MIN" 3 "optimized" } } */
       6  /* { dg-final { scan-tree-dump-times "\.REDUC_MAX" 3 "optimized" } } */
       7  
       8  _Float16
       9  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      10  reduc_add_128 (_Float16* p)
      11  {
      12    _Float16 sum = 0;
      13    for (int i = 0; i != 8; i++)
      14      sum += p[i];
      15    return sum;
      16  }
      17  
      18  _Float16
      19  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      20  reduc_add_256 (_Float16* p)
      21  {
      22    _Float16 sum = 0;
      23    for (int i = 0; i != 16; i++)
      24      sum += p[i];
      25    return sum;
      26  }
      27  
      28  _Float16
      29  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      30  reduc_add_512 (_Float16* p)
      31  {
      32    _Float16 sum = 0;
      33    for (int i = 0; i != 32; i++)
      34      sum += p[i];
      35    return sum;
      36  }
      37  
      38  _Float16
      39  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      40  reduc_min_128 (_Float16* p)
      41  {
      42    _Float16 sum = p[0];
      43    for (int i = 0; i != 8; i++)
      44      sum = sum > p[i] ? p[i] : sum;
      45    return sum;
      46  }
      47  
      48  _Float16
      49  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      50  reduc_min_256 (_Float16* p)
      51  {
      52    _Float16 sum = p[0];
      53    for (int i = 0; i != 16; i++)
      54      sum = sum > p[i] ? p[i] : sum;
      55    return sum;
      56  }
      57  
      58  _Float16
      59  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      60  reduc_min_512 (_Float16* p)
      61  {
      62    _Float16 sum = p[0];
      63    for (int i = 0; i != 32; i++)
      64      sum = sum > p[i] ? p[i] : sum;
      65    return sum;
      66  }
      67  
      68  _Float16
      69  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      70  reduc_max_128 (_Float16* p)
      71  {
      72    _Float16 sum = p[0];
      73    for (int i = 0; i != 8; i++)
      74      sum = sum < p[i] ? p[i] : sum;
      75    return sum;
      76  }
      77  
      78  _Float16
      79  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      80  reduc_max_256 (_Float16* p)
      81  {
      82    _Float16 sum = p[0];
      83    for (int i = 0; i != 16; i++)
      84      sum = sum < p[i] ? p[i] : sum;
      85    return sum;
      86  }
      87  
      88  _Float16
      89  __attribute__((noipa, target("avx512fp16,avx512vl"), optimize("Ofast")))
      90  reduc_max_512 (_Float16* p)
      91  {
      92    _Float16 sum = p[0];
      93    for (int i = 0; i != 32; i++)
      94      sum = sum < p[i] ? p[i] : sum;
      95    return sum;
      96  }