| Index: src/ia32/lithium-ia32.cc
|
| diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc
|
| index ba225eff8aacbd27de0b688bc06b35d6c9846cbf..0800823fdb3e2401d9cda7c6d34eb26fa7f1500a 100644
|
| --- a/src/ia32/lithium-ia32.cc
|
| +++ b/src/ia32/lithium-ia32.cc
|
| @@ -561,29 +561,34 @@ LOperand* LChunkBuilder::UseAtStart(HValue* value) {
|
| }
|
|
|
|
|
| +static inline bool CanBeImmediateConstant(HValue* value) {
|
| + return value->IsConstant() && HConstant::cast(value)->NotInNewSpace();
|
| +}
|
| +
|
| +
|
| LOperand* LChunkBuilder::UseOrConstant(HValue* value) {
|
| - return value->IsConstant()
|
| + return CanBeImmediateConstant(value)
|
| ? chunk_->DefineConstantOperand(HConstant::cast(value))
|
| : Use(value);
|
| }
|
|
|
|
|
| LOperand* LChunkBuilder::UseOrConstantAtStart(HValue* value) {
|
| - return value->IsConstant()
|
| + return CanBeImmediateConstant(value)
|
| ? chunk_->DefineConstantOperand(HConstant::cast(value))
|
| : UseAtStart(value);
|
| }
|
|
|
|
|
| LOperand* LChunkBuilder::UseRegisterOrConstant(HValue* value) {
|
| - return value->IsConstant()
|
| + return CanBeImmediateConstant(value)
|
| ? chunk_->DefineConstantOperand(HConstant::cast(value))
|
| : UseRegister(value);
|
| }
|
|
|
|
|
| LOperand* LChunkBuilder::UseRegisterOrConstantAtStart(HValue* value) {
|
| - return value->IsConstant()
|
| + return CanBeImmediateConstant(value)
|
| ? chunk_->DefineConstantOperand(HConstant::cast(value))
|
| : UseRegisterAtStart(value);
|
| }
|
| @@ -708,7 +713,7 @@ LInstruction* LChunkBuilder::MarkAsCall(LInstruction* instr,
|
|
|
| LInstruction* LChunkBuilder::AssignPointerMap(LInstruction* instr) {
|
| ASSERT(!instr->HasPointerMap());
|
| - instr->set_pointer_map(new(zone()) LPointerMap(position_, zone()));
|
| + instr->set_pointer_map(new(zone()) LPointerMap(zone()));
|
| return instr;
|
| }
|
|
|
| @@ -908,7 +913,6 @@ void LChunkBuilder::DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block) {
|
| void LChunkBuilder::VisitInstruction(HInstruction* current) {
|
| HInstruction* old_current = current_instruction_;
|
| current_instruction_ = current;
|
| - if (current->has_position()) position_ = current->position();
|
|
|
| LInstruction* instr = NULL;
|
| if (current->CanReplaceWithDummyUses()) {
|
| @@ -963,7 +967,6 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) {
|
| }
|
| #endif
|
|
|
| - instr->set_position(position_);
|
| if (FLAG_stress_pointer_maps && !instr->HasPointerMap()) {
|
| instr = AssignPointerMap(instr);
|
| }
|
| @@ -1926,7 +1929,6 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
|
| // building a stack frame.
|
| if (from.IsTagged()) {
|
| if (to.IsDouble()) {
|
| - info()->MarkAsDeferredCalling();
|
| LOperand* value = UseRegister(instr->value());
|
| // Temp register only necessary for minus zero check.
|
| LOperand* temp = TempRegister();
|
|
|