From: svenpanne Date: Fri, 6 Mar 2015 11:01:43 +0000 (-0800) Subject: Merged INLINE_OPTIMIZED intrinsic type into INLINE. X-Git-Tag: upstream/4.7.83~4001 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e7acce180af72bac21db2a6f8d1a1d92d207579;p=platform%2Fupstream%2Fv8.git Merged INLINE_OPTIMIZED intrinsic type into INLINE. BUG=v8:3947 LOG=n Review URL: https://codereview.chromium.org/978123003 Cr-Commit-Position: refs/heads/master@{#27039} --- diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc index 78161fb..477222e 100644 --- a/src/arm/full-codegen-arm.cc +++ b/src/arm/full-codegen-arm.cc @@ -4605,10 +4605,10 @@ void FullCodeGenerator::EmitDebugIsActive(CallRuntime* expr) { void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { - if (expr->function() != NULL && - expr->function()->intrinsic_type == Runtime::INLINE) { + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); + if (generator != nullptr) { Comment cmnt(masm_, "[ InlineRuntimeCall"); - EmitInlineRuntimeCall(expr); + EmitInlineRuntimeCall(expr, generator); return; } diff --git a/src/arm64/full-codegen-arm64.cc b/src/arm64/full-codegen-arm64.cc index 95f7fae..11355bb 100644 --- a/src/arm64/full-codegen-arm64.cc +++ b/src/arm64/full-codegen-arm64.cc @@ -4295,10 +4295,10 @@ void FullCodeGenerator::EmitDebugIsActive(CallRuntime* expr) { void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { - if (expr->function() != NULL && - expr->function()->intrinsic_type == Runtime::INLINE) { + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); + if (generator != nullptr) { Comment cmnt(masm_, "[ InlineRuntimeCall"); - EmitInlineRuntimeCall(expr); + EmitInlineRuntimeCall(expr, generator); return; } diff --git a/src/compiler/js-intrinsic-lowering.cc b/src/compiler/js-intrinsic-lowering.cc index 0d3b3e6..a1d70a4 100644 --- a/src/compiler/js-intrinsic-lowering.cc +++ b/src/compiler/js-intrinsic-lowering.cc @@ -31,12 +31,12 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) { return ReduceInlineIsInstanceType(node, JS_ARRAY_TYPE); case Runtime::kInlineIsFunction: return ReduceInlineIsInstanceType(node, JS_FUNCTION_TYPE); - case Runtime::kInlineOptimizedConstructDouble: - return ReduceInlineOptimizedConstructDouble(node); - case Runtime::kInlineOptimizedDoubleLo: - return ReduceInlineOptimizedDoubleLo(node); - case Runtime::kInlineOptimizedDoubleHi: - return ReduceInlineOptimizedDoubleHi(node); + case Runtime::kInlineConstructDouble: + return ReduceInlineConstructDouble(node); + case Runtime::kInlineDoubleLo: + return ReduceInlineDoubleLo(node); + case Runtime::kInlineDoubleHi: + return ReduceInlineDoubleHi(node); case Runtime::kInlineIsRegExp: return ReduceInlineIsInstanceType(node, JS_REGEXP_TYPE); case Runtime::kInlineValueOf: @@ -98,8 +98,7 @@ Reduction JSIntrinsicLowering::ReduceInlineIsNonNegativeSmi(Node* node) { } -Reduction JSIntrinsicLowering::ReduceInlineOptimizedConstructDouble( - Node* node) { +Reduction JSIntrinsicLowering::ReduceInlineConstructDouble(Node* node) { Node* high = NodeProperties::GetValueInput(node, 0); Node* low = NodeProperties::GetValueInput(node, 1); Node* value = @@ -112,12 +111,12 @@ Reduction JSIntrinsicLowering::ReduceInlineOptimizedConstructDouble( } -Reduction JSIntrinsicLowering::ReduceInlineOptimizedDoubleLo(Node* node) { +Reduction JSIntrinsicLowering::ReduceInlineDoubleLo(Node* node) { return Change(node, machine()->Float64ExtractLowWord32()); } -Reduction JSIntrinsicLowering::ReduceInlineOptimizedDoubleHi(Node* node) { +Reduction JSIntrinsicLowering::ReduceInlineDoubleHi(Node* node) { return Change(node, machine()->Float64ExtractHighWord32()); } diff --git a/src/compiler/js-intrinsic-lowering.h b/src/compiler/js-intrinsic-lowering.h index d728c27..2ef02a1 100644 --- a/src/compiler/js-intrinsic-lowering.h +++ b/src/compiler/js-intrinsic-lowering.h @@ -31,9 +31,9 @@ class JSIntrinsicLowering FINAL : public Reducer { Reduction ReduceInlineIsSmi(Node* node); Reduction ReduceInlineIsNonNegativeSmi(Node* node); Reduction ReduceInlineIsInstanceType(Node* node, InstanceType instance_type); - Reduction ReduceInlineOptimizedConstructDouble(Node* node); - Reduction ReduceInlineOptimizedDoubleLo(Node* node); - Reduction ReduceInlineOptimizedDoubleHi(Node* node); + Reduction ReduceInlineConstructDouble(Node* node); + Reduction ReduceInlineDoubleLo(Node* node); + Reduction ReduceInlineDoubleHi(Node* node); Reduction ReduceInlineValueOf(Node* node); Reduction Change(Node* node, const Operator* op); diff --git a/src/compiler/linkage.cc b/src/compiler/linkage.cc index 089b287..8f3f61d 100644 --- a/src/compiler/linkage.cc +++ b/src/compiler/linkage.cc @@ -129,7 +129,7 @@ bool Linkage::NeedsFrameState(Runtime::FunctionId function) { case Runtime::kInlineArguments: case Runtime::kInlineCallFunction: case Runtime::kInlineDateField: - case Runtime::kInlineOptimizedGetPrototype: + case Runtime::kInlineGetPrototype: case Runtime::kInlineRegExpExec: return true; default: diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc index e11730e..c638535 100644 --- a/src/compiler/typer.cc +++ b/src/compiler/typer.cc @@ -1506,10 +1506,10 @@ Bounds Typer::Visitor::TypeJSCallRuntime(Node* node) { case Runtime::kInlineIsFunction: case Runtime::kInlineIsRegExp: return Bounds(Type::None(zone()), Type::Boolean(zone())); - case Runtime::kInlineOptimizedDoubleLo: - case Runtime::kInlineOptimizedDoubleHi: + case Runtime::kInlineDoubleLo: + case Runtime::kInlineDoubleHi: return Bounds(Type::None(zone()), Type::Signed32()); - case Runtime::kInlineOptimizedConstructDouble: + case Runtime::kInlineConstructDouble: return Bounds(Type::None(zone()), Type::Number()); default: break; diff --git a/src/full-codegen.cc b/src/full-codegen.cc index 6f2317c..8721bcd 100644 --- a/src/full-codegen.cc +++ b/src/full-codegen.cc @@ -895,22 +895,23 @@ const FullCodeGenerator::InlineFunctionGenerator FullCodeGenerator::InlineFunctionGenerator - FullCodeGenerator::FindInlineFunctionGenerator(Runtime::FunctionId id) { - int lookup_index = - static_cast(id) - static_cast(Runtime::kFirstInlineFunction); - DCHECK(lookup_index >= 0); - DCHECK(static_cast(lookup_index) < - arraysize(kInlineFunctionGenerators)); - return kInlineFunctionGenerators[lookup_index]; +FullCodeGenerator::FindInlineFunctionGenerator(CallRuntime* expr) { + const Runtime::Function* function = expr->function(); + if (function == nullptr || function->intrinsic_type != Runtime::INLINE) { + return nullptr; + } + Runtime::FunctionId id = function->function_id; + if (id < Runtime::kFirstInlineFunction || Runtime::kLastInlineFunction < id) { + return nullptr; + } + return kInlineFunctionGenerators[static_cast(id) - + static_cast( + Runtime::kFirstInlineFunction)]; } -void FullCodeGenerator::EmitInlineRuntimeCall(CallRuntime* expr) { - const Runtime::Function* function = expr->function(); - DCHECK(function != NULL); - DCHECK(function->intrinsic_type == Runtime::INLINE); - InlineFunctionGenerator generator = - FindInlineFunctionGenerator(function->function_id); +void FullCodeGenerator::EmitInlineRuntimeCall( + CallRuntime* expr, InlineFunctionGenerator generator) { ((*this).*(generator))(expr); } diff --git a/src/full-codegen.h b/src/full-codegen.h index 42f2b2c..e78535f 100644 --- a/src/full-codegen.h +++ b/src/full-codegen.h @@ -496,9 +496,10 @@ class FullCodeGenerator: public AstVisitor { void EmitKeyedSuperCallWithLoadIC(Call* expr); // Platform-specific code for inline runtime calls. - InlineFunctionGenerator FindInlineFunctionGenerator(Runtime::FunctionId id); + InlineFunctionGenerator FindInlineFunctionGenerator(CallRuntime* expr); - void EmitInlineRuntimeCall(CallRuntime* expr); + void EmitInlineRuntimeCall(CallRuntime* expr, + InlineFunctionGenerator generator); #define EMIT_INLINE_RUNTIME_CALL(name, x, y) \ void Emit##name(CallRuntime* expr); diff --git a/src/hydrogen.cc b/src/hydrogen.cc index d74942f..d735a6b 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -9916,8 +9916,7 @@ void HOptimizedGraphBuilder::VisitCallRuntime(CallRuntime* expr) { const Runtime::Function* function = expr->function(); DCHECK(function != NULL); - if (function->intrinsic_type == Runtime::INLINE || - function->intrinsic_type == Runtime::INLINE_OPTIMIZED) { + if (function->intrinsic_type == Runtime::INLINE) { DCHECK(expr->name()->length() > 0); DCHECK(expr->name()->Get(0) == '_'); // Call to an inline function. diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc index 8ef6ff3..8a7e847 100644 --- a/src/ia32/full-codegen-ia32.cc +++ b/src/ia32/full-codegen-ia32.cc @@ -4530,10 +4530,10 @@ void FullCodeGenerator::EmitDebugIsActive(CallRuntime* expr) { void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { - if (expr->function() != NULL && - expr->function()->intrinsic_type == Runtime::INLINE) { + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); + if (generator != nullptr) { Comment cmnt(masm_, "[ InlineRuntimeCall"); - EmitInlineRuntimeCall(expr); + EmitInlineRuntimeCall(expr, generator); return; } diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc index 71f71cd..9a0466d 100644 --- a/src/mips/full-codegen-mips.cc +++ b/src/mips/full-codegen-mips.cc @@ -4613,10 +4613,10 @@ void FullCodeGenerator::EmitDebugIsActive(CallRuntime* expr) { void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { - if (expr->function() != NULL && - expr->function()->intrinsic_type == Runtime::INLINE) { + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); + if (generator != nullptr) { Comment cmnt(masm_, "[ InlineRuntimeCall"); - EmitInlineRuntimeCall(expr); + EmitInlineRuntimeCall(expr, generator); return; } diff --git a/src/mips64/full-codegen-mips64.cc b/src/mips64/full-codegen-mips64.cc index c58788e..510bf17 100644 --- a/src/mips64/full-codegen-mips64.cc +++ b/src/mips64/full-codegen-mips64.cc @@ -4616,10 +4616,10 @@ void FullCodeGenerator::EmitDebugIsActive(CallRuntime* expr) { void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { - if (expr->function() != NULL && - expr->function()->intrinsic_type == Runtime::INLINE) { + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); + if (generator != nullptr) { Comment cmnt(masm_, "[ InlineRuntimeCall"); - EmitInlineRuntimeCall(expr); + EmitInlineRuntimeCall(expr, generator); return; } diff --git a/src/ppc/full-codegen-ppc.cc b/src/ppc/full-codegen-ppc.cc index 326857d..5864928 100644 --- a/src/ppc/full-codegen-ppc.cc +++ b/src/ppc/full-codegen-ppc.cc @@ -4590,10 +4590,10 @@ void FullCodeGenerator::EmitDebugIsActive(CallRuntime* expr) { void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { - if (expr->function() != NULL && - expr->function()->intrinsic_type == Runtime::INLINE) { + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); + if (generator != nullptr) { Comment cmnt(masm_, "[ InlineRuntimeCall"); - EmitInlineRuntimeCall(expr); + EmitInlineRuntimeCall(expr, generator); return; } diff --git a/src/runtime/runtime.cc b/src/runtime/runtime.cc index 6222cb4..9ec3f4c 100644 --- a/src/runtime/runtime.cc +++ b/src/runtime/runtime.cc @@ -47,19 +47,10 @@ INLINE_FUNCTION_LIST(F) , -#define IO(name, number_of_args, result_size) \ - { \ - Runtime::kInlineOptimized##name, Runtime::INLINE_OPTIMIZED, "_" #name, \ - FUNCTION_ADDR(Runtime_##name), number_of_args, result_size \ - } \ - , - - static const Runtime::Function kIntrinsicFunctions[] = { RUNTIME_FUNCTION_LIST(F) INLINE_OPTIMIZED_FUNCTION_LIST(F) - INLINE_FUNCTION_LIST(I) INLINE_OPTIMIZED_FUNCTION_LIST(IO)}; + INLINE_FUNCTION_LIST(I) INLINE_OPTIMIZED_FUNCTION_LIST(I)}; -#undef IO #undef I #undef F diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h index 3c16fa5..4a036fd 100644 --- a/src/runtime/runtime.h +++ b/src/runtime/runtime.h @@ -772,16 +772,15 @@ class Runtime : public AllStatic { RUNTIME_FUNCTION_LIST(F) INLINE_OPTIMIZED_FUNCTION_LIST(F) #undef F #define F(name, nargs, ressize) kInline##name, - INLINE_FUNCTION_LIST(F) + INLINE_FUNCTION_LIST(F) INLINE_OPTIMIZED_FUNCTION_LIST(F) #undef F -#define F(name, nargs, ressize) kInlineOptimized##name, - INLINE_OPTIMIZED_FUNCTION_LIST(F) -#undef F - kNumFunctions, - kFirstInlineFunction = kInlineIsSmi + kNumFunctions, + // TODO(svenpanne) The values below are cruel hacks, remove them! + kFirstInlineFunction = kInlineIsSmi, + kLastInlineFunction = kInlineDebugIsActive }; - enum IntrinsicType { RUNTIME, INLINE, INLINE_OPTIMIZED }; + enum IntrinsicType { RUNTIME, INLINE }; // Intrinsic function descriptor. struct Function { diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc index 1da93d6..d553fb8 100644 --- a/src/x64/full-codegen-x64.cc +++ b/src/x64/full-codegen-x64.cc @@ -4554,10 +4554,10 @@ void FullCodeGenerator::EmitDebugIsActive(CallRuntime* expr) { void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { - if (expr->function() != NULL && - expr->function()->intrinsic_type == Runtime::INLINE) { + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); + if (generator != nullptr) { Comment cmnt(masm_, "[ InlineRuntimeCall"); - EmitInlineRuntimeCall(expr); + EmitInlineRuntimeCall(expr, generator); return; } diff --git a/src/x87/full-codegen-x87.cc b/src/x87/full-codegen-x87.cc index 8a92bfd..155c0f2 100644 --- a/src/x87/full-codegen-x87.cc +++ b/src/x87/full-codegen-x87.cc @@ -4495,10 +4495,10 @@ void FullCodeGenerator::EmitDebugIsActive(CallRuntime* expr) { void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { - if (expr->function() != NULL && - expr->function()->intrinsic_type == Runtime::INLINE) { + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); + if (generator != nullptr) { Comment cmnt(masm_, "[ InlineRuntimeCall"); - EmitInlineRuntimeCall(expr); + EmitInlineRuntimeCall(expr, generator); return; } diff --git a/test/unittests/compiler/js-intrinsic-lowering-unittest.cc b/test/unittests/compiler/js-intrinsic-lowering-unittest.cc index 7060a90..1b8a87e 100644 --- a/test/unittests/compiler/js-intrinsic-lowering-unittest.cc +++ b/test/unittests/compiler/js-intrinsic-lowering-unittest.cc @@ -52,8 +52,8 @@ TEST_F(JSIntrinsicLoweringTest, InlineOptimizedConstructDouble) { Node* const effect = graph()->start(); Node* const control = graph()->start(); Reduction const r = Reduce(graph()->NewNode( - javascript()->CallRuntime(Runtime::kInlineOptimizedConstructDouble, 2), - input0, input1, context, effect, control)); + javascript()->CallRuntime(Runtime::kInlineConstructDouble, 2), input0, + input1, context, effect, control)); ASSERT_TRUE(r.Changed()); EXPECT_THAT(r.replacement(), IsFloat64InsertHighWord32( IsFloat64InsertLowWord32( @@ -71,9 +71,9 @@ TEST_F(JSIntrinsicLoweringTest, InlineOptimizedDoubleLo) { Node* const context = Parameter(1); Node* const effect = graph()->start(); Node* const control = graph()->start(); - Reduction const r = Reduce(graph()->NewNode( - javascript()->CallRuntime(Runtime::kInlineOptimizedDoubleLo, 1), input, - context, effect, control)); + Reduction const r = Reduce( + graph()->NewNode(javascript()->CallRuntime(Runtime::kInlineDoubleLo, 1), + input, context, effect, control)); ASSERT_TRUE(r.Changed()); EXPECT_THAT(r.replacement(), IsFloat64ExtractLowWord32(input)); } @@ -88,9 +88,9 @@ TEST_F(JSIntrinsicLoweringTest, InlineOptimizedDoubleHi) { Node* const context = Parameter(1); Node* const effect = graph()->start(); Node* const control = graph()->start(); - Reduction const r = Reduce(graph()->NewNode( - javascript()->CallRuntime(Runtime::kInlineOptimizedDoubleHi, 1), input, - context, effect, control)); + Reduction const r = Reduce( + graph()->NewNode(javascript()->CallRuntime(Runtime::kInlineDoubleHi, 1), + input, context, effect, control)); ASSERT_TRUE(r.Changed()); EXPECT_THAT(r.replacement(), IsFloat64ExtractHighWord32(input)); }