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

Unified Diff: src/interpreter/bytecode-array-builder.h

Issue 1651133002: [interpreter] Move temporary register allocator into own file. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Incorporate review comments from rmcilroy. Created 4 years, 11 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
« no previous file with comments | « src/identity-map.cc ('k') | src/interpreter/bytecode-array-builder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/interpreter/bytecode-array-builder.h
diff --git a/src/interpreter/bytecode-array-builder.h b/src/interpreter/bytecode-array-builder.h
index 394bb1dc23c8a338496390e9583205e751ea4b5b..3fccedd28a0aa44cf2025455c0c905c9bf672d92 100644
--- a/src/interpreter/bytecode-array-builder.h
+++ b/src/interpreter/bytecode-array-builder.h
@@ -6,6 +6,7 @@
#define V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_
#include "src/ast/ast.h"
+#include "src/interpreter/bytecode-register-allocator.h"
#include "src/interpreter/bytecodes.h"
#include "src/interpreter/constant-array-builder.h"
#include "src/interpreter/handler-table-builder.h"
@@ -26,29 +27,27 @@ class Register;
// when rest parameters implementation has settled down.
enum class CreateArgumentsType { kMappedArguments, kUnmappedArguments };
-class BytecodeArrayBuilder final : private RegisterMover {
+class BytecodeArrayBuilder final : public ZoneObject, private RegisterMover {
public:
- BytecodeArrayBuilder(Isolate* isolate, Zone* zone);
+ BytecodeArrayBuilder(Isolate* isolate, Zone* zone, int parameter_count,
+ int context_count, int locals_count);
~BytecodeArrayBuilder();
Handle<BytecodeArray> ToBytecodeArray();
- // Set the number of parameters expected by function.
- void set_parameter_count(int number_of_params);
+ // Get the number of parameters expected by function.
int parameter_count() const {
DCHECK_GE(parameter_count_, 0);
return parameter_count_;
}
- // Set the number of locals required for bytecode array.
- void set_locals_count(int number_of_locals);
+ // Get the number of locals required for bytecode array.
int locals_count() const {
DCHECK_GE(local_register_count_, 0);
return local_register_count_;
}
- // Set number of contexts required for bytecode array.
- void set_context_count(int number_of_contexts);
+ // Get number of contexts required for bytecode array.
int context_count() const {
DCHECK_GE(context_register_count_, 0);
return context_register_count_;
@@ -62,7 +61,11 @@ class BytecodeArrayBuilder final : private RegisterMover {
// Returns the number of fixed and temporary registers.
int fixed_and_temporary_register_count() const {
- return fixed_register_count() + temporary_register_count_;
+ return fixed_register_count() + temporary_register_count();
+ }
+
+ int temporary_register_count() const {
+ return temporary_register_allocator()->allocation_count();
}
// Returns the number of registers used for translating wide
@@ -78,8 +81,8 @@ class BytecodeArrayBuilder final : private RegisterMover {
// local.
bool RegisterIsParameterOrLocal(Register reg) const;
- // Return true if the register |reg| represents a temporary register.
- bool RegisterIsTemporary(Register reg) const;
+ // Returns true if the register |reg| is a live temporary register.
+ bool TemporaryRegisterIsLive(Register reg) const;
// Constant loads to accumulator.
BytecodeArrayBuilder& LoadLiteral(v8::internal::Smi* value);
@@ -251,6 +254,12 @@ class BytecodeArrayBuilder final : private RegisterMover {
// Accessors
Zone* zone() const { return zone_; }
+ TemporaryRegisterAllocator* temporary_register_allocator() {
+ return &temporary_allocator_;
+ }
+ const TemporaryRegisterAllocator* temporary_register_allocator() const {
+ return &temporary_allocator_;
+ }
private:
class PreviousBytecodeHelper;
@@ -318,18 +327,6 @@ class BytecodeArrayBuilder final : private RegisterMover {
bool NeedToBooleanCast();
bool IsRegisterInAccumulator(Register reg);
- // Temporary register management.
- void ForgeTemporaryRegister();
- int BorrowTemporaryRegister();
- int BorrowTemporaryRegisterNotInRange(int start_index, int end_index);
- void ReturnTemporaryRegister(int reg_index);
- int PrepareForConsecutiveTemporaryRegisters(size_t count);
- void BorrowConsecutiveTemporaryRegister(int reg_index);
- bool TemporaryRegisterIsLive(Register reg) const;
-
- Register first_temporary_register() const;
- Register last_temporary_register() const;
-
// Gets a constant pool entry for the |object|.
size_t GetConstantPoolEntry(Handle<Object> object);
@@ -360,8 +357,7 @@ class BytecodeArrayBuilder final : private RegisterMover {
int parameter_count_;
int local_register_count_;
int context_register_count_;
- int temporary_register_count_;
- ZoneSet<int> free_temporaries_;
+ TemporaryRegisterAllocator temporary_allocator_;
RegisterTranslator register_translator_;
DISALLOW_COPY_AND_ASSIGN(BytecodeArrayBuilder);
« no previous file with comments | « src/identity-map.cc ('k') | src/interpreter/bytecode-array-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698