(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
reduction.h
       1  #ifndef REDUCTION_H
       2  #define REDUCTION_H
       3  
       4  #define DO_PRAGMA(x) _Pragma (#x)
       5  
       6  #define check_reduction_op(type, op, init, b, gwv_par, gwv_loop)	\
       7    {									\
       8      type res, vres;							\
       9      res = (init);							\
      10  DO_PRAGMA (acc parallel gwv_par copy (res))				\
      11  DO_PRAGMA (acc loop gwv_loop reduction (op:res))			\
      12      for (i = 0; i < n; i++)						\
      13        res = res op (b);							\
      14  									\
      15      vres = (init);							\
      16      for (i = 0; i < n; i++)						\
      17        vres = vres op (b);						\
      18  									\
      19      if (res != vres)							\
      20        abort ();								\
      21    }
      22  
      23  #define check_reduction_macro(type, op, init, b, gwv_par, gwv_loop)	\
      24    {									\
      25      type res, vres;							\
      26      res = (init);							\
      27      DO_PRAGMA (acc parallel gwv_par copy(res))				\
      28  DO_PRAGMA (acc loop gwv_loop reduction (op:res))			\
      29      for (i = 0; i < n; i++)						\
      30        res = op (res, (b));						\
      31  									\
      32      vres = (init);							\
      33      for (i = 0; i < n; i++)						\
      34        vres = op (vres, (b));						\
      35  									\
      36      if (res != vres)							\
      37        abort ();								\
      38    }
      39  
      40  #define max(a, b) (((a) > (b)) ? (a) : (b))
      41  #define min(a, b) (((a) < (b)) ? (a) : (b))
      42  
      43  #endif