| Index: src/arm/lithium-arm.cc
|
| ===================================================================
|
| --- src/arm/lithium-arm.cc (revision 6282)
|
| +++ src/arm/lithium-arm.cc (working copy)
|
| @@ -945,22 +945,21 @@
|
| Token::Value op = compare->token();
|
| HValue* left = compare->left();
|
| HValue* right = compare->right();
|
| - if (left->representation().IsInteger32()) {
|
| + Representation r = compare->GetInputRepresentation();
|
| + if (r.IsInteger32()) {
|
| + ASSERT(left->representation().IsInteger32());
|
| ASSERT(right->representation().IsInteger32());
|
| - return new LCmpIDAndBranch(op,
|
| - UseRegisterAtStart(left),
|
| + return new LCmpIDAndBranch(UseRegisterAtStart(left),
|
| UseOrConstantAtStart(right),
|
| first_id,
|
| - second_id,
|
| - false);
|
| - } else if (left->representation().IsDouble()) {
|
| + second_id);
|
| + } else if (r.IsDouble()) {
|
| + ASSERT(left->representation().IsDouble());
|
| ASSERT(right->representation().IsDouble());
|
| - return new LCmpIDAndBranch(op,
|
| - UseRegisterAtStart(left),
|
| + return new LCmpIDAndBranch(UseRegisterAtStart(left),
|
| UseRegisterAtStart(right),
|
| first_id,
|
| - second_id,
|
| - true);
|
| + second_id);
|
| } else {
|
| ASSERT(left->representation().IsTagged());
|
| ASSERT(right->representation().IsTagged());
|
| @@ -998,7 +997,6 @@
|
| ASSERT(compare->value()->representation().IsTagged());
|
|
|
| return new LIsNullAndBranch(UseRegisterAtStart(compare->value()),
|
| - compare->is_strict(),
|
| first_id,
|
| second_id);
|
| } else if (v->IsIsObject()) {
|
| @@ -1350,17 +1348,22 @@
|
|
|
| LInstruction* LChunkBuilder::DoCompare(HCompare* instr) {
|
| Token::Value op = instr->token();
|
| - if (instr->left()->representation().IsInteger32()) {
|
| + Representation r = instr->GetInputRepresentation();
|
| + if (r.IsInteger32()) {
|
| + ASSERT(instr->left()->representation().IsInteger32());
|
| ASSERT(instr->right()->representation().IsInteger32());
|
| LOperand* left = UseRegisterAtStart(instr->left());
|
| LOperand* right = UseOrConstantAtStart(instr->right());
|
| - return DefineAsRegister(new LCmpID(op, left, right, false));
|
| - } else if (instr->left()->representation().IsDouble()) {
|
| + return DefineAsRegister(new LCmpID(left, right));
|
| + } else if (r.IsDouble()) {
|
| + ASSERT(instr->left()->representation().IsDouble());
|
| ASSERT(instr->right()->representation().IsDouble());
|
| LOperand* left = UseRegisterAtStart(instr->left());
|
| LOperand* right = UseRegisterAtStart(instr->right());
|
| - return DefineAsRegister(new LCmpID(op, left, right, true));
|
| + return DefineAsRegister(new LCmpID(left, right));
|
| } else {
|
| + ASSERT(instr->left()->representation().IsTagged());
|
| + ASSERT(instr->right()->representation().IsTagged());
|
| bool reversed = (op == Token::GT || op == Token::LTE);
|
| LOperand* left = UseFixed(instr->left(), reversed ? r0 : r1);
|
| LOperand* right = UseFixed(instr->right(), reversed ? r1 : r0);
|
| @@ -1383,8 +1386,7 @@
|
| ASSERT(instr->value()->representation().IsTagged());
|
| LOperand* value = UseRegisterAtStart(instr->value());
|
|
|
| - return DefineAsRegister(new LIsNull(value,
|
| - instr->is_strict()));
|
| + return DefineAsRegister(new LIsNull(value));
|
| }
|
|
|
|
|
|
|