Index: src/ia32/lithium-ia32.cc |
=================================================================== |
--- src/ia32/lithium-ia32.cc (revision 6282) |
+++ src/ia32/lithium-ia32.cc (working copy) |
@@ -957,22 +957,23 @@ |
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()); |
@@ -1013,7 +1014,6 @@ |
// We only need a temp register for non-strict compare. |
LOperand* temp = compare->is_strict() ? NULL : TempRegister(); |
return new LIsNullAndBranch(UseRegisterAtStart(compare->value()), |
- compare->is_strict(), |
temp, |
first_id, |
second_id); |
@@ -1379,17 +1379,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 ? eax : edx); |
LOperand* right = UseFixed(instr->right(), reversed ? edx : eax); |
@@ -1412,8 +1417,7 @@ |
ASSERT(instr->value()->representation().IsTagged()); |
LOperand* value = UseRegisterAtStart(instr->value()); |
- return DefineAsRegister(new LIsNull(value, |
- instr->is_strict())); |
+ return DefineAsRegister(new LIsNull(value)); |
} |