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

Unified Diff: src/compiler/instruction.h

Issue 2692753004: [turbofan] escape analysis supports arguments object and rest elements (Closed)
Patch Set: handle the case where Deoptimizer::function_ is a Smi Created 3 years, 10 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/compiler/graph-assembler.cc ('k') | src/compiler/instruction-selector.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/instruction.h
diff --git a/src/compiler/instruction.h b/src/compiler/instruction.h
index ee7865dec05541934ecfaa4a182220ce10385f18..1299995891ee6331c2c359f3c4a38858ee25ee9b 100644
--- a/src/compiler/instruction.h
+++ b/src/compiler/instruction.h
@@ -1125,7 +1125,7 @@ std::ostream& operator<<(std::ostream& os, const Constant& constant);
class FrameStateDescriptor;
enum class StateValueKind : uint8_t {
- kArguments,
+ kArgumentsElements,
kPlain,
kOptimizedOut,
kNested,
@@ -1135,45 +1135,62 @@ enum class StateValueKind : uint8_t {
class StateValueDescriptor {
public:
StateValueDescriptor()
- : kind_(StateValueKind::kPlain),
- type_(MachineType::AnyTagged()),
- id_(0) {}
+ : kind_(StateValueKind::kPlain), type_(MachineType::AnyTagged()) {}
- static StateValueDescriptor Arguments() {
- return StateValueDescriptor(StateValueKind::kArguments,
- MachineType::AnyTagged(), 0);
+ static StateValueDescriptor ArgumentsElements(bool is_rest) {
+ StateValueDescriptor descr(StateValueKind::kArgumentsElements,
+ MachineType::AnyTagged());
+ descr.is_rest_ = is_rest;
+ return descr;
}
static StateValueDescriptor Plain(MachineType type) {
- return StateValueDescriptor(StateValueKind::kPlain, type, 0);
+ return StateValueDescriptor(StateValueKind::kPlain, type);
}
static StateValueDescriptor OptimizedOut() {
return StateValueDescriptor(StateValueKind::kOptimizedOut,
- MachineType::AnyTagged(), 0);
+ MachineType::AnyTagged());
}
static StateValueDescriptor Recursive(size_t id) {
- return StateValueDescriptor(StateValueKind::kNested,
- MachineType::AnyTagged(), id);
+ StateValueDescriptor descr(StateValueKind::kNested,
+ MachineType::AnyTagged());
+ descr.id_ = id;
+ return descr;
}
static StateValueDescriptor Duplicate(size_t id) {
- return StateValueDescriptor(StateValueKind::kDuplicate,
- MachineType::AnyTagged(), id);
+ StateValueDescriptor descr(StateValueKind::kDuplicate,
+ MachineType::AnyTagged());
+ descr.id_ = id;
+ return descr;
}
- bool IsArguments() const { return kind_ == StateValueKind::kArguments; }
+ bool IsArgumentsElements() const {
+ return kind_ == StateValueKind::kArgumentsElements;
+ }
bool IsPlain() const { return kind_ == StateValueKind::kPlain; }
bool IsOptimizedOut() const { return kind_ == StateValueKind::kOptimizedOut; }
bool IsNested() const { return kind_ == StateValueKind::kNested; }
bool IsDuplicate() const { return kind_ == StateValueKind::kDuplicate; }
MachineType type() const { return type_; }
- size_t id() const { return id_; }
+ size_t id() const {
+ DCHECK(kind_ == StateValueKind::kDuplicate ||
+ kind_ == StateValueKind::kNested);
+ return id_;
+ }
+ int is_rest() const {
+ DCHECK(kind_ == StateValueKind::kArgumentsElements);
+ return is_rest_;
+ }
private:
- StateValueDescriptor(StateValueKind kind, MachineType type, size_t id)
- : kind_(kind), type_(type), id_(id) {}
+ StateValueDescriptor(StateValueKind kind, MachineType type)
+ : kind_(kind), type_(type) {}
StateValueKind kind_;
MachineType type_;
- size_t id_;
+ union {
+ size_t id_;
+ bool is_rest_;
+ };
};
class StateValueList {
@@ -1232,7 +1249,9 @@ class StateValueList {
nested_.push_back(nested);
return nested;
}
- void PushArguments() { fields_.push_back(StateValueDescriptor::Arguments()); }
+ void PushArgumentsElements(bool is_rest) {
+ fields_.push_back(StateValueDescriptor::ArgumentsElements(is_rest));
+ }
void PushDuplicate(size_t id) {
fields_.push_back(StateValueDescriptor::Duplicate(id));
}
« no previous file with comments | « src/compiler/graph-assembler.cc ('k') | src/compiler/instruction-selector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698