(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-ssa/
pr95527.c
       1  /* PR tree-optimization/95527 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -fdump-tree-optimized" } */
       4  /* { dg-final { scan-tree-dump-times "return 0;" 4 "optimized" } } */
       5  /* { dg-final { scan-tree-dump-times "return 18;" 4 "optimized" } } */
       6  
       7  /* { dg-final { scan-tree-dump-times "a_\[0-9]*\\\(D\\\) == 0" 1 "optimized" } } */
       8  
       9  int
      10  f1 (int a)
      11  {
      12    return __builtin_ffs (a) == 0;
      13  }
      14  
      15  /* { dg-final { scan-tree-dump-times "b_\[0-9]*\\\(D\\\) != 0" 1 "optimized" } } */
      16  
      17  int
      18  f2 (int b)
      19  {
      20    return __builtin_ffs (b) != 0;
      21  }
      22  
      23  int
      24  f3 (int x)
      25  {
      26    return __builtin_ffs (x) == -1;
      27  }
      28  
      29  int
      30  f4 (int x)
      31  {
      32    return 17 + (__builtin_ffs (x) != -1);
      33  }
      34  
      35  int
      36  f5 (int x)
      37  {
      38    return __builtin_ffs (x) == __SIZEOF_INT__ * __CHAR_BIT__ + 1;
      39  }
      40  
      41  int
      42  f6 (int x)
      43  {
      44    return 17 + (__builtin_ffs (x) != __SIZEOF_INT__ * __CHAR_BIT__ + 1);
      45  }
      46  
      47  /* { dg-final { scan-tree-dump-times "c_\[0-9]*\\\(D\\\) & 63" 1 "optimized" } } */
      48  /* { dg-final { scan-tree-dump-times "== 32" 1 "optimized" } } */
      49  
      50  int
      51  f7 (int c)
      52  {
      53    return __builtin_ffs (c) == 6;
      54  }
      55  
      56  /* { dg-final { scan-tree-dump-times "d_\[0-9]*\\\(D\\\) & 16383" 1 "optimized" } } */
      57  /* { dg-final { scan-tree-dump-times "!= 8192" 1 "optimized" } } */
      58  
      59  int
      60  f8 (int d)
      61  {
      62    return __builtin_ffs (d) != 14;
      63  }
      64  
      65  /* { dg-final { scan-tree-dump-times "e_\[0-9]*\\\(D\\\) == -9223372036854775808" 1 "optimized" { target lp64 } } } */
      66  /* { dg-final { scan-tree-dump-times "e_\[0-9]*\\\(D\\\) == -2147483648" 1 "optimized" { target ilp32 } } } */
      67  
      68  int
      69  f9 (long int e)
      70  {
      71    return __builtin_ffsl (e) == __SIZEOF_LONG__ * __CHAR_BIT__;
      72  }
      73  
      74  /* { dg-final { scan-tree-dump-times "f_\[0-9]*\\\(D\\\) != -9223372036854775808" 1 "optimized" } } */
      75  
      76  int
      77  f10 (long long int f)
      78  {
      79    return __builtin_ffsll (f) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__;
      80  }
      81  
      82  /* { dg-final { scan-tree-dump-times "g_\[0-9]*\\\(D\\\) != 0" 1 "optimized" } } */
      83  
      84  int
      85  f11 (long long int g)
      86  {
      87    return __builtin_ffsll (g) > 0;
      88  }
      89  
      90  /* { dg-final { scan-tree-dump-times "h_\[0-9]*\\\(D\\\) == 0" 1 "optimized" } } */
      91  
      92  int
      93  f12 (int h)
      94  {
      95    return __builtin_ffs (h) <= 0;
      96  }
      97  
      98  int
      99  f13 (int x)
     100  {
     101    return 17 + (__builtin_ffs (x) > -1);
     102  }
     103  
     104  int
     105  f14 (int x)
     106  {
     107    return __builtin_ffs (x) <= -1;
     108  }
     109  
     110  int
     111  f15 (int x)
     112  {
     113    return __builtin_ffs (x) > __SIZEOF_INT__ * __CHAR_BIT__;
     114  }
     115  
     116  int
     117  f16 (int x)
     118  {
     119    return 17 + (__builtin_ffs (x) <= __SIZEOF_INT__ * __CHAR_BIT__);
     120  }
     121  
     122  /* { dg-final { scan-tree-dump-times "i_\[0-9]*\\\(D\\\) & 63" 1 "optimized" } } */
     123  /* { dg-final { scan-tree-dump-times "i_\[0-9]*\\\(D\\\) != 0" 1 "optimized" } } */
     124  
     125  int
     126  f17 (int i)
     127  {
     128    return __builtin_ffs (i) > 6;
     129  }
     130  
     131  /* { dg-final { scan-tree-dump-times "j_\[0-9]*\\\(D\\\) & 4095" 1 "optimized" } } */
     132  /* { dg-final { scan-tree-dump-times "j_\[0-9]*\\\(D\\\) == 0" 1 "optimized" } } */
     133  
     134  int
     135  f18 (int j)
     136  {
     137    return __builtin_ffs (j) <= 12;
     138  }
     139  
     140  /* { dg-final { scan-tree-dump-times "k_\[0-9]*\\\(D\\\) == -2147483648" 1 "optimized" { target int32 } } } */
     141  
     142  int
     143  f19 (int k)
     144  {
     145    return __builtin_ffs (k) > __SIZEOF_INT__ * __CHAR_BIT__ - 1;
     146  }
     147  
     148  /* { dg-final { scan-tree-dump-times "l_\[0-9]*\\\(D\\\) != -2147483648" 1 "optimized" { target int32 } } } */
     149  
     150  int
     151  f20 (int l)
     152  {
     153    return __builtin_ffs (l) <= __SIZEOF_INT__ * __CHAR_BIT__ - 1;
     154  }
     155  
     156  /* { dg-final { scan-tree-dump-times "m_\[0-9]*\\\(D\\\) & 1073741823" 1 "optimized" { target int32 } } } */
     157  /* { dg-final { scan-tree-dump-times "m_\[0-9]*\\\(D\\\) != 0" 1 "optimized" } } */
     158  
     159  int
     160  f21 (int m)
     161  {
     162    return __builtin_ffs (m) > __SIZEOF_INT__ * __CHAR_BIT__ - 2;
     163  }
     164  
     165  /* { dg-final { scan-tree-dump-times "n_\[0-9]*\\\(D\\\) & 1073741823" 1 "optimized" { target int32 } } } */
     166  /* { dg-final { scan-tree-dump-times "n_\[0-9]*\\\(D\\\) == 0" 1 "optimized" } } */
     167  
     168  int
     169  f22 (int n)
     170  {
     171    return __builtin_ffs (n) <= __SIZEOF_INT__ * __CHAR_BIT__ - 2;
     172  }