(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
rotate-2.c
       1  /* Check rotate pattern detection.  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -fno-ipa-icf -fdump-tree-optimized" } */
       4  /* Rotates should be recognized only in functions with | instead of + or ^,
       5     or in functions that have constant shift counts (unused attribute on y).  */
       6  /* { dg-final { scan-tree-dump-times "r\[<>]\[<>]" 48 "optimized" } } */
       7  
       8  unsigned int
       9  f1 (unsigned int x, unsigned int y)
      10  {
      11    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
      12  }
      13  
      14  unsigned int
      15  f2 (unsigned int x, unsigned long int y)
      16  {
      17    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
      18  }
      19  
      20  unsigned int
      21  f3 (unsigned int x, int y __attribute__((unused)))
      22  {
      23    return (x << 1) | (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
      24  }
      25  
      26  unsigned int
      27  f4 (unsigned int x, int y __attribute__((unused)))
      28  {
      29    return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) | (x >> 1);
      30  }
      31  
      32  unsigned short int
      33  f5 (unsigned short int x, unsigned int y)
      34  {
      35    if (y >= __CHAR_BIT__ * __SIZEOF_SHORT__)
      36      __builtin_unreachable ();
      37    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
      38  }
      39  
      40  unsigned short int
      41  f6 (unsigned short int x, unsigned long int y)
      42  {
      43    if (y >= __CHAR_BIT__ * __SIZEOF_SHORT__)
      44      __builtin_unreachable ();
      45    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
      46  }
      47  
      48  unsigned char
      49  f7 (unsigned char x, unsigned int y)
      50  {
      51    if (y >= __CHAR_BIT__)
      52      __builtin_unreachable ();
      53    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
      54  }
      55  
      56  unsigned char
      57  f8 (unsigned char x, unsigned long int y)
      58  {
      59    if (y >= __CHAR_BIT__)
      60      __builtin_unreachable ();
      61    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
      62  }
      63  
      64  unsigned int
      65  f9 (unsigned int x, unsigned int y)
      66  {
      67    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
      68  }
      69  
      70  unsigned int
      71  f10 (unsigned int x, unsigned long int y)
      72  {
      73    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
      74  }
      75  
      76  unsigned int
      77  f11 (unsigned int x, int y __attribute__((unused)))
      78  {
      79    return (x << 1) | (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
      80  }
      81  
      82  unsigned int
      83  f12 (unsigned int x, int y __attribute__((unused)))
      84  {
      85    return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) | (x >> 1);
      86  }
      87  
      88  unsigned short int
      89  f13 (unsigned short int x, unsigned int y)
      90  {
      91    if (y >= __CHAR_BIT__ * __SIZEOF_SHORT__)
      92      __builtin_unreachable ();
      93    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
      94  }
      95  
      96  unsigned short int
      97  f14 (unsigned short int x, unsigned long int y)
      98  {
      99    if (y >= __CHAR_BIT__ * __SIZEOF_SHORT__)
     100      __builtin_unreachable ();
     101    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
     102  }
     103  
     104  unsigned char
     105  f15 (unsigned char x, unsigned int y)
     106  {
     107    if (y >= __CHAR_BIT__)
     108      __builtin_unreachable ();
     109    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
     110  }
     111  
     112  unsigned char
     113  f16 (unsigned char x, unsigned long int y)
     114  {
     115    if (y >= __CHAR_BIT__)
     116      __builtin_unreachable ();
     117    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
     118  }
     119  
     120  unsigned int
     121  f17 (unsigned int x, unsigned int y)
     122  {
     123    return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << y);
     124  }
     125  
     126  unsigned int
     127  f18 (unsigned int x, unsigned long int y)
     128  {
     129    return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << y);
     130  }
     131  
     132  unsigned int
     133  f19 (unsigned int x, int y __attribute__((unused)))
     134  {
     135    return (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << 1);
     136  }
     137  
     138  unsigned int
     139  f20 (unsigned int x, int y __attribute__((unused)))
     140  {
     141    return (x >> 1) ^ (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     142  }
     143  
     144  unsigned short int
     145  f21 (unsigned short int x, unsigned int y)
     146  {
     147    return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x << y);
     148  }
     149  
     150  unsigned short int
     151  f22 (unsigned short int x, unsigned long int y)
     152  {
     153    return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x << y);
     154  }
     155  
     156  unsigned char
     157  f23 (unsigned char x, unsigned int y)
     158  {
     159    return (x >> ((-y) & (__CHAR_BIT__ - 1))) ^ (x << y);
     160  }
     161  
     162  unsigned char
     163  f24 (unsigned char x, unsigned long int y)
     164  {
     165    return (x >> ((-y) & (__CHAR_BIT__ - 1))) ^ (x << y);
     166  }
     167  
     168  unsigned int
     169  f25 (unsigned int x, unsigned int y)
     170  {
     171    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << y);
     172  }
     173  
     174  unsigned int
     175  f26 (unsigned int x, unsigned long int y)
     176  {
     177    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << y);
     178  }
     179  
     180  unsigned int
     181  f27 (unsigned int x, int y __attribute__((unused)))
     182  {
     183    return (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << 1);
     184  }
     185  
     186  unsigned int
     187  f28 (unsigned int x, int y __attribute__((unused)))
     188  {
     189    return (x >> 1) ^ (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     190  }
     191  
     192  unsigned short int
     193  f29 (unsigned short int x, unsigned int y)
     194  {
     195    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x << y);
     196  }
     197  
     198  unsigned short int
     199  f30 (unsigned short int x, unsigned long int y)
     200  {
     201    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x << y);
     202  }
     203  
     204  unsigned char
     205  f31 (unsigned char x, unsigned int y)
     206  {
     207    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x << y);
     208  }
     209  
     210  unsigned char
     211  f32 (unsigned char x, unsigned long int y)
     212  {
     213    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x << y);
     214  }
     215  
     216  unsigned int
     217  f33 (unsigned int x, unsigned int y)
     218  {
     219    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     220  }
     221  
     222  unsigned int
     223  f34 (unsigned int x, unsigned long int y)
     224  {
     225    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     226  }
     227  
     228  unsigned int
     229  f35 (unsigned int x, int y __attribute__((unused)))
     230  {
     231    return (x >> 1) | (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     232  }
     233  
     234  unsigned int
     235  f36 (unsigned int x, int y __attribute__((unused)))
     236  {
     237    return (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) | (x << 1);
     238  }
     239  
     240  unsigned short int
     241  f37 (unsigned short int x, unsigned int y)
     242  {
     243    if (y >= __CHAR_BIT__ * __SIZEOF_SHORT__)
     244      __builtin_unreachable ();
     245    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
     246  }
     247  
     248  unsigned short int
     249  f38 (unsigned short int x, unsigned long int y)
     250  {
     251    if (y >= __CHAR_BIT__ * __SIZEOF_SHORT__)
     252      __builtin_unreachable ();
     253    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
     254  }
     255  
     256  unsigned char
     257  f39 (unsigned char x, unsigned int y)
     258  {
     259    if (y >= __CHAR_BIT__)
     260      __builtin_unreachable ();
     261    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ - 1)));
     262  }
     263  
     264  unsigned char
     265  f40 (unsigned char x, unsigned long int y)
     266  {
     267    if (y >= __CHAR_BIT__)
     268      __builtin_unreachable ();
     269    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ - 1)));
     270  }
     271  
     272  unsigned int
     273  f41 (unsigned int x, unsigned int y)
     274  {
     275    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     276  }
     277  
     278  unsigned int
     279  f42 (unsigned int x, unsigned long int y)
     280  {
     281    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     282  }
     283  
     284  unsigned int
     285  f43 (unsigned int x, int y __attribute__((unused)))
     286  {
     287    return (x >> 1) | (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     288  }
     289  
     290  unsigned int
     291  f44 (unsigned int x, int y __attribute__((unused)))
     292  {
     293    return (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) | (x << 1);
     294  }
     295  
     296  unsigned short int
     297  f45 (unsigned short int x, unsigned int y)
     298  {
     299    if (y >= __CHAR_BIT__ * __SIZEOF_SHORT__)
     300      __builtin_unreachable ();
     301    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
     302  }
     303  
     304  unsigned short int
     305  f46 (unsigned short int x, unsigned long int y)
     306  {
     307    if (y >= __CHAR_BIT__ * __SIZEOF_SHORT__)
     308      __builtin_unreachable ();
     309    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
     310  }
     311  
     312  unsigned char
     313  f47 (unsigned char x, unsigned int y)
     314  {
     315    if (y >= __CHAR_BIT__)
     316      __builtin_unreachable ();
     317    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
     318  }
     319  
     320  unsigned char
     321  f48 (unsigned char x, unsigned long int y)
     322  {
     323    if (y >= __CHAR_BIT__)
     324      __builtin_unreachable ();
     325    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
     326  }
     327  
     328  unsigned int
     329  f49 (unsigned int x, unsigned int y)
     330  {
     331    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> y);
     332  }
     333  
     334  unsigned int
     335  f50 (unsigned int x, unsigned long int y)
     336  {
     337    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> y);
     338  }
     339  
     340  unsigned int
     341  f51 (unsigned int x, int y __attribute__((unused)))
     342  {
     343    return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> 1);
     344  }
     345  
     346  unsigned int
     347  f52 (unsigned int x, int y __attribute__((unused)))
     348  {
     349    return (x << 1) ^ (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     350  }
     351  
     352  unsigned short int
     353  f53 (unsigned short int x, unsigned int y)
     354  {
     355    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x >> y);
     356  }
     357  
     358  unsigned short int
     359  f54 (unsigned short int x, unsigned long int y)
     360  {
     361    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x >> y);
     362  }
     363  
     364  unsigned char
     365  f55 (unsigned char x, unsigned int y)
     366  {
     367    return (x << ((-y) & (__CHAR_BIT__ - 1))) ^ (x >> y);
     368  }
     369  
     370  unsigned char
     371  f56 (unsigned char x, unsigned long int y)
     372  {
     373    return (x << ((-y) & (__CHAR_BIT__ - 1))) ^ (x >> y);
     374  }
     375  
     376  unsigned int
     377  f57 (unsigned int x, unsigned int y)
     378  {
     379    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> y);
     380  }
     381  
     382  unsigned int
     383  f58 (unsigned int x, unsigned long int y)
     384  {
     385    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> y);
     386  }
     387  
     388  unsigned int
     389  f59 (unsigned int x, int y __attribute__((unused)))
     390  {
     391    return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> 1);
     392  }
     393  
     394  unsigned int
     395  f60 (unsigned int x, int y __attribute__((unused)))
     396  {
     397    return (x << 1) ^ (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     398  }
     399  
     400  unsigned short int
     401  f61 (unsigned short int x, unsigned int y)
     402  {
     403    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x >> y);
     404  }
     405  
     406  unsigned short int
     407  f62 (unsigned short int x, unsigned long int y)
     408  {
     409    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x >> y);
     410  }
     411  
     412  unsigned char
     413  f63 (unsigned char x, unsigned int y)
     414  {
     415    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x >> y);
     416  }
     417  
     418  unsigned char
     419  f64 (unsigned char x, unsigned long int y)
     420  {
     421    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x >> y);
     422  }
     423  
     424  unsigned int
     425  f65 (unsigned int x, unsigned int y)
     426  {
     427    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     428  }
     429  
     430  unsigned int
     431  f66 (unsigned int x, unsigned long int y)
     432  {
     433    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     434  }
     435  
     436  unsigned int
     437  f67 (unsigned int x, int y __attribute__((unused)))
     438  {
     439    return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     440  }
     441  
     442  unsigned int
     443  f68 (unsigned int x, int y __attribute__((unused)))
     444  {
     445    return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> 1);
     446  }
     447  
     448  unsigned short int
     449  f69 (unsigned short int x, unsigned int y)
     450  {
     451    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
     452  }
     453  
     454  unsigned short int
     455  f70 (unsigned short int x, unsigned long int y)
     456  {
     457    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
     458  }
     459  
     460  unsigned char
     461  f71 (unsigned char x, unsigned int y)
     462  {
     463    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ - 1)));
     464  }
     465  
     466  unsigned char
     467  f72 (unsigned char x, unsigned long int y)
     468  {
     469    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ - 1)));
     470  }
     471  
     472  unsigned int
     473  f73 (unsigned int x, unsigned int y)
     474  {
     475    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     476  }
     477  
     478  unsigned int
     479  f74 (unsigned int x, unsigned long int y)
     480  {
     481    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     482  }
     483  
     484  unsigned int
     485  f75 (unsigned int x, int y __attribute__((unused)))
     486  {
     487    return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     488  }
     489  
     490  unsigned int
     491  f76 (unsigned int x, int y __attribute__((unused)))
     492  {
     493    return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> 1);
     494  }
     495  
     496  unsigned short int
     497  f77 (unsigned short int x, unsigned int y)
     498  {
     499    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
     500  }
     501  
     502  unsigned short int
     503  f78 (unsigned short int x, unsigned long int y)
     504  {
     505    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
     506  }
     507  
     508  unsigned char
     509  f79 (unsigned char x, unsigned int y)
     510  {
     511    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
     512  }
     513  
     514  unsigned char
     515  f80 (unsigned char x, unsigned long int y)
     516  {
     517    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
     518  }
     519  
     520  unsigned int
     521  f81 (unsigned int x, unsigned int y)
     522  {
     523    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> y);
     524  }
     525  
     526  unsigned int
     527  f82 (unsigned int x, unsigned long int y)
     528  {
     529    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> y);
     530  }
     531  
     532  unsigned int
     533  f83 (unsigned int x, int y __attribute__((unused)))
     534  {
     535    return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> 1);
     536  }
     537  
     538  unsigned int
     539  f84 (unsigned int x, int y __attribute__((unused)))
     540  {
     541    return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
     542  }
     543  
     544  unsigned short int
     545  f85 (unsigned short int x, unsigned int y)
     546  {
     547    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) + (x >> y);
     548  }
     549  
     550  unsigned short int
     551  f86 (unsigned short int x, unsigned long int y)
     552  {
     553    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) + (x >> y);
     554  }
     555  
     556  unsigned char
     557  f87 (unsigned char x, unsigned int y)
     558  {
     559    return (x << ((-y) & (__CHAR_BIT__ - 1))) + (x >> y);
     560  }
     561  
     562  unsigned char
     563  f88 (unsigned char x, unsigned long int y)
     564  {
     565    return (x << ((-y) & (__CHAR_BIT__ - 1))) + (x >> y);
     566  }
     567  
     568  unsigned int
     569  f89 (unsigned int x, unsigned int y)
     570  {
     571    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> y);
     572  }
     573  
     574  unsigned int
     575  f90 (unsigned int x, unsigned long int y)
     576  {
     577    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> y);
     578  }
     579  
     580  unsigned int
     581  f91 (unsigned int x, int y __attribute__((unused)))
     582  {
     583    return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> 1);
     584  }
     585  
     586  unsigned int
     587  f92 (unsigned int x, int y __attribute__((unused)))
     588  {
     589    return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
     590  }
     591  
     592  unsigned short int
     593  f93 (unsigned short int x, unsigned int y)
     594  {
     595    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) + (x >> y);
     596  }
     597  
     598  unsigned short int
     599  f94 (unsigned short int x, unsigned long int y)
     600  {
     601    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) + (x >> y);
     602  }
     603  
     604  unsigned char
     605  f95 (unsigned char x, unsigned int y)
     606  {
     607    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) + (x >> y);
     608  }
     609  
     610  unsigned char
     611  f96 (unsigned char x, unsigned long int y)
     612  {
     613    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) + (x >> y);
     614  }