Commit 941f5535 authored by epertoso's avatar epertoso Committed by Commit bot

Revert of [ignition] Inline the binary op TurboFan code stubs in the bytecode...

Revert of [ignition] Inline the binary op TurboFan code stubs in the bytecode handlers. (patchset #4 id:60001 of https://codereview.chromium.org/1902823002/ )

Reason for revert:
Caused a performance regression in TurboFan and did not improve in a significant way Ignition's performances.

Original issue's description:
> [ignition] Inline the binary op TurboFan code stubs in the bytecode handlers.
>
> Adds a Generate method to the stubs that can be used to embed the graph directly in the bytecode handlers.
>
> Committed: https://crrev.com/e8caf78ff2a9f7d50ac9b47f6b4c80f92b69914a
> Cr-Commit-Position: refs/heads/master@{#35696}

TBR=bmeurer@chromium.org,rmcilroy@chromium.org,machenbach@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.

Review-Url: https://codereview.chromium.org/1927873002
Cr-Commit-Position: refs/heads/master@{#35851}
parent 622c92b8
This diff is collapsed.
...@@ -403,18 +403,6 @@ class CodeStub BASE_EMBEDDED { ...@@ -403,18 +403,6 @@ class CodeStub BASE_EMBEDDED {
void GenerateAssembly(CodeStubAssembler* assembler) const override; \ void GenerateAssembly(CodeStubAssembler* assembler) const override; \
DEFINE_CODE_STUB(NAME, SUPER) DEFINE_CODE_STUB(NAME, SUPER)
#define DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(NAME, SUPER) \
public: \
static compiler::Node* Generate(CodeStubAssembler* assembler, \
compiler::Node* left, compiler::Node* right, \
compiler::Node* context); \
void GenerateAssembly(CodeStubAssembler* assembler) const override { \
assembler->Return(Generate(assembler, assembler->Parameter(0), \
assembler->Parameter(1), \
assembler->Parameter(2))); \
} \
DEFINE_CODE_STUB(NAME, SUPER)
#define DEFINE_HANDLER_CODE_STUB(NAME, SUPER) \ #define DEFINE_HANDLER_CODE_STUB(NAME, SUPER) \
public: \ public: \
Handle<Code> GenerateCode() override; \ Handle<Code> GenerateCode() override; \
...@@ -694,7 +682,7 @@ class AddStub final : public TurboFanCodeStub { ...@@ -694,7 +682,7 @@ class AddStub final : public TurboFanCodeStub {
explicit AddStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit AddStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(Add, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(Add, TurboFanCodeStub);
}; };
class SubtractStub final : public TurboFanCodeStub { class SubtractStub final : public TurboFanCodeStub {
...@@ -702,7 +690,7 @@ class SubtractStub final : public TurboFanCodeStub { ...@@ -702,7 +690,7 @@ class SubtractStub final : public TurboFanCodeStub {
explicit SubtractStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit SubtractStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(Subtract, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(Subtract, TurboFanCodeStub);
}; };
class MultiplyStub final : public TurboFanCodeStub { class MultiplyStub final : public TurboFanCodeStub {
...@@ -710,7 +698,7 @@ class MultiplyStub final : public TurboFanCodeStub { ...@@ -710,7 +698,7 @@ class MultiplyStub final : public TurboFanCodeStub {
explicit MultiplyStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit MultiplyStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(Multiply, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(Multiply, TurboFanCodeStub);
}; };
class DivideStub final : public TurboFanCodeStub { class DivideStub final : public TurboFanCodeStub {
...@@ -718,7 +706,7 @@ class DivideStub final : public TurboFanCodeStub { ...@@ -718,7 +706,7 @@ class DivideStub final : public TurboFanCodeStub {
explicit DivideStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit DivideStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(Divide, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(Divide, TurboFanCodeStub);
}; };
class ModulusStub final : public TurboFanCodeStub { class ModulusStub final : public TurboFanCodeStub {
...@@ -726,7 +714,7 @@ class ModulusStub final : public TurboFanCodeStub { ...@@ -726,7 +714,7 @@ class ModulusStub final : public TurboFanCodeStub {
explicit ModulusStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit ModulusStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(Modulus, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(Modulus, TurboFanCodeStub);
}; };
class ShiftRightStub final : public TurboFanCodeStub { class ShiftRightStub final : public TurboFanCodeStub {
...@@ -734,7 +722,7 @@ class ShiftRightStub final : public TurboFanCodeStub { ...@@ -734,7 +722,7 @@ class ShiftRightStub final : public TurboFanCodeStub {
explicit ShiftRightStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit ShiftRightStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(ShiftRight, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(ShiftRight, TurboFanCodeStub);
}; };
class ShiftRightLogicalStub final : public TurboFanCodeStub { class ShiftRightLogicalStub final : public TurboFanCodeStub {
...@@ -743,7 +731,7 @@ class ShiftRightLogicalStub final : public TurboFanCodeStub { ...@@ -743,7 +731,7 @@ class ShiftRightLogicalStub final : public TurboFanCodeStub {
: TurboFanCodeStub(isolate) {} : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(ShiftRightLogical, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(ShiftRightLogical, TurboFanCodeStub);
}; };
class ShiftLeftStub final : public TurboFanCodeStub { class ShiftLeftStub final : public TurboFanCodeStub {
...@@ -751,7 +739,7 @@ class ShiftLeftStub final : public TurboFanCodeStub { ...@@ -751,7 +739,7 @@ class ShiftLeftStub final : public TurboFanCodeStub {
explicit ShiftLeftStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit ShiftLeftStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(ShiftLeft, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(ShiftLeft, TurboFanCodeStub);
}; };
class BitwiseAndStub final : public TurboFanCodeStub { class BitwiseAndStub final : public TurboFanCodeStub {
...@@ -759,7 +747,7 @@ class BitwiseAndStub final : public TurboFanCodeStub { ...@@ -759,7 +747,7 @@ class BitwiseAndStub final : public TurboFanCodeStub {
explicit BitwiseAndStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit BitwiseAndStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(BitwiseAnd, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(BitwiseAnd, TurboFanCodeStub);
}; };
class BitwiseOrStub final : public TurboFanCodeStub { class BitwiseOrStub final : public TurboFanCodeStub {
...@@ -767,7 +755,7 @@ class BitwiseOrStub final : public TurboFanCodeStub { ...@@ -767,7 +755,7 @@ class BitwiseOrStub final : public TurboFanCodeStub {
explicit BitwiseOrStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit BitwiseOrStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(BitwiseOr, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(BitwiseOr, TurboFanCodeStub);
}; };
class BitwiseXorStub final : public TurboFanCodeStub { class BitwiseXorStub final : public TurboFanCodeStub {
...@@ -775,7 +763,7 @@ class BitwiseXorStub final : public TurboFanCodeStub { ...@@ -775,7 +763,7 @@ class BitwiseXorStub final : public TurboFanCodeStub {
explicit BitwiseXorStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} explicit BitwiseXorStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp); DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(BitwiseXor, TurboFanCodeStub); DEFINE_TURBOFAN_CODE_STUB(BitwiseXor, TurboFanCodeStub);
}; };
class IncStub final : public TurboFanCodeStub { class IncStub final : public TurboFanCodeStub {
......
...@@ -719,22 +719,12 @@ void Interpreter::DoBinaryOp(Runtime::FunctionId function_id, ...@@ -719,22 +719,12 @@ void Interpreter::DoBinaryOp(Runtime::FunctionId function_id,
__ Dispatch(); __ Dispatch();
} }
template <class Generator>
void Interpreter::DoBinaryOp(InterpreterAssembler* assembler) {
Node* reg_index = __ BytecodeOperandReg(0);
Node* lhs = __ LoadRegister(reg_index);
Node* rhs = __ GetAccumulator();
Node* context = __ GetContext();
Node* result = Generator::Generate(assembler, lhs, rhs, context);
__ SetAccumulator(result);
__ Dispatch();
}
// Add <src> // Add <src>
// //
// Add register <src> to accumulator. // Add register <src> to accumulator.
void Interpreter::DoAdd(InterpreterAssembler* assembler) { void Interpreter::DoAdd(InterpreterAssembler* assembler) {
DoBinaryOp<AddStub>(assembler); DoBinaryOp(CodeFactory::Add(isolate_), assembler);
} }
...@@ -742,7 +732,7 @@ void Interpreter::DoAdd(InterpreterAssembler* assembler) { ...@@ -742,7 +732,7 @@ void Interpreter::DoAdd(InterpreterAssembler* assembler) {
// //
// Subtract register <src> from accumulator. // Subtract register <src> from accumulator.
void Interpreter::DoSub(InterpreterAssembler* assembler) { void Interpreter::DoSub(InterpreterAssembler* assembler) {
DoBinaryOp<SubtractStub>(assembler); DoBinaryOp(CodeFactory::Subtract(isolate_), assembler);
} }
...@@ -750,7 +740,7 @@ void Interpreter::DoSub(InterpreterAssembler* assembler) { ...@@ -750,7 +740,7 @@ void Interpreter::DoSub(InterpreterAssembler* assembler) {
// //
// Multiply accumulator by register <src>. // Multiply accumulator by register <src>.
void Interpreter::DoMul(InterpreterAssembler* assembler) { void Interpreter::DoMul(InterpreterAssembler* assembler) {
DoBinaryOp<MultiplyStub>(assembler); DoBinaryOp(CodeFactory::Multiply(isolate_), assembler);
} }
...@@ -758,7 +748,7 @@ void Interpreter::DoMul(InterpreterAssembler* assembler) { ...@@ -758,7 +748,7 @@ void Interpreter::DoMul(InterpreterAssembler* assembler) {
// //
// Divide register <src> by accumulator. // Divide register <src> by accumulator.
void Interpreter::DoDiv(InterpreterAssembler* assembler) { void Interpreter::DoDiv(InterpreterAssembler* assembler) {
DoBinaryOp<DivideStub>(assembler); DoBinaryOp(CodeFactory::Divide(isolate_), assembler);
} }
...@@ -766,7 +756,7 @@ void Interpreter::DoDiv(InterpreterAssembler* assembler) { ...@@ -766,7 +756,7 @@ void Interpreter::DoDiv(InterpreterAssembler* assembler) {
// //
// Modulo register <src> by accumulator. // Modulo register <src> by accumulator.
void Interpreter::DoMod(InterpreterAssembler* assembler) { void Interpreter::DoMod(InterpreterAssembler* assembler) {
DoBinaryOp<ModulusStub>(assembler); DoBinaryOp(CodeFactory::Modulus(isolate_), assembler);
} }
...@@ -774,7 +764,7 @@ void Interpreter::DoMod(InterpreterAssembler* assembler) { ...@@ -774,7 +764,7 @@ void Interpreter::DoMod(InterpreterAssembler* assembler) {
// //
// BitwiseOr register <src> to accumulator. // BitwiseOr register <src> to accumulator.
void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) { void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) {
DoBinaryOp<BitwiseOrStub>(assembler); DoBinaryOp(CodeFactory::BitwiseOr(isolate_), assembler);
} }
...@@ -782,7 +772,7 @@ void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) { ...@@ -782,7 +772,7 @@ void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) {
// //
// BitwiseXor register <src> to accumulator. // BitwiseXor register <src> to accumulator.
void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) { void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) {
DoBinaryOp<BitwiseXorStub>(assembler); DoBinaryOp(CodeFactory::BitwiseXor(isolate_), assembler);
} }
...@@ -790,7 +780,7 @@ void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) { ...@@ -790,7 +780,7 @@ void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) {
// //
// BitwiseAnd register <src> to accumulator. // BitwiseAnd register <src> to accumulator.
void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) { void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) {
DoBinaryOp<BitwiseAndStub>(assembler); DoBinaryOp(CodeFactory::BitwiseAnd(isolate_), assembler);
} }
...@@ -801,7 +791,7 @@ void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) { ...@@ -801,7 +791,7 @@ void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) {
// before the operation. 5 lsb bits from the accumulator are used as count // before the operation. 5 lsb bits from the accumulator are used as count
// i.e. <src> << (accumulator & 0x1F). // i.e. <src> << (accumulator & 0x1F).
void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) { void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) {
DoBinaryOp<ShiftLeftStub>(assembler); DoBinaryOp(CodeFactory::ShiftLeft(isolate_), assembler);
} }
...@@ -812,7 +802,7 @@ void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) { ...@@ -812,7 +802,7 @@ void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) {
// accumulator to uint32 before the operation. 5 lsb bits from the accumulator // accumulator to uint32 before the operation. 5 lsb bits from the accumulator
// are used as count i.e. <src> >> (accumulator & 0x1F). // are used as count i.e. <src> >> (accumulator & 0x1F).
void Interpreter::DoShiftRight(InterpreterAssembler* assembler) { void Interpreter::DoShiftRight(InterpreterAssembler* assembler) {
DoBinaryOp<ShiftRightStub>(assembler); DoBinaryOp(CodeFactory::ShiftRight(isolate_), assembler);
} }
...@@ -823,7 +813,7 @@ void Interpreter::DoShiftRight(InterpreterAssembler* assembler) { ...@@ -823,7 +813,7 @@ void Interpreter::DoShiftRight(InterpreterAssembler* assembler) {
// uint32 before the operation 5 lsb bits from the accumulator are used as // uint32 before the operation 5 lsb bits from the accumulator are used as
// count i.e. <src> << (accumulator & 0x1F). // count i.e. <src> << (accumulator & 0x1F).
void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) { void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) {
DoBinaryOp<ShiftRightLogicalStub>(assembler); DoBinaryOp(CodeFactory::ShiftRightLogical(isolate_), assembler);
} }
void Interpreter::DoCountOp(Callable callable, void Interpreter::DoCountOp(Callable callable,
......
...@@ -21,10 +21,6 @@ class Isolate; ...@@ -21,10 +21,6 @@ class Isolate;
class Callable; class Callable;
class CompilationInfo; class CompilationInfo;
namespace compiler {
class Node;
} // namespace compiler
namespace interpreter { namespace interpreter {
class InterpreterAssembler; class InterpreterAssembler;
...@@ -77,10 +73,6 @@ class Interpreter { ...@@ -77,10 +73,6 @@ class Interpreter {
void DoBinaryOp(Runtime::FunctionId function_id, void DoBinaryOp(Runtime::FunctionId function_id,
InterpreterAssembler* assembler); InterpreterAssembler* assembler);
// Generates code to perform the binary operations via |Generator|.
template <class Generator>
void DoBinaryOp(InterpreterAssembler* assembler);
// Generates code to perform the count operations via |callable|. // Generates code to perform the count operations via |callable|.
void DoCountOp(Callable callable, InterpreterAssembler* assembler); void DoCountOp(Callable callable, InterpreterAssembler* assembler);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment