OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 } | 863 } |
864 if (right()->IsConstant() && | 864 if (right()->IsConstant() && |
865 HConstant::cast(right())->HasInteger32Value() && | 865 HConstant::cast(right())->HasInteger32Value() && |
866 HConstant::cast(right())->Integer32Value() == nop_constant) { | 866 HConstant::cast(right())->Integer32Value() == nop_constant) { |
867 return left(); | 867 return left(); |
868 } | 868 } |
869 return this; | 869 return this; |
870 } | 870 } |
871 | 871 |
872 | 872 |
| 873 HValue* HBitNot::Canonicalize() { |
| 874 // Optimize ~~x, a common pattern used for ToInt32(x). |
| 875 if (value()->IsBitNot()) { |
| 876 HValue* result = HBitNot::cast(value())->value(); |
| 877 ASSERT(result->representation().IsInteger32()); |
| 878 return result; |
| 879 } |
| 880 return this; |
| 881 } |
| 882 |
| 883 |
873 HValue* HAdd::Canonicalize() { | 884 HValue* HAdd::Canonicalize() { |
874 if (!representation().IsInteger32()) return this; | 885 if (!representation().IsInteger32()) return this; |
875 if (CheckUsesForFlag(kTruncatingToInt32)) ClearFlag(kCanOverflow); | 886 if (CheckUsesForFlag(kTruncatingToInt32)) ClearFlag(kCanOverflow); |
876 return this; | 887 return this; |
877 } | 888 } |
878 | 889 |
879 | 890 |
880 HValue* HSub::Canonicalize() { | 891 HValue* HSub::Canonicalize() { |
881 if (!representation().IsInteger32()) return this; | 892 if (!representation().IsInteger32()) return this; |
882 if (CheckUsesForFlag(kTruncatingToInt32)) ClearFlag(kCanOverflow); | 893 if (CheckUsesForFlag(kTruncatingToInt32)) ClearFlag(kCanOverflow); |
(...skipping 1476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2359 | 2370 |
2360 | 2371 |
2361 void HCheckPrototypeMaps::Verify() { | 2372 void HCheckPrototypeMaps::Verify() { |
2362 HInstruction::Verify(); | 2373 HInstruction::Verify(); |
2363 ASSERT(HasNoUses()); | 2374 ASSERT(HasNoUses()); |
2364 } | 2375 } |
2365 | 2376 |
2366 #endif | 2377 #endif |
2367 | 2378 |
2368 } } // namespace v8::internal | 2379 } } // namespace v8::internal |
OLD | NEW |