Index: test/cctest/interpreter/test-interpreter.cc |
diff --git a/test/cctest/interpreter/test-interpreter.cc b/test/cctest/interpreter/test-interpreter.cc |
index ad2577aeabae0fb4d6600f41297eee8b31e162e2..1d71c0a15f2963612f04c2d55784b4128ee1d752 100644 |
--- a/test/cctest/interpreter/test-interpreter.cc |
+++ b/test/cctest/interpreter/test-interpreter.cc |
@@ -22,6 +22,9 @@ namespace v8 { |
namespace internal { |
namespace interpreter { |
+static int GetIndex(FeedbackVectorSlot slot) { |
+ return TypeFeedbackVector::GetIndex(slot); |
+} |
TEST(InterpreterReturn) { |
HandleAndZoneScope handles; |
@@ -272,8 +275,8 @@ TEST(InterpreterShiftOpsSmi) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0); |
int lhs = lhs_inputs[l]; |
@@ -281,11 +284,11 @@ TEST(InterpreterShiftOpsSmi) { |
builder.LoadLiteral(Smi::FromInt(lhs)) |
.StoreAccumulatorInRegister(reg) |
.LoadLiteral(Smi::FromInt(rhs)) |
- .BinaryOperation(kShiftOperators[o], reg, vector->GetIndex(slot)) |
+ .BinaryOperation(kShiftOperators[o], reg, GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
Handle<Object> expected_value = |
@@ -311,8 +314,8 @@ TEST(InterpreterBinaryOpsSmi) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0); |
int lhs = lhs_inputs[l]; |
@@ -320,12 +323,11 @@ TEST(InterpreterBinaryOpsSmi) { |
builder.LoadLiteral(Smi::FromInt(lhs)) |
.StoreAccumulatorInRegister(reg) |
.LoadLiteral(Smi::FromInt(rhs)) |
- .BinaryOperation(kArithmeticOperators[o], reg, |
- vector->GetIndex(slot)) |
+ .BinaryOperation(kArithmeticOperators[o], reg, GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
Handle<Object> expected_value = |
@@ -352,8 +354,8 @@ TEST(InterpreterBinaryOpsHeapNumber) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0); |
double lhs = lhs_inputs[l]; |
@@ -361,12 +363,11 @@ TEST(InterpreterBinaryOpsHeapNumber) { |
builder.LoadLiteral(factory->NewNumber(lhs)) |
.StoreAccumulatorInRegister(reg) |
.LoadLiteral(factory->NewNumber(rhs)) |
- .BinaryOperation(kArithmeticOperators[o], reg, |
- vector->GetIndex(slot)) |
+ .BinaryOperation(kArithmeticOperators[o], reg, GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
Handle<Object> expected_value = |
@@ -424,23 +425,23 @@ TEST(InterpreterStringAdd) { |
BytecodeArrayBuilder builder(isolate, handles.main_zone(), 1, 0, 1); |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0); |
builder.LoadLiteral(test_cases[i].lhs) |
.StoreAccumulatorInRegister(reg) |
.LoadLiteral(test_cases[i].rhs) |
- .BinaryOperation(Token::Value::ADD, reg, vector->GetIndex(slot)) |
+ .BinaryOperation(Token::Value::ADD, reg, GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK(return_value->SameValue(*test_cases[i].expected_value)); |
- Object* feedback = vector->Get(slot); |
+ Object* feedback = callable.vector()->Get(slot); |
CHECK(feedback->IsSmi()); |
CHECK_EQ(test_cases[i].expected_feedback, |
static_cast<Smi*>(feedback)->value()); |
@@ -486,28 +487,21 @@ TEST(InterpreterParameter8) { |
FeedbackVectorSlot slot5 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
FeedbackVectorSlot slot6 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
builder.LoadAccumulatorWithRegister(builder.Parameter(0)) |
- .BinaryOperation(Token::Value::ADD, builder.Parameter(1), |
- vector->GetIndex(slot)) |
- .BinaryOperation(Token::Value::ADD, builder.Parameter(2), |
- vector->GetIndex(slot1)) |
- .BinaryOperation(Token::Value::ADD, builder.Parameter(3), |
- vector->GetIndex(slot2)) |
- .BinaryOperation(Token::Value::ADD, builder.Parameter(4), |
- vector->GetIndex(slot3)) |
- .BinaryOperation(Token::Value::ADD, builder.Parameter(5), |
- vector->GetIndex(slot4)) |
- .BinaryOperation(Token::Value::ADD, builder.Parameter(6), |
- vector->GetIndex(slot5)) |
- .BinaryOperation(Token::Value::ADD, builder.Parameter(7), |
- vector->GetIndex(slot6)) |
+ .BinaryOperation(Token::Value::ADD, builder.Parameter(1), GetIndex(slot)) |
+ .BinaryOperation(Token::Value::ADD, builder.Parameter(2), GetIndex(slot1)) |
+ .BinaryOperation(Token::Value::ADD, builder.Parameter(3), GetIndex(slot2)) |
+ .BinaryOperation(Token::Value::ADD, builder.Parameter(4), GetIndex(slot3)) |
+ .BinaryOperation(Token::Value::ADD, builder.Parameter(5), GetIndex(slot4)) |
+ .BinaryOperation(Token::Value::ADD, builder.Parameter(6), GetIndex(slot5)) |
+ .BinaryOperation(Token::Value::ADD, builder.Parameter(7), GetIndex(slot6)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
typedef Handle<Object> H; |
auto callable = tester.GetCallable<H, H, H, H, H, H, H, H>(); |
@@ -653,23 +647,23 @@ TEST(InterpreterBinaryOpTypeFeedback) { |
i::FeedbackVectorSpec feedback_spec(&zone); |
i::FeedbackVectorSlot slot0 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- i::NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ i::NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0); |
builder.LoadLiteral(test_case.arg1) |
.StoreAccumulatorInRegister(reg) |
.LoadLiteral(test_case.arg2) |
- .BinaryOperation(test_case.op, reg, vector->GetIndex(slot0)) |
+ .BinaryOperation(test_case.op, reg, GetIndex(slot0)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_val = callable().ToHandleChecked(); |
- Object* feedback0 = vector->Get(slot0); |
+ Object* feedback0 = callable.vector()->Get(slot0); |
CHECK(feedback0->IsSmi()); |
CHECK_EQ(test_case.feedback, static_cast<Smi*>(feedback0)->value()); |
CHECK(Object::Equals(test_case.result, return_val).ToChecked()); |
@@ -757,23 +751,23 @@ TEST(InterpreterBinaryOpSmiTypeFeedback) { |
i::FeedbackVectorSpec feedback_spec(&zone); |
i::FeedbackVectorSlot slot0 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- i::NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ i::NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0); |
builder.LoadLiteral(test_case.arg1) |
.StoreAccumulatorInRegister(reg) |
.LoadLiteral(Smi::FromInt(test_case.arg2)) |
- .BinaryOperation(test_case.op, reg, vector->GetIndex(slot0)) |
+ .BinaryOperation(test_case.op, reg, GetIndex(slot0)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_val = callable().ToHandleChecked(); |
- Object* feedback0 = vector->Get(slot0); |
+ Object* feedback0 = callable.vector()->Get(slot0); |
CHECK(feedback0->IsSmi()); |
CHECK_EQ(test_case.feedback, static_cast<Smi*>(feedback0)->value()); |
CHECK(Object::Equals(test_case.result, return_val).ToChecked()); |
@@ -810,22 +804,22 @@ TEST(InterpreterUnaryOpFeedback) { |
i::FeedbackVectorSlot slot2 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
i::FeedbackVectorSlot slot3 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- i::NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ i::NewTypeFeedbackMetadata(isolate, &feedback_spec); |
builder.LoadAccumulatorWithRegister(builder.Parameter(0)) |
- .CountOperation(test_case.op, vector->GetIndex(slot0)) |
+ .CountOperation(test_case.op, GetIndex(slot0)) |
.LoadAccumulatorWithRegister(builder.Parameter(1)) |
- .CountOperation(test_case.op, vector->GetIndex(slot1)) |
+ .CountOperation(test_case.op, GetIndex(slot1)) |
.LoadAccumulatorWithRegister(builder.Parameter(2)) |
- .CountOperation(test_case.op, vector->GetIndex(slot2)) |
+ .CountOperation(test_case.op, GetIndex(slot2)) |
.LoadAccumulatorWithRegister(builder.Parameter(3)) |
- .CountOperation(test_case.op, vector->GetIndex(slot3)) |
+ .CountOperation(test_case.op, GetIndex(slot3)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
typedef Handle<Object> H; |
auto callable = tester.GetCallable<H, H, H, H>(); |
@@ -835,22 +829,22 @@ TEST(InterpreterUnaryOpFeedback) { |
test_case.number_feedback_value, test_case.any_feedback_value) |
.ToHandleChecked(); |
USE(return_val); |
- Object* feedback0 = vector->Get(slot0); |
+ Object* feedback0 = callable.vector()->Get(slot0); |
CHECK(feedback0->IsSmi()); |
CHECK_EQ(BinaryOperationFeedback::kSignedSmall, |
static_cast<Smi*>(feedback0)->value()); |
- Object* feedback1 = vector->Get(slot1); |
+ Object* feedback1 = callable.vector()->Get(slot1); |
CHECK(feedback1->IsSmi()); |
CHECK_EQ(BinaryOperationFeedback::kNumber, |
static_cast<Smi*>(feedback1)->value()); |
- Object* feedback2 = vector->Get(slot2); |
+ Object* feedback2 = callable.vector()->Get(slot2); |
CHECK(feedback2->IsSmi()); |
CHECK_EQ(BinaryOperationFeedback::kNumber, |
static_cast<Smi*>(feedback2)->value()); |
- Object* feedback3 = vector->Get(slot3); |
+ Object* feedback3 = callable.vector()->Get(slot3); |
CHECK(feedback3->IsSmi()); |
CHECK_EQ(BinaryOperationFeedback::kAny, |
static_cast<Smi*>(feedback3)->value()); |
@@ -873,18 +867,18 @@ TEST(InterpreterBitwiseTypeFeedback) { |
i::FeedbackVectorSlot slot1 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
i::FeedbackVectorSlot slot2 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- i::NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ i::NewTypeFeedbackMetadata(isolate, &feedback_spec); |
builder.LoadAccumulatorWithRegister(builder.Parameter(0)) |
- .BinaryOperation(op, builder.Parameter(1), vector->GetIndex(slot0)) |
- .BinaryOperation(op, builder.Parameter(2), vector->GetIndex(slot1)) |
- .BinaryOperation(op, builder.Parameter(3), vector->GetIndex(slot2)) |
+ .BinaryOperation(op, builder.Parameter(1), GetIndex(slot0)) |
+ .BinaryOperation(op, builder.Parameter(2), GetIndex(slot1)) |
+ .BinaryOperation(op, builder.Parameter(3), GetIndex(slot2)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
typedef Handle<Object> H; |
auto callable = tester.GetCallable<H, H, H, H>(); |
@@ -896,17 +890,17 @@ TEST(InterpreterBitwiseTypeFeedback) { |
Handle<Object> return_val = |
callable(arg1, arg2, arg3, arg4).ToHandleChecked(); |
USE(return_val); |
- Object* feedback0 = vector->Get(slot0); |
+ Object* feedback0 = callable.vector()->Get(slot0); |
CHECK(feedback0->IsSmi()); |
CHECK_EQ(BinaryOperationFeedback::kSignedSmall, |
static_cast<Smi*>(feedback0)->value()); |
- Object* feedback1 = vector->Get(slot1); |
+ Object* feedback1 = callable.vector()->Get(slot1); |
CHECK(feedback1->IsSmi()); |
CHECK_EQ(BinaryOperationFeedback::kNumber, |
static_cast<Smi*>(feedback1)->value()); |
- Object* feedback2 = vector->Get(slot2); |
+ Object* feedback2 = callable.vector()->Get(slot2); |
CHECK(feedback2->IsSmi()); |
CHECK_EQ(BinaryOperationFeedback::kAny, |
static_cast<Smi*>(feedback2)->value()); |
@@ -1041,19 +1035,19 @@ TEST(InterpreterLoadNamedProperty) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddLoadICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Handle<i::String> name = factory->NewStringFromAsciiChecked("val"); |
name = factory->string_table()->LookupString(isolate, name); |
BytecodeArrayBuilder builder(isolate, handles.main_zone(), 1, 0, 0); |
- builder.LoadNamedProperty(builder.Parameter(0), name, vector->GetIndex(slot)) |
+ builder.LoadNamedProperty(builder.Parameter(0), name, GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<Handle<Object>>(); |
Handle<Object> object = InterpreterTester::NewObject("({ val : 123 })"); |
@@ -1094,8 +1088,8 @@ TEST(InterpreterLoadKeyedProperty) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddKeyedLoadICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Handle<i::String> key = factory->NewStringFromAsciiChecked("key"); |
key = factory->string_table()->LookupString(isolate, key); |
@@ -1103,11 +1097,11 @@ TEST(InterpreterLoadKeyedProperty) { |
BytecodeArrayBuilder builder(isolate, handles.main_zone(), 1, 0, 1); |
builder.LoadLiteral(key) |
- .LoadKeyedProperty(builder.Parameter(0), vector->GetIndex(slot)) |
+ .LoadKeyedProperty(builder.Parameter(0), GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<Handle<Object>>(); |
Handle<Object> object = InterpreterTester::NewObject("({ key : 123 })"); |
@@ -1136,8 +1130,8 @@ TEST(InterpreterStoreNamedProperty) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddStoreICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Handle<i::String> name = factory->NewStringFromAsciiChecked("val"); |
name = factory->string_table()->LookupString(isolate, name); |
@@ -1145,12 +1139,11 @@ TEST(InterpreterStoreNamedProperty) { |
BytecodeArrayBuilder builder(isolate, handles.main_zone(), 1, 0, 0); |
builder.LoadLiteral(Smi::FromInt(999)) |
- .StoreNamedProperty(builder.Parameter(0), name, vector->GetIndex(slot), |
- STRICT) |
+ .StoreNamedProperty(builder.Parameter(0), name, GetIndex(slot), STRICT) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<Handle<Object>>(); |
Handle<Object> object = InterpreterTester::NewObject("({ val : 123 })"); |
// Test IC miss. |
@@ -1195,8 +1188,8 @@ TEST(InterpreterStoreKeyedProperty) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddKeyedStoreICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Handle<i::String> name = factory->NewStringFromAsciiChecked("val"); |
name = factory->string_table()->LookupString(isolate, name); |
@@ -1206,12 +1199,12 @@ TEST(InterpreterStoreKeyedProperty) { |
builder.LoadLiteral(name) |
.StoreAccumulatorInRegister(Register(0)) |
.LoadLiteral(Smi::FromInt(999)) |
- .StoreKeyedProperty(builder.Parameter(0), Register(0), |
- vector->GetIndex(slot), i::SLOPPY) |
+ .StoreKeyedProperty(builder.Parameter(0), Register(0), GetIndex(slot), |
+ i::SLOPPY) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<Handle<Object>>(); |
Handle<Object> object = InterpreterTester::NewObject("({ val : 123 })"); |
// Test IC miss. |
@@ -1243,11 +1236,11 @@ static void TestInterpreterCall(TailCallMode tail_call_mode) { |
FeedbackVectorSlot slot = feedback_spec.AddLoadICSlot(); |
FeedbackVectorSlot call_slot = feedback_spec.AddCallICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
- int slot_index = vector->GetIndex(slot); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
+ int slot_index = GetIndex(slot); |
int call_slot_index = -1; |
- call_slot_index = vector->GetIndex(call_slot); |
+ call_slot_index = GetIndex(call_slot); |
Handle<i::String> name = factory->NewStringFromAsciiChecked("func"); |
name = factory->string_table()->LookupString(isolate, name); |
@@ -1266,7 +1259,7 @@ static void TestInterpreterCall(TailCallMode tail_call_mode) { |
builder.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<Handle<Object>>(); |
Handle<Object> object = InterpreterTester::NewObject( |
@@ -1287,7 +1280,7 @@ static void TestInterpreterCall(TailCallMode tail_call_mode) { |
builder.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<Handle<Object>>(); |
Handle<Object> object = InterpreterTester::NewObject( |
@@ -1320,7 +1313,7 @@ static void TestInterpreterCall(TailCallMode tail_call_mode) { |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<Handle<Object>>(); |
Handle<Object> object = InterpreterTester::NewObject( |
@@ -1368,7 +1361,7 @@ static void TestInterpreterCall(TailCallMode tail_call_mode) { |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<Handle<Object>>(); |
Handle<Object> object = InterpreterTester::NewObject( |
@@ -1421,8 +1414,8 @@ TEST(InterpreterJumps) { |
FeedbackVectorSlot slot1 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
FeedbackVectorSlot slot2 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0), scratch(1); |
BytecodeLabel label[3]; |
@@ -1431,18 +1424,17 @@ TEST(InterpreterJumps) { |
.StoreAccumulatorInRegister(reg) |
.Jump(&label[1]); |
SetRegister(builder, reg, 1024, scratch).Bind(&label[0]); |
- IncrementRegister(builder, reg, 1, scratch, vector->GetIndex(slot)) |
- .Jump(&label[2]); |
+ IncrementRegister(builder, reg, 1, scratch, GetIndex(slot)).Jump(&label[2]); |
SetRegister(builder, reg, 2048, scratch).Bind(&label[1]); |
- IncrementRegister(builder, reg, 2, scratch, vector->GetIndex(slot1)) |
+ IncrementRegister(builder, reg, 2, scratch, GetIndex(slot1)) |
.JumpLoop(&label[0], 0); |
SetRegister(builder, reg, 4096, scratch).Bind(&label[2]); |
- IncrementRegister(builder, reg, 4, scratch, vector->GetIndex(slot2)) |
+ IncrementRegister(builder, reg, 4, scratch, GetIndex(slot2)) |
.LoadAccumulatorWithRegister(reg) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK_EQ(Smi::cast(*return_value)->value(), 7); |
@@ -1462,8 +1454,8 @@ TEST(InterpreterConditionalJumps) { |
FeedbackVectorSlot slot3 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
FeedbackVectorSlot slot4 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0), scratch(1); |
BytecodeLabel label[2]; |
@@ -1473,26 +1465,26 @@ TEST(InterpreterConditionalJumps) { |
.StoreAccumulatorInRegister(reg) |
.LoadFalse() |
.JumpIfFalse(&label[0]); |
- IncrementRegister(builder, reg, 1024, scratch, vector->GetIndex(slot)) |
+ IncrementRegister(builder, reg, 1024, scratch, GetIndex(slot)) |
.Bind(&label[0]) |
.LoadTrue() |
.JumpIfFalse(&done); |
- IncrementRegister(builder, reg, 1, scratch, vector->GetIndex(slot1)) |
+ IncrementRegister(builder, reg, 1, scratch, GetIndex(slot1)) |
.LoadTrue() |
.JumpIfTrue(&label[1]); |
- IncrementRegister(builder, reg, 2048, scratch, vector->GetIndex(slot2)) |
+ IncrementRegister(builder, reg, 2048, scratch, GetIndex(slot2)) |
.Bind(&label[1]); |
- IncrementRegister(builder, reg, 2, scratch, vector->GetIndex(slot3)) |
+ IncrementRegister(builder, reg, 2, scratch, GetIndex(slot3)) |
.LoadFalse() |
.JumpIfTrue(&done1); |
- IncrementRegister(builder, reg, 4, scratch, vector->GetIndex(slot4)) |
+ IncrementRegister(builder, reg, 4, scratch, GetIndex(slot4)) |
.LoadAccumulatorWithRegister(reg) |
.Bind(&done) |
.Bind(&done1) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK_EQ(Smi::cast(*return_value)->value(), 7); |
@@ -1512,8 +1504,8 @@ TEST(InterpreterConditionalJumps2) { |
FeedbackVectorSlot slot3 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
FeedbackVectorSlot slot4 = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0), scratch(1); |
BytecodeLabel label[2]; |
@@ -1523,26 +1515,26 @@ TEST(InterpreterConditionalJumps2) { |
.StoreAccumulatorInRegister(reg) |
.LoadFalse() |
.JumpIfFalse(&label[0]); |
- IncrementRegister(builder, reg, 1024, scratch, vector->GetIndex(slot)) |
+ IncrementRegister(builder, reg, 1024, scratch, GetIndex(slot)) |
.Bind(&label[0]) |
.LoadTrue() |
.JumpIfFalse(&done); |
- IncrementRegister(builder, reg, 1, scratch, vector->GetIndex(slot1)) |
+ IncrementRegister(builder, reg, 1, scratch, GetIndex(slot1)) |
.LoadTrue() |
.JumpIfTrue(&label[1]); |
- IncrementRegister(builder, reg, 2048, scratch, vector->GetIndex(slot2)) |
+ IncrementRegister(builder, reg, 2048, scratch, GetIndex(slot2)) |
.Bind(&label[1]); |
- IncrementRegister(builder, reg, 2, scratch, vector->GetIndex(slot3)) |
+ IncrementRegister(builder, reg, 2, scratch, GetIndex(slot3)) |
.LoadFalse() |
.JumpIfTrue(&done1); |
- IncrementRegister(builder, reg, 4, scratch, vector->GetIndex(slot4)) |
+ IncrementRegister(builder, reg, 4, scratch, GetIndex(slot4)) |
.LoadAccumulatorWithRegister(reg) |
.Bind(&done) |
.Bind(&done1) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK_EQ(Smi::cast(*return_value)->value(), 7); |
@@ -1557,8 +1549,8 @@ TEST(InterpreterJumpConstantWith16BitOperand) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterBinaryOpICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register reg(0), scratch(256); |
BytecodeLabel done, fake; |
@@ -1568,7 +1560,7 @@ TEST(InterpreterJumpConstantWith16BitOperand) { |
// Consume all 8-bit operands |
for (int i = 1; i <= 256; i++) { |
builder.LoadLiteral(isolate->factory()->NewNumber(i)); |
- builder.BinaryOperation(Token::Value::ADD, reg, vector->GetIndex(slot)); |
+ builder.BinaryOperation(Token::Value::ADD, reg, GetIndex(slot)); |
builder.StoreAccumulatorInRegister(reg); |
} |
builder.Jump(&done); |
@@ -1578,7 +1570,7 @@ TEST(InterpreterJumpConstantWith16BitOperand) { |
for (int i = 0; i < 6600; i++) { |
builder.LoadLiteral(Smi::kZero); // 1-byte |
builder.BinaryOperation(Token::Value::ADD, scratch, |
- vector->GetIndex(slot)); // 6-bytes |
+ GetIndex(slot)); // 6-bytes |
builder.StoreAccumulatorInRegister(scratch); // 4-bytes |
builder.MoveRegister(scratch, reg); // 6-bytes |
} |
@@ -1600,7 +1592,7 @@ TEST(InterpreterJumpConstantWith16BitOperand) { |
} |
CHECK(found_16bit_constant_jump); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK_EQ(Smi::cast(*return_value)->value(), 256.0 / 2 * (1 + 256)); |
@@ -1703,24 +1695,24 @@ TEST(InterpreterSmiComparisons) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterCompareICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register r0(0); |
builder.LoadLiteral(Smi::FromInt(inputs[i])) |
.StoreAccumulatorInRegister(r0) |
.LoadLiteral(Smi::FromInt(inputs[j])) |
- .CompareOperation(comparison, r0, vector->GetIndex(slot)) |
+ .CompareOperation(comparison, r0, GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK(return_value->IsBoolean()); |
CHECK_EQ(return_value->BooleanValue(), |
CompareC(comparison, inputs[i], inputs[j])); |
- Object* feedback = vector->Get(slot); |
+ Object* feedback = callable.vector()->Get(slot); |
CHECK(feedback->IsSmi()); |
CHECK_EQ(CompareOperationFeedback::kSignedSmall, |
static_cast<Smi*>(feedback)->value()); |
@@ -1750,24 +1742,24 @@ TEST(InterpreterHeapNumberComparisons) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterCompareICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register r0(0); |
builder.LoadLiteral(factory->NewHeapNumber(inputs[i])) |
.StoreAccumulatorInRegister(r0) |
.LoadLiteral(factory->NewHeapNumber(inputs[j])) |
- .CompareOperation(comparison, r0, vector->GetIndex(slot)) |
+ .CompareOperation(comparison, r0, GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK(return_value->IsBoolean()); |
CHECK_EQ(return_value->BooleanValue(), |
CompareC(comparison, inputs[i], inputs[j])); |
- Object* feedback = vector->Get(slot); |
+ Object* feedback = callable.vector()->Get(slot); |
CHECK(feedback->IsSmi()); |
CHECK_EQ(CompareOperationFeedback::kNumber, |
static_cast<Smi*>(feedback)->value()); |
@@ -1795,25 +1787,25 @@ TEST(InterpreterStringComparisons) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterCompareICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
BytecodeArrayBuilder builder(isolate, handles.main_zone(), 0, 0, 1); |
Register r0(0); |
builder.LoadLiteral(factory->InternalizeUtf8String(lhs)) |
.StoreAccumulatorInRegister(r0) |
.LoadLiteral(factory->InternalizeUtf8String(rhs)) |
- .CompareOperation(comparison, r0, vector->GetIndex(slot)) |
+ .CompareOperation(comparison, r0, GetIndex(slot)) |
.Return(); |
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK(return_value->IsBoolean()); |
CHECK_EQ(return_value->BooleanValue(), |
CompareC(comparison, inputs[i], inputs[j])); |
- Object* feedback = vector->Get(slot); |
+ Object* feedback = callable.vector()->Get(slot); |
CHECK(feedback->IsSmi()); |
int const expected_feedback = |
Token::IsOrderedRelationalCompareOp(comparison) |
@@ -1854,8 +1846,8 @@ TEST(InterpreterMixedComparisons) { |
FeedbackVectorSpec feedback_spec(&zone); |
FeedbackVectorSlot slot = feedback_spec.AddInterpreterCompareICSlot(); |
- Handle<i::TypeFeedbackVector> vector = |
- NewTypeFeedbackVector(isolate, &feedback_spec); |
+ Handle<i::TypeFeedbackMetadata> metadata = |
+ NewTypeFeedbackMetadata(isolate, &feedback_spec); |
Register r0(0); |
if (pass == 0) { |
@@ -1863,26 +1855,26 @@ TEST(InterpreterMixedComparisons) { |
builder.LoadLiteral(factory->NewNumber(lhs)) |
.StoreAccumulatorInRegister(r0) |
.LoadLiteral(factory->NewStringFromAsciiChecked(rhs_cstr)) |
- .CompareOperation(comparison, r0, vector->GetIndex(slot)) |
+ .CompareOperation(comparison, r0, GetIndex(slot)) |
.Return(); |
} else { |
// Comparison with HeapNumber on the rhs and String on the lhs |
builder.LoadLiteral(factory->NewStringFromAsciiChecked(lhs_cstr)) |
.StoreAccumulatorInRegister(r0) |
.LoadLiteral(factory->NewNumber(rhs)) |
- .CompareOperation(comparison, r0, vector->GetIndex(slot)) |
+ .CompareOperation(comparison, r0, GetIndex(slot)) |
.Return(); |
} |
Handle<BytecodeArray> bytecode_array = |
builder.ToBytecodeArray(isolate); |
- InterpreterTester tester(isolate, bytecode_array, vector); |
+ InterpreterTester tester(isolate, bytecode_array, metadata); |
auto callable = tester.GetCallable<>(); |
Handle<Object> return_value = callable().ToHandleChecked(); |
CHECK(return_value->IsBoolean()); |
CHECK_EQ(return_value->BooleanValue(), |
CompareC(comparison, lhs, rhs, true)); |
- Object* feedback = vector->Get(slot); |
+ Object* feedback = callable.vector()->Get(slot); |
CHECK(feedback->IsSmi()); |
// kNumber | kString gets converted to CompareOperationHint::kAny. |
int expected_feedback = CompareOperationFeedback::kNumber | |