Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(348)

Unified Diff: test/cctest/interpreter/test-interpreter.cc

Issue 2209633002: [Interpreter] Assign feedback slots for binary operations and use them in ignition. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased the patch. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/interpreter/test-interpreter.cc
diff --git a/test/cctest/interpreter/test-interpreter.cc b/test/cctest/interpreter/test-interpreter.cc
index 07ad728138f307110a5fa6136d1b5a83d9ca176d..23fd448065f35d01923d420842643b5f2794e482 100644
--- a/test/cctest/interpreter/test-interpreter.cc
+++ b/test/cctest/interpreter/test-interpreter.cc
@@ -267,16 +267,24 @@ TEST(InterpreterShiftOpsSmi) {
for (size_t r = 0; r < arraysize(rhs_inputs); r++) {
for (size_t o = 0; o < arraysize(kShiftOperators); o++) {
HandleAndZoneScope handles;
- i::Factory* factory = handles.main_isolate()->factory();
+ i::Isolate* isolate = handles.main_isolate();
+ i::Factory* factory = isolate->factory();
+ i::Zone zone(isolate->allocator());
BytecodeArrayBuilder builder(handles.main_isolate(),
handles.main_zone(), 1, 0, 1);
+
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
+
Register reg(0);
int lhs = lhs_inputs[l];
int rhs = rhs_inputs[r];
builder.LoadLiteral(Smi::FromInt(lhs))
.StoreAccumulatorInRegister(reg)
.LoadLiteral(Smi::FromInt(rhs))
- .BinaryOperation(kShiftOperators[o], reg)
+ .BinaryOperation(kShiftOperators[o], reg, vector->GetIndex(slot))
.Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -299,17 +307,25 @@ TEST(InterpreterBinaryOpsSmi) {
for (size_t r = 0; r < arraysize(rhs_inputs); r++) {
for (size_t o = 0; o < arraysize(kArithmeticOperators); o++) {
HandleAndZoneScope handles;
- i::Factory* factory = handles.main_isolate()->factory();
+ i::Isolate* isolate = handles.main_isolate();
+ i::Factory* factory = isolate->factory();
+ i::Zone zone(isolate->allocator());
BytecodeArrayBuilder builder(handles.main_isolate(),
handles.main_zone(), 1, 0, 1);
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
+
Register reg(0);
int lhs = lhs_inputs[l];
int rhs = rhs_inputs[r];
builder.LoadLiteral(Smi::FromInt(lhs))
.StoreAccumulatorInRegister(reg)
.LoadLiteral(Smi::FromInt(rhs))
- .BinaryOperation(kArithmeticOperators[o], reg)
+ .BinaryOperation(kArithmeticOperators[o], reg,
+ vector->GetIndex(slot))
.Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -333,16 +349,25 @@ TEST(InterpreterBinaryOpsHeapNumber) {
for (size_t r = 0; r < arraysize(rhs_inputs); r++) {
for (size_t o = 0; o < arraysize(kArithmeticOperators); o++) {
HandleAndZoneScope handles;
- i::Factory* factory = handles.main_isolate()->factory();
+ i::Isolate* isolate = handles.main_isolate();
+ i::Factory* factory = isolate->factory();
+ i::Zone zone(isolate->allocator());
BytecodeArrayBuilder builder(handles.main_isolate(),
handles.main_zone(), 1, 0, 1);
+
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
+
Register reg(0);
double lhs = lhs_inputs[l];
double rhs = rhs_inputs[r];
builder.LoadLiteral(factory->NewNumber(lhs))
.StoreAccumulatorInRegister(reg)
.LoadLiteral(factory->NewNumber(rhs))
- .BinaryOperation(kArithmeticOperators[o], reg)
+ .BinaryOperation(kArithmeticOperators[o], reg,
+ vector->GetIndex(slot))
.Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -360,7 +385,9 @@ TEST(InterpreterBinaryOpsHeapNumber) {
TEST(InterpreterStringAdd) {
HandleAndZoneScope handles;
- i::Factory* factory = handles.main_isolate()->factory();
+ i::Isolate* isolate = handles.main_isolate();
+ i::Factory* factory = isolate->factory();
+ i::Zone zone(isolate->allocator());
struct TestCase {
Handle<Object> lhs;
@@ -393,12 +420,16 @@ TEST(InterpreterStringAdd) {
for (size_t i = 0; i < arraysize(test_cases); i++) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone(), 1,
0, 1);
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
Register reg(0);
builder.LoadLiteral(test_cases[i].lhs)
.StoreAccumulatorInRegister(reg)
.LoadLiteral(test_cases[i].rhs)
- .BinaryOperation(Token::Value::ADD, reg)
+ .BinaryOperation(Token::Value::ADD, reg, vector->GetIndex(slot))
.Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -435,17 +466,38 @@ TEST(InterpreterParameter1) {
TEST(InterpreterParameter8) {
HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+ i::Zone zone(isolate->allocator());
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone(), 8,
0, 0);
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot1 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot2 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot3 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot4 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot5 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot6 = feedback_spec.AddGeneralSlot();
+
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
+
builder.LoadAccumulatorWithRegister(builder.Parameter(0))
- .BinaryOperation(Token::Value::ADD, builder.Parameter(1))
- .BinaryOperation(Token::Value::ADD, builder.Parameter(2))
- .BinaryOperation(Token::Value::ADD, builder.Parameter(3))
- .BinaryOperation(Token::Value::ADD, builder.Parameter(4))
- .BinaryOperation(Token::Value::ADD, builder.Parameter(5))
- .BinaryOperation(Token::Value::ADD, builder.Parameter(6))
- .BinaryOperation(Token::Value::ADD, builder.Parameter(7))
+ .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))
.Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -953,13 +1005,13 @@ static BytecodeArrayBuilder& SetRegister(BytecodeArrayBuilder& builder,
.LoadAccumulatorWithRegister(scratch);
}
-
static BytecodeArrayBuilder& IncrementRegister(BytecodeArrayBuilder& builder,
Register reg, int value,
- Register scratch) {
+ Register scratch,
+ int slot_index) {
return builder.StoreAccumulatorInRegister(scratch)
.LoadLiteral(Smi::FromInt(value))
- .BinaryOperation(Token::Value::ADD, reg)
+ .BinaryOperation(Token::Value::ADD, reg, slot_index)
.StoreAccumulatorInRegister(reg)
.LoadAccumulatorWithRegister(scratch);
}
@@ -967,9 +1019,19 @@ static BytecodeArrayBuilder& IncrementRegister(BytecodeArrayBuilder& builder,
TEST(InterpreterJumps) {
HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+ i::Zone zone(isolate->allocator());
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone(), 0,
0, 2);
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot1 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot2 = feedback_spec.AddGeneralSlot();
+
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
+
Register reg(0), scratch(1);
BytecodeLabel label[3];
@@ -977,11 +1039,13 @@ TEST(InterpreterJumps) {
.StoreAccumulatorInRegister(reg)
.Jump(&label[1]);
SetRegister(builder, reg, 1024, scratch).Bind(&label[0]);
- IncrementRegister(builder, reg, 1, scratch).Jump(&label[2]);
+ IncrementRegister(builder, reg, 1, scratch, vector->GetIndex(slot))
+ .Jump(&label[2]);
SetRegister(builder, reg, 2048, scratch).Bind(&label[1]);
- IncrementRegister(builder, reg, 2, scratch).Jump(&label[0]);
+ IncrementRegister(builder, reg, 2, scratch, vector->GetIndex(slot1))
+ .Jump(&label[0]);
SetRegister(builder, reg, 4096, scratch).Bind(&label[2]);
- IncrementRegister(builder, reg, 4, scratch)
+ IncrementRegister(builder, reg, 4, scratch, vector->GetIndex(slot2))
.LoadAccumulatorWithRegister(reg)
.Return();
@@ -995,9 +1059,21 @@ TEST(InterpreterJumps) {
TEST(InterpreterConditionalJumps) {
HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+ i::Zone zone(isolate->allocator());
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone(), 0,
0, 2);
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot1 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot2 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot3 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot4 = feedback_spec.AddGeneralSlot();
+
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
+
Register reg(0), scratch(1);
BytecodeLabel label[2];
BytecodeLabel done, done1;
@@ -1006,14 +1082,19 @@ TEST(InterpreterConditionalJumps) {
.StoreAccumulatorInRegister(reg)
.LoadFalse()
.JumpIfFalse(&label[0]);
- IncrementRegister(builder, reg, 1024, scratch)
+ IncrementRegister(builder, reg, 1024, scratch, vector->GetIndex(slot))
.Bind(&label[0])
.LoadTrue()
.JumpIfFalse(&done);
- IncrementRegister(builder, reg, 1, scratch).LoadTrue().JumpIfTrue(&label[1]);
- IncrementRegister(builder, reg, 2048, scratch).Bind(&label[1]);
- IncrementRegister(builder, reg, 2, scratch).LoadFalse().JumpIfTrue(&done1);
- IncrementRegister(builder, reg, 4, scratch)
+ IncrementRegister(builder, reg, 1, scratch, vector->GetIndex(slot1))
+ .LoadTrue()
+ .JumpIfTrue(&label[1]);
+ IncrementRegister(builder, reg, 2048, scratch, vector->GetIndex(slot2))
+ .Bind(&label[1]);
+ IncrementRegister(builder, reg, 2, scratch, vector->GetIndex(slot3))
+ .LoadFalse()
+ .JumpIfTrue(&done1);
+ IncrementRegister(builder, reg, 4, scratch, vector->GetIndex(slot4))
.LoadAccumulatorWithRegister(reg)
.Bind(&done)
.Bind(&done1)
@@ -1029,9 +1110,21 @@ TEST(InterpreterConditionalJumps) {
TEST(InterpreterConditionalJumps2) {
// TODO(oth): Add tests for all conditional jumps near and far.
HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+ i::Zone zone(isolate->allocator());
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone(), 0,
0, 2);
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot1 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot2 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot3 = feedback_spec.AddGeneralSlot();
+ i::FeedbackVectorSlot slot4 = feedback_spec.AddGeneralSlot();
+
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
+
Register reg(0), scratch(1);
BytecodeLabel label[2];
BytecodeLabel done, done1;
@@ -1040,14 +1133,19 @@ TEST(InterpreterConditionalJumps2) {
.StoreAccumulatorInRegister(reg)
.LoadFalse()
.JumpIfFalse(&label[0]);
- IncrementRegister(builder, reg, 1024, scratch)
+ IncrementRegister(builder, reg, 1024, scratch, vector->GetIndex(slot))
.Bind(&label[0])
.LoadTrue()
.JumpIfFalse(&done);
- IncrementRegister(builder, reg, 1, scratch).LoadTrue().JumpIfTrue(&label[1]);
- IncrementRegister(builder, reg, 2048, scratch).Bind(&label[1]);
- IncrementRegister(builder, reg, 2, scratch).LoadFalse().JumpIfTrue(&done1);
- IncrementRegister(builder, reg, 4, scratch)
+ IncrementRegister(builder, reg, 1, scratch, vector->GetIndex(slot1))
+ .LoadTrue()
+ .JumpIfTrue(&label[1]);
+ IncrementRegister(builder, reg, 2048, scratch, vector->GetIndex(slot2))
+ .Bind(&label[1]);
+ IncrementRegister(builder, reg, 2, scratch, vector->GetIndex(slot3))
+ .LoadFalse()
+ .JumpIfTrue(&done1);
+ IncrementRegister(builder, reg, 4, scratch, vector->GetIndex(slot4))
.LoadAccumulatorWithRegister(reg)
.Bind(&done)
.Bind(&done1)
@@ -1065,6 +1163,14 @@ TEST(InterpreterJumpConstantWith16BitOperand) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone(), 1,
0, 257);
+ i::Isolate* isolate = handles.main_isolate();
+ i::Zone zone(isolate->allocator());
+
+ i::FeedbackVectorSpec feedback_spec(&zone);
+ i::FeedbackVectorSlot slot = feedback_spec.AddGeneralSlot();
+ Handle<i::TypeFeedbackVector> vector =
+ i::NewTypeFeedbackVector(isolate, &feedback_spec);
+
Register reg(0), scratch(256);
BytecodeLabel done, fake;
@@ -1073,7 +1179,7 @@ TEST(InterpreterJumpConstantWith16BitOperand) {
// Consume all 8-bit operands
for (int i = 1; i <= 256; i++) {
builder.LoadLiteral(handles.main_isolate()->factory()->NewNumber(i));
- builder.BinaryOperation(Token::Value::ADD, reg);
+ builder.BinaryOperation(Token::Value::ADD, reg, vector->GetIndex(slot));
builder.StoreAccumulatorInRegister(reg);
}
builder.Jump(&done);
@@ -1082,7 +1188,8 @@ TEST(InterpreterJumpConstantWith16BitOperand) {
builder.Bind(&fake);
for (int i = 0; i < 6600; i++) {
builder.LoadLiteral(Smi::FromInt(0)); // 1-byte
- builder.BinaryOperation(Token::Value::ADD, scratch); // 4-bytes
+ builder.BinaryOperation(Token::Value::ADD, scratch,
+ vector->GetIndex(slot)); // 6-bytes
builder.StoreAccumulatorInRegister(scratch); // 4-bytes
builder.MoveRegister(scratch, reg); // 6-bytes
}
« no previous file with comments | « test/cctest/interpreter/bytecode_expectations/WideRegisters.golden ('k') | test/cctest/test-feedback-vector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698