Merged INLINE_OPTIMIZED intrinsic type into INLINE.
authorsvenpanne <svenpanne@chromium.org>
Fri, 6 Mar 2015 11:01:43 +0000 (03:01 -0800)
committerCommit bot <commit-bot@chromium.org>
Fri, 6 Mar 2015 11:01:52 +0000 (11:01 +0000)
BUG=v8:3947
LOG=n

Review URL: https://codereview.chromium.org/978123003

Cr-Commit-Position: refs/heads/master@{#27039}

18 files changed:
src/arm/full-codegen-arm.cc
src/arm64/full-codegen-arm64.cc
src/compiler/js-intrinsic-lowering.cc
src/compiler/js-intrinsic-lowering.h
src/compiler/linkage.cc
src/compiler/typer.cc
src/full-codegen.cc
src/full-codegen.h
src/hydrogen.cc
src/ia32/full-codegen-ia32.cc
src/mips/full-codegen-mips.cc
src/mips64/full-codegen-mips64.cc
src/ppc/full-codegen-ppc.cc
src/runtime/runtime.cc
src/runtime/runtime.h
src/x64/full-codegen-x64.cc
src/x87/full-codegen-x87.cc
test/unittests/compiler/js-intrinsic-lowering-unittest.cc

index 78161fb..477222e 100644 (file)
@@ -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;
   }
 
index 95f7fae..11355bb 100644 (file)
@@ -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;
   }
 
index 0d3b3e6..a1d70a4 100644 (file)
@@ -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());
 }
 
index d728c27..2ef02a1 100644 (file)
@@ -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);
index 089b287..8f3f61d 100644 (file)
@@ -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:
index e11730e..c638535 100644 (file)
@@ -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;
index 6f2317c..8721bcd 100644 (file)
@@ -895,22 +895,23 @@ const FullCodeGenerator::InlineFunctionGenerator
 
 
 FullCodeGenerator::InlineFunctionGenerator
-  FullCodeGenerator::FindInlineFunctionGenerator(Runtime::FunctionId id) {
-    int lookup_index =
-        static_cast<int>(id) - static_cast<int>(Runtime::kFirstInlineFunction);
-    DCHECK(lookup_index >= 0);
-    DCHECK(static_cast<size_t>(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<int>(id) -
+                                   static_cast<int>(
+                                       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);
 }
 
index 42f2b2c..e78535f 100644 (file)
@@ -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);
index d74942f..d735a6b 100644 (file)
@@ -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.
index 8ef6ff3..8a7e847 100644 (file)
@@ -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;
   }
 
index 71f71cd..9a0466d 100644 (file)
@@ -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;
   }
 
index c58788e..510bf17 100644 (file)
@@ -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;
   }
 
index 326857d..5864928 100644 (file)
@@ -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;
   }
 
index 6222cb4..9ec3f4c 100644 (file)
@@ -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
 
index 3c16fa5..4a036fd 100644 (file)
@@ -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 {
index 1da93d6..d553fb8 100644 (file)
@@ -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;
   }
 
index 8a92bfd..155c0f2 100644 (file)
@@ -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;
   }
 
index 7060a90..1b8a87e 100644 (file)
@@ -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));
 }