Reviewers: Sven Panne,
Description:
[turbofan] Improve memory layout of Node class.
Also gets rid of the reinterpret_cast on this.
[email protected]
Please review this at https://codereview.chromium.org/828803004/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+15, -16 lines):
M src/compiler/node.h
M src/compiler/node.cc
Index: src/compiler/node.cc
diff --git a/src/compiler/node.cc b/src/compiler/node.cc
index
1486d8a34d2655b3a6367810139d77bac6cbf67a..a4680e4636f1630219fcfc4041e3aef1f260edbf
100644
--- a/src/compiler/node.cc
+++ b/src/compiler/node.cc
@@ -12,15 +12,15 @@ namespace compiler {
Node* Node::New(Zone* zone, NodeId id, const Operator* op, int input_count,
Node** inputs, bool has_extensible_inputs) {
- size_t node_size = sizeof(Node);
+ size_t node_size = sizeof(Node) - sizeof(Input);
int reserve_input_count = has_extensible_inputs ?
kDefaultReservedInputs : 0;
- size_t inputs_size = (input_count + reserve_input_count) * sizeof(Input);
+ size_t inputs_size = std::max<size_t>(
+ (input_count + reserve_input_count) * sizeof(Input),
sizeof(InputDeque*));
size_t uses_size = input_count * sizeof(Use);
int size = static_cast<int>(node_size + inputs_size + uses_size);
void* buffer = zone->New(size);
Node* result = new (buffer) Node(id, op, input_count,
reserve_input_count);
- Input* input =
- reinterpret_cast<Input*>(reinterpret_cast<char*>(buffer) +
node_size);
+ Input* input = result->inputs_.static_;
Use* use =
reinterpret_cast<Use*>(reinterpret_cast<char*>(input) + inputs_size);
@@ -175,9 +175,7 @@ Node::Node(NodeId id, const Operator* op, int
input_count,
ReservedInputCountField::encode(reserved_input_count) |
HasAppendableInputsField::encode(false)),
first_use_(nullptr),
- last_use_(nullptr) {
- inputs_.static_ = reinterpret_cast<Input*>(this + 1);
-}
+ last_use_(nullptr) {}
void Node::EnsureAppendableInputs(Zone* zone) {
Index: src/compiler/node.h
diff --git a/src/compiler/node.h b/src/compiler/node.h
index
f8b3329d039216dc46cad97a8f114e11813d47e3..ed9c01db90d668dcb9505db9b9661814c68bf215
100644
--- a/src/compiler/node.h
+++ b/src/compiler/node.h
@@ -168,12 +168,13 @@ class Node FINAL {
inline void EnsureAppendableInputs(Zone* zone);
- Input* GetInputRecordPtr(int index) const {
- if (has_appendable_inputs()) {
- return &((*inputs_.appendable_)[index]);
- } else {
- return &inputs_.static_[index];
- }
+ Input* GetInputRecordPtr(int index) {
+ return has_appendable_inputs() ? &((*inputs_.appendable_)[index])
+ : &inputs_.static_[index];
+ }
+ const Input* GetInputRecordPtr(int index) const {
+ return has_appendable_inputs() ? &((*inputs_.appendable_)[index])
+ : &inputs_.static_[index];
}
inline void AppendUse(Use* const use);
@@ -224,16 +225,16 @@ class Node FINAL {
Mark mark_;
NodeId const id_;
unsigned bit_field_;
+ Use* first_use_;
+ Use* last_use_;
union {
// When a node is initially allocated, it uses a static buffer to hold
its
// inputs under the assumption that the number of outputs will not
increase.
// When the first input is appended, the static buffer is converted
into a
// deque to allow for space-efficient growing.
- Input* static_;
+ Input static_[1];
InputDeque* appendable_;
} inputs_;
- Use* first_use_;
- Use* last_use_;
friend class Edge;
friend class NodeMarkerBase;
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.