From 7983023682f8287be4307e0a32221d1a9a5eeb7e Mon Sep 17 00:00:00 2001 From: "dcarney@chromium.org" Date: Mon, 9 Sep 2013 07:57:23 +0000 Subject: [PATCH] thread isolate for HConstant::handle R=svenpanne@chromium.org BUG= Review URL: https://codereview.chromium.org/24027004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16587 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/lithium-arm.h | 4 +++- src/arm/lithium-codegen-arm.cc | 12 ++++++------ src/hydrogen-instructions.cc | 11 ++++++----- src/hydrogen-instructions.h | 12 ++++++------ src/hydrogen.cc | 14 +++++++++----- src/ia32/lithium-codegen-ia32.cc | 8 ++++---- src/ia32/lithium-ia32.h | 4 +++- src/x64/lithium-codegen-x64.cc | 6 +++--- src/x64/lithium-x64.h | 4 +++- 9 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/arm/lithium-arm.h b/src/arm/lithium-arm.h index b68dbe7..f90f3c4 100644 --- a/src/arm/lithium-arm.h +++ b/src/arm/lithium-arm.h @@ -1284,7 +1284,9 @@ class LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> { DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") DECLARE_HYDROGEN_ACCESSOR(Constant) - Handle value() const { return hydrogen()->handle(); } + Handle value(Isolate* isolate) const { + return hydrogen()->handle(isolate); + } }; diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index bc34cfa..d880286 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -423,7 +423,7 @@ Register LCodeGen::EmitLoadRegister(LOperand* op, Register scratch) { } else if (op->IsConstantOperand()) { LConstantOperand* const_op = LConstantOperand::cast(op); HConstant* constant = chunk_->LookupConstant(const_op); - Handle literal = constant->handle(); + Handle literal = constant->handle(isolate()); Representation r = chunk_->LookupLiteralRepresentation(const_op); if (r.IsInteger32()) { ASSERT(literal->IsNumber()); @@ -458,7 +458,7 @@ DwVfpRegister LCodeGen::EmitLoadDoubleRegister(LOperand* op, } else if (op->IsConstantOperand()) { LConstantOperand* const_op = LConstantOperand::cast(op); HConstant* constant = chunk_->LookupConstant(const_op); - Handle literal = constant->handle(); + Handle literal = constant->handle(isolate()); Representation r = chunk_->LookupLiteralRepresentation(const_op); if (r.IsInteger32()) { ASSERT(literal->IsNumber()); @@ -486,7 +486,7 @@ DwVfpRegister LCodeGen::EmitLoadDoubleRegister(LOperand* op, Handle LCodeGen::ToHandle(LConstantOperand* op) const { HConstant* constant = chunk_->LookupConstant(op); ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged()); - return constant->handle(); + return constant->handle(isolate()); } @@ -543,7 +543,7 @@ Operand LCodeGen::ToOperand(LOperand* op) { Abort(kToOperandUnsupportedDoubleImmediate); } ASSERT(r.IsTagged()); - return Operand(constant->handle()); + return Operand(constant->handle(isolate())); } else if (op->IsRegister()) { return Operand(ToRegister(op)); } else if (op->IsDoubleRegister()) { @@ -690,7 +690,7 @@ void LCodeGen::AddToTranslation(LEnvironment* environment, translation->StoreDoubleRegister(reg); } else if (op->IsConstantOperand()) { HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op)); - int src_index = DefineDeoptimizationLiteral(constant->handle()); + int src_index = DefineDeoptimizationLiteral(constant->handle(isolate())); translation->StoreLiteral(src_index); } else { UNREACHABLE(); @@ -1869,7 +1869,7 @@ void LCodeGen::DoConstantE(LConstantE* instr) { void LCodeGen::DoConstantT(LConstantT* instr) { - Handle value = instr->value(); + Handle value = instr->value(isolate()); AllowDeferredHandleDereference smi_check; __ LoadObject(ToRegister(instr->result()), value); } diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc index cd8755a..2855e8a 100644 --- a/src/hydrogen-instructions.cc +++ b/src/hydrogen-instructions.cc @@ -2575,12 +2575,13 @@ Maybe HConstant::CopyToTruncatedInt32(Zone* zone) { Maybe HConstant::CopyToTruncatedNumber(Zone* zone) { HConstant* res = NULL; - if (handle()->IsBoolean()) { - res = handle()->BooleanValue() ? + Handle handle = this->handle(zone->isolate()); + if (handle->IsBoolean()) { + res = handle->BooleanValue() ? new(zone) HConstant(1) : new(zone) HConstant(0); - } else if (handle()->IsUndefined()) { + } else if (handle->IsUndefined()) { res = new(zone) HConstant(OS::nan_value()); - } else if (handle()->IsNull()) { + } else if (handle->IsNull()) { res = new(zone) HConstant(0); } return Maybe(res != NULL, res); @@ -2596,7 +2597,7 @@ void HConstant::PrintDataTo(StringStream* stream) { stream->Add("%p ", reinterpret_cast( external_reference_value_.address())); } else { - handle()->ShortPrint(stream); + handle(Isolate::Current())->ShortPrint(stream); } } diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h index a6d8915..6ef9bb7 100644 --- a/src/hydrogen-instructions.h +++ b/src/hydrogen-instructions.h @@ -3285,9 +3285,9 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> { return new_constant; } - Handle handle() { + Handle handle(Isolate* isolate) { if (handle_.is_null()) { - Factory* factory = Isolate::Current()->factory(); + Factory* factory = isolate->factory(); // Default arguments to is_not_in_new_space depend on this heap number // to be tenured so that it's guaranteed not be be located in new space. handle_ = factory->NewNumber(double_value_, TENURED); @@ -3298,7 +3298,7 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> { } bool HasMap(Handle map) { - Handle constant_object = handle(); + Handle constant_object = handle(map->GetIsolate()); return constant_object->IsHeapObject() && Handle::cast(constant_object)->map() == *map; } @@ -3358,7 +3358,6 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> { virtual bool EmitAtUses() V8_OVERRIDE; virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; - bool IsInteger() { return handle()->IsSmi(); } HConstant* CopyToRepresentation(Representation r, Zone* zone) const; Maybe CopyToTruncatedInt32(Zone* zone); Maybe CopyToTruncatedNumber(Zone* zone); @@ -6105,7 +6104,8 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { Handle transition_map() const { if (has_transition()) { - return Handle::cast(HConstant::cast(transition())->handle()); + return Handle::cast( + HConstant::cast(transition())->handle(Isolate::Current())); } else { return Handle(); } @@ -6113,7 +6113,7 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { void SetTransition(HConstant* map_constant, CompilationInfo* info) { ASSERT(!has_transition()); // Only set once. - Handle map = Handle::cast(map_constant->handle()); + Handle map = Handle::cast(map_constant->handle(info->isolate())); if (map->CanBeDeprecated()) { map->AddDependentCompilationInfo(DependentCode::kTransitionGroup, info); } diff --git a/src/hydrogen.cc b/src/hydrogen.cc index 3cbe1cb..437d29b 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -6885,7 +6885,8 @@ bool HOptimizedGraphBuilder::TryCallApply(Call* expr) { Handle known_function; if (function->IsConstant()) { HConstant* constant_function = HConstant::cast(function); - known_function = Handle::cast(constant_function->handle()); + known_function = Handle::cast( + constant_function->handle(isolate())); int args_count = arguments_count - 1; // Excluding receiver. if (TryInlineApply(known_function, expr, args_count)) return true; } @@ -7940,12 +7941,15 @@ void HOptimizedGraphBuilder::HandleLiteralCompareTypeof(CompareOperation* expr, } -static bool IsLiteralCompareBool(HValue* left, +static bool IsLiteralCompareBool(Isolate* isolate, + HValue* left, Token::Value op, HValue* right) { return op == Token::EQ_STRICT && - ((left->IsConstant() && HConstant::cast(left)->handle()->IsBoolean()) || - (right->IsConstant() && HConstant::cast(right)->handle()->IsBoolean())); + ((left->IsConstant() && + HConstant::cast(left)->handle(isolate)->IsBoolean()) || + (right->IsConstant() && + HConstant::cast(right)->handle(isolate)->IsBoolean())); } @@ -7997,7 +8001,7 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) { HValue* left = Pop(); Token::Value op = expr->op(); - if (IsLiteralCompareBool(left, op, right)) { + if (IsLiteralCompareBool(isolate(), left, op, right)) { HCompareObjectEqAndBranch* result = New(left, right); result->set_position(expr->position()); diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc index 75525ed..32c9f00 100644 --- a/src/ia32/lithium-codegen-ia32.cc +++ b/src/ia32/lithium-codegen-ia32.cc @@ -713,7 +713,7 @@ int32_t LCodeGen::ToRepresentation(LConstantOperand* op, Handle LCodeGen::ToHandle(LConstantOperand* op) const { HConstant* constant = chunk_->LookupConstant(op); ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged()); - return constant->handle(); + return constant->handle(isolate()); } @@ -876,7 +876,7 @@ void LCodeGen::AddToTranslation(LEnvironment* environment, translation->StoreDoubleRegister(reg); } else if (op->IsConstantOperand()) { HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op)); - int src_index = DefineDeoptimizationLiteral(constant->handle()); + int src_index = DefineDeoptimizationLiteral(constant->handle(isolate())); translation->StoreLiteral(src_index); } else { UNREACHABLE(); @@ -936,7 +936,7 @@ void LCodeGen::LoadContextFromDeferred(LOperand* context) { } else if (context->IsConstantOperand()) { HConstant* constant = chunk_->LookupConstant(LConstantOperand::cast(context)); - __ LoadObject(esi, Handle::cast(constant->handle())); + __ LoadObject(esi, Handle::cast(constant->handle(isolate()))); } else { UNREACHABLE(); } @@ -1943,7 +1943,7 @@ void LCodeGen::DoConstantE(LConstantE* instr) { void LCodeGen::DoConstantT(LConstantT* instr) { Register reg = ToRegister(instr->result()); - Handle handle = instr->value(); + Handle handle = instr->value(isolate()); AllowDeferredHandleDereference smi_check; __ LoadObject(reg, handle); } diff --git a/src/ia32/lithium-ia32.h b/src/ia32/lithium-ia32.h index 8b311b7..ab964af 100644 --- a/src/ia32/lithium-ia32.h +++ b/src/ia32/lithium-ia32.h @@ -1261,7 +1261,9 @@ class LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> { DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") DECLARE_HYDROGEN_ACCESSOR(Constant) - Handle value() const { return hydrogen()->handle(); } + Handle value(Isolate* isolate) const { + return hydrogen()->handle(isolate); + } }; diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc index fa2a632..f1430d7 100644 --- a/src/x64/lithium-codegen-x64.cc +++ b/src/x64/lithium-codegen-x64.cc @@ -450,7 +450,7 @@ ExternalReference LCodeGen::ToExternalReference(LConstantOperand* op) const { Handle LCodeGen::ToHandle(LConstantOperand* op) const { HConstant* constant = chunk_->LookupConstant(op); ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged()); - return constant->handle(); + return constant->handle(isolate()); } @@ -582,7 +582,7 @@ void LCodeGen::AddToTranslation(LEnvironment* environment, translation->StoreDoubleRegister(reg); } else if (op->IsConstantOperand()) { HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op)); - int src_index = DefineDeoptimizationLiteral(constant->handle()); + int src_index = DefineDeoptimizationLiteral(constant->handle(isolate())); translation->StoreLiteral(src_index); } else { UNREACHABLE(); @@ -1598,7 +1598,7 @@ void LCodeGen::DoConstantE(LConstantE* instr) { void LCodeGen::DoConstantT(LConstantT* instr) { - Handle value = instr->value(); + Handle value = instr->value(isolate()); AllowDeferredHandleDereference smi_check; __ LoadObject(ToRegister(instr->result()), value); } diff --git a/src/x64/lithium-x64.h b/src/x64/lithium-x64.h index e95713d..ff0c61b 100644 --- a/src/x64/lithium-x64.h +++ b/src/x64/lithium-x64.h @@ -1221,7 +1221,9 @@ class LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> { DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") DECLARE_HYDROGEN_ACCESSOR(Constant) - Handle value() const { return hydrogen()->handle(); } + Handle value(Isolate* isolate) const { + return hydrogen()->handle(isolate); + } }; -- 2.7.4