1  /* Check that the rotr and rotl instructions are generated.  */
       2  /* { dg-do compile }  */
       3  /* { dg-options "-O1" } */
       4  /* { dg-final { scan-assembler-times "rotr" 2 } } */
       5  /* { dg-final { scan-assembler-times "rotl" 3 } } */
       6  
       7  int
       8  test_00 (int a)
       9  {
      10    return (a << 1) | ((a >> 31) & 1);
      11  }
      12  
      13  int
      14  test_01 (int a)
      15  {
      16    return (a << 1) | ((unsigned int)a >> 31);
      17  }
      18  
      19  int
      20  test_02 (int a)
      21  {
      22    return ((unsigned int)a >> 1) | (a << 31);
      23  }
      24  
      25  int
      26  test_03 (int a)
      27  {
      28    return ((a >> 1) & 0x7FFFFFFF) | (a << 31);
      29  }
      30  
      31  int
      32  test_04 (int a)
      33  {
      34    return a + a + ((a >> 31) & 1);
      35  }