(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr57154.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fschedule-insns" } */
       3  /* { dg-require-effective-target scheduling } */
       4  
       5  #define PF_FROZEN 0x00010000
       6  #define likely(x)      __builtin_expect(!!(x), 1)
       7  
       8  struct cur
       9  {
      10    unsigned long flags;
      11  };
      12  struct cur *cur;
      13  
      14  unsigned long freeze_cnt;
      15  
      16  extern int foo(void *);
      17  extern int slow_path(void *);
      18  
      19  static inline int freezing(void *p)
      20  {
      21          if (likely(!foo(&freeze_cnt)))
      22                  return 0;
      23          return slow_path(p);
      24  }
      25  
      26  extern int blah(void);
      27  
      28  int testcase(int check_kthr_stop)
      29  {
      30    int was_frozen = 0;
      31  
      32    for (;;) {
      33      if (!freezing(cur) ||
      34          (check_kthr_stop && blah()))
      35        cur->flags &= ~PF_FROZEN;
      36  
      37      if (!(cur->flags & PF_FROZEN))
      38        break;
      39  
      40      was_frozen = 1;
      41    }
      42  
      43    return was_frozen;
      44  }