1 /* PR tree-optimization/9814 */ 2 /* { dg-do run } */ 3 /* { dg-options "-O2" } */ 4 5 extern void abort(void); 6 test1(int x)7int test1(int x) 8 { 9 if (x & 2) 10 x |= 2; 11 return x; 12 } 13 test2(int x)14int test2(int x) 15 { 16 if (!(x & 2)) 17 x |= 2; 18 return x; 19 } 20 test3(int x)21int test3(int x) 22 { 23 if (x & 2) 24 x ^= 2; 25 return x; 26 } 27 test4(int x)28int test4(int x) 29 { 30 if (!(x & 2)) 31 x ^= 2; 32 return x; 33 } 34 test5(int x)35int test5(int x) 36 { 37 if (x & 2) 38 x &= ~2; 39 return x; 40 } 41 test6(int x)42int test6(int x) 43 { 44 if (!(x & 2)) 45 x &= ~2; 46 return x; 47 } 48 main()49int main() 50 { 51 if (test1(0) != 0) 52 abort(); 53 if (test1(2) != 2) 54 abort(); 55 if (test1(5) != 5) 56 abort(); 57 if (test1(7) != 7) 58 abort(); 59 60 if (test2(0) != 2) 61 abort(); 62 if (test2(2) != 2) 63 abort(); 64 if (test2(5) != 7) 65 abort(); 66 if (test2(7) != 7) 67 abort(); 68 69 if (test3(0) != 0) 70 abort(); 71 if (test3(2) != 0) 72 abort(); 73 if (test3(5) != 5) 74 abort(); 75 if (test3(7) != 5) 76 abort(); 77 78 if (test4(0) != 2) 79 abort(); 80 if (test4(2) != 2) 81 abort(); 82 if (test4(5) != 7) 83 abort(); 84 if (test4(7) != 7) 85 abort(); 86 87 if (test5(0) != 0) 88 abort(); 89 if (test5(2) != 0) 90 abort(); 91 if (test5(5) != 5) 92 abort(); 93 if (test5(7) != 5) 94 abort(); 95 96 if (test6(0) != 0) 97 abort(); 98 if (test6(2) != 2) 99 abort(); 100 if (test6(5) != 5) 101 abort(); 102 if (test6(7) != 7) 103 abort(); 104 105 return 0; 106 } 107 108