1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fdump-tree-forwprop3" } */
       3  
       4  unsigned short
       5  test1 (unsigned short a)
       6  {
       7    a ^= 0x4002;
       8    a >>= 1;
       9    a |= 0x8000; /* Simplify to ((a >> 1) ^ 0xa001).  */
      10    return a;
      11  }
      12  /* { dg-final { scan-tree-dump "\\^ 40961" "forwprop3" } } */
      13  
      14  unsigned short
      15  test2 (unsigned short a)
      16  {
      17    a |= 0x4002;
      18    a <<= 1;
      19    a ^= 0x0001; /* Simplify to ((a << 1) | 0x8005).  */
      20    return a;
      21  }
      22  /* { dg-final { scan-tree-dump "\\| 32773" "forwprop3" } } */
      23  
      24  unsigned short
      25  test3 (unsigned short a)
      26  {
      27    a &= 0xd123;
      28    a ^= 0x6040;
      29    a |= 0xc031; /* Simplify to ((a & 0xd123) | 0xe071).  */
      30    return a;
      31  }
      32  /* { dg-final { scan-tree-dump "\\| 57457" "forwprop3" } } */
      33  
      34  unsigned short
      35  test4 (unsigned short a)
      36  {
      37    a ^= 0x8002;
      38    a >>= 1;
      39    a |= 0x8000;
      40    return a;
      41  }
      42  /* { dg-final { scan-tree-dump "\\^ 49153" "forwprop3" } } */
      43  
      44  unsigned short
      45  test5 (unsigned short a)
      46  {
      47    a ^= 0x8002;
      48    a >>= 1;
      49    a |= 0x8001; /* Only move shift inward: (((a >> 1) ^ 0x4001) | 0x8001).  */
      50    return a;
      51  }
      52  /* { dg-final { scan-tree-dump "\\^ 16385" "forwprop3" } } */
      53  /* { dg-final { scan-tree-dump "\\| 32769" "forwprop3" } } */
      54  
      55  short
      56  test6 (short a)
      57  {
      58    a &= 0x7fff;
      59    a >>= 2;
      60    return a;
      61  }
      62  /* { dg-final { scan-tree-dump "\\& 8191" "forwprop3" } } */
      63  
      64  short
      65  test7 (short a)
      66  {
      67    a &= 0x8fff;
      68    a >>= 2;
      69    return a;
      70  }
      71  /* { dg-final { scan-tree-dump "\\& -7169" "forwprop3" } } */