1  /* { dg-do compile } */
       2  /* { dg-options "-O1 -fdump-tree-sccp-details" } */
       3  /* { dg-final { scan-tree-dump-times {final value replacement} 12 "sccp" } } */
       4  
       5  unsigned short
       6  __attribute__((noipa))
       7  foo (unsigned short tmp)
       8  {
       9    for (int bit = 0; bit < 16; bit += 3)
      10      tmp &= ~(1U << bit);
      11    return tmp;
      12  }
      13  
      14  unsigned short
      15  __attribute__((noipa))
      16  foo1 (unsigned short tmp)
      17  {
      18    for (int bit = 15; bit >= 0; bit -= 3)
      19      tmp &= ~(1U << bit);
      20    return tmp;
      21  }
      22  
      23  unsigned short
      24  __attribute__((noipa))
      25  foo2 (unsigned short tmp)
      26  {
      27    for (int bit = 0; bit < 16; bit += 3)
      28      tmp &= (1U << bit);
      29    return tmp;
      30  }
      31  
      32  unsigned short
      33  __attribute__((noipa))
      34  foo3 (unsigned short tmp)
      35  {
      36    for (int bit = 15; bit >= 0; bit -= 3)
      37      tmp &= (1U << bit);
      38    return tmp;
      39  }
      40  
      41  unsigned short
      42  __attribute__((noipa))
      43  foo4 (unsigned short tmp)
      44  {
      45    for (int bit = 0; bit < 16; bit += 3)
      46      tmp |= ~(1U << bit);
      47    return tmp;
      48  }
      49  
      50  unsigned short
      51  __attribute__((noipa))
      52  foo5 (unsigned short tmp)
      53  {
      54    for (int bit = 15; bit >= 0; bit -= 3)
      55      tmp |= ~(1U << bit);
      56    return tmp;
      57  }
      58  
      59  unsigned short
      60  __attribute__((noipa))
      61  foo6 (unsigned short tmp)
      62  {
      63    for (int bit = 0; bit < 16; bit += 3)
      64      tmp |= (1U << bit);
      65    return tmp;
      66  }
      67  
      68  unsigned short
      69  __attribute__((noipa))
      70  foo7 (unsigned short tmp)
      71  {
      72    for (int bit = 15; bit >= 0; bit -= 3)
      73      tmp |= (1U << bit);
      74    return tmp;
      75  }
      76  
      77  unsigned short
      78  __attribute__((noipa))
      79  foo8 (unsigned short tmp)
      80  {
      81    for (int bit = 0; bit < 16; bit += 3)
      82      tmp ^= ~(1U << bit);
      83    return tmp;
      84  }
      85  
      86  unsigned short
      87  __attribute__((noipa))
      88  foo9 (unsigned short tmp)
      89  {
      90    for (int bit = 15; bit >= 0; bit -= 3)
      91      tmp ^= ~(1U << bit);
      92    return tmp;
      93  }
      94  
      95  unsigned short
      96  __attribute__((noipa))
      97  foo10 (unsigned short tmp)
      98  {
      99    for (int bit = 0; bit < 16; bit += 3)
     100      tmp ^= (1U << bit);
     101    return tmp;
     102  }
     103  
     104  unsigned short
     105  __attribute__((noipa))
     106  foo11 (unsigned short tmp)
     107  {
     108    for (int bit = 15; bit >= 0; bit -= 3)
     109      tmp ^= (1U << bit);
     110    return tmp;
     111  }