| Index: src/hydrogen-instructions.cc
|
| ===================================================================
|
| --- src/hydrogen-instructions.cc (revision 10404)
|
| +++ src/hydrogen-instructions.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright 2011 the V8 project authors. All rights reserved.
|
| +// Copyright 2012 the V8 project authors. All rights reserved.
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| // met:
|
| @@ -788,6 +788,29 @@
|
| }
|
|
|
|
|
| +HValue* HBitwise::Canonicalize() {
|
| + if (!representation().IsInteger32()) return this;
|
| + // If x is an int32, then x & -1 == x, x | 0 == x and x ^ 0 == x.
|
| + int32_t nop_constant = (op() == Token::BIT_AND) ? -1 : 0;
|
| + if (left()->IsConstant() &&
|
| + HConstant::cast(left())->HasInteger32Value() &&
|
| + HConstant::cast(left())->Integer32Value() == nop_constant) {
|
| + return right();
|
| + }
|
| + if (right()->IsConstant() &&
|
| + HConstant::cast(right())->HasInteger32Value() &&
|
| + HConstant::cast(right())->Integer32Value() == nop_constant) {
|
| + return left();
|
| + }
|
| + return this;
|
| +}
|
| +
|
| +
|
| +HValue* HChange::Canonicalize() {
|
| + return (from().Equals(to())) ? value() : this;
|
| +}
|
| +
|
| +
|
| void HTypeof::PrintDataTo(StringStream* stream) {
|
| value()->PrintNameTo(stream);
|
| }
|
|
|