(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
fold-notshift-1.c
       1  /* PR tree-optimization/54579
       2     PR middle-end/55299 */
       3  
       4  /* { dg-do compile } */
       5  /* { dg-options "-O -fdump-tree-cddce1" } */
       6  
       7  int
       8  asr1 (int a, int b)
       9  {
      10    return ~((~a) >> b);
      11  }
      12  
      13  long
      14  asr1l (long a, long b)
      15  {
      16    return ~((~a) >> b);
      17  }
      18  
      19  int
      20  asr_conv (unsigned a, unsigned b)
      21  {
      22    return ~((int)~a >> b);
      23  }
      24  
      25  unsigned
      26  asr_conv2 (unsigned a, unsigned b)
      27  {
      28    return ~(unsigned)((int)~a >> b);
      29  }
      30  
      31  unsigned
      32  asr_conv3 (int a, int b)
      33  {
      34    return ~(unsigned)(~a >> b);
      35  }
      36  
      37  typedef __INT32_TYPE__ int32_t;
      38  typedef __INT64_TYPE__ int64_t;
      39  
      40  int32_t
      41  asr_conv4 (int64_t a, int b)
      42  {
      43    return ~((int32_t)~a >> b);
      44  }
      45  
      46  int32_t
      47  asr_conv5 (int64_t a, int b)
      48  {
      49    return ~(int32_t)(~a >> b);
      50  }
      51  
      52  int
      53  asr2 (int a, int b)
      54  {
      55    return -((-a - 1) >> b) - 1;
      56  }
      57  
      58  int
      59  asr3 (int a, int b)
      60  {
      61    return a < 0 ? ~((~a) >> b) : a >> b;
      62  }
      63  
      64  int64_t
      65  asr3l (int64_t a, int b)
      66  {
      67    return a < 0 ? ~((~a) >> b) : a >> b;
      68  }
      69  
      70  int
      71  asr4 (int a, int b)
      72  {
      73    return a < 0 ? -((-a - 1) >> b) - 1 : a >> b;
      74  }
      75  
      76  /* { dg-final { scan-tree-dump-times ">>" 11 "cddce1" } } */
      77  /* { dg-final { scan-tree-dump-not "~" "cddce1" } } */