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

Unified Diff: src/hydrogen-instructions.h

Issue 11088027: Added a simple dead code removal phase. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed review comments Created 8 years, 2 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/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/hydrogen-instructions.h
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
index a4e9ed72b1505026de7592a09d9cbe493f848598..ae769fea0aefbbf8b0621a0967222e126dbf5c9a 100644
--- a/src/hydrogen-instructions.h
+++ b/src/hydrogen-instructions.h
@@ -667,7 +667,7 @@ class HValue: public ZoneObject {
// Operands.
virtual int OperandCount() = 0;
- virtual HValue* OperandAt(int index) = 0;
+ virtual HValue* OperandAt(int index) const = 0;
void SetOperandAt(int index, HValue* value);
void DeleteAndReplaceWith(HValue* other);
@@ -778,6 +778,10 @@ class HValue: public ZoneObject {
UNREACHABLE();
}
+ bool IsDead() const {
+ return HasNoUses() && !HasObservableSideEffects() && IsDeletable();
+ }
+
#ifdef DEBUG
virtual void Verify() = 0;
#endif
@@ -862,6 +866,8 @@ class HValue: public ZoneObject {
GVNFlagSet gvn_flags_;
private:
+ virtual bool IsDeletable() const { return false; }
+
DISALLOW_COPY_AND_ASSIGN(HValue);
};
@@ -930,7 +936,7 @@ template<int V>
class HTemplateInstruction : public HInstruction {
public:
int OperandCount() { return V; }
- HValue* OperandAt(int i) { return inputs_[i]; }
+ HValue* OperandAt(int i) const { return inputs_[i]; }
protected:
void InternalSetOperandAt(int i, HValue* value) { inputs_[i] = value; }
@@ -982,7 +988,7 @@ class HTemplateControlInstruction: public HControlInstruction {
void SetSuccessorAt(int i, HBasicBlock* block) { successors_[i] = block; }
int OperandCount() { return V; }
- HValue* OperandAt(int i) { return inputs_[i]; }
+ HValue* OperandAt(int i) const { return inputs_[i]; }
protected:
@@ -1027,7 +1033,7 @@ class HDeoptimize: public HControlInstruction {
}
virtual int OperandCount() { return values_.length(); }
- virtual HValue* OperandAt(int index) { return values_[index]; }
+ virtual HValue* OperandAt(int index) const { return values_[index]; }
virtual void PrintDataTo(StringStream* stream);
virtual int SuccessorCount() { return 0; }
@@ -1284,6 +1290,9 @@ class HChange: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1303,6 +1312,9 @@ class HClampToUint8: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1341,7 +1353,7 @@ class HSimulate: public HInstruction {
AddValue(kNoIndex, value);
}
virtual int OperandCount() { return values_.length(); }
- virtual HValue* OperandAt(int index) { return values_[index]; }
+ virtual HValue* OperandAt(int index) const { return values_[index]; }
virtual Representation RequiredInputRepresentation(int index) {
return Representation::None();
@@ -1514,6 +1526,9 @@ class HThisFunction: public HTemplateInstruction<0> {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1532,6 +1547,9 @@ class HContext: public HTemplateInstruction<0> {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1550,6 +1568,9 @@ class HOuterContext: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1595,6 +1616,9 @@ class HGlobalObject: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1614,6 +1638,9 @@ class HGlobalReceiver: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1899,6 +1926,9 @@ class HJSArrayLength: public HTemplateInstruction<2> {
protected:
virtual bool DataEquals(HValue* other_raw) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1919,6 +1949,9 @@ class HFixedArrayBaseLength: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1939,6 +1972,9 @@ class HMapEnumLength: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1958,6 +1994,9 @@ class HElementsKind: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -1980,6 +2019,9 @@ class HBitNot: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -2062,6 +2104,8 @@ class HUnaryMathOperation: public HTemplateInstruction<2> {
}
private:
+ virtual bool IsDeletable() const { return true; }
+
BuiltinFunctionId op_;
};
@@ -2086,6 +2130,9 @@ class HLoadElements: public HTemplateInstruction<2> {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -2109,6 +2156,9 @@ class HLoadExternalArrayPointer: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -2408,7 +2458,7 @@ class HPhi: public HValue {
}
virtual HType CalculateInferredType();
virtual int OperandCount() { return inputs_.length(); }
- virtual HValue* OperandAt(int index) { return inputs_[index]; }
+ virtual HValue* OperandAt(int index) const { return inputs_[index]; }
HValue* GetRedundantReplacement();
void AddInput(HValue* value);
bool HasRealUses();
@@ -2504,6 +2554,9 @@ class HArgumentsObject: public HTemplateInstruction<0> {
}
DECLARE_CONCRETE_INSTRUCTION(ArgumentsObject)
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -2632,6 +2685,8 @@ class HConstant: public HTemplateInstruction<0> {
}
private:
+ virtual bool IsDeletable() const { return true; }
+
// If this is a numerical constant, handle_ either points to to the
// HeapObject the constant originated from or is null. If the
// constant is non-numeric, handle_ always points to a valid
@@ -2754,6 +2809,9 @@ class HArgumentsElements: public HTemplateInstruction<0> {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+ private:
+ virtual bool IsDeletable() const { return true; }
+
bool from_inlined_;
};
@@ -2773,6 +2831,9 @@ class HArgumentsLength: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -2898,6 +2959,8 @@ class HBitwiseBinaryOperation: public HBinaryOperation {
DECLARE_ABSTRACT_INSTRUCTION(BitwiseBinaryOperation)
private:
+ virtual bool IsDeletable() const { return true; }
+
Representation observed_input_representation_[3];
};
@@ -2921,6 +2984,9 @@ class HMathFloorOfDiv: public HBinaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -2953,6 +3019,9 @@ class HArithmeticBinaryOperation: public HBinaryOperation {
}
return HValue::InferredRepresentation();
}
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -3238,6 +3307,9 @@ class HGetCachedArrayIndex: public HUnaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -3342,7 +3414,7 @@ class HPower: public HTemplateInstruction<2> {
}
HValue* left() { return OperandAt(0); }
- HValue* right() { return OperandAt(1); }
+ HValue* right() const { return OperandAt(1); }
virtual Representation RequiredInputRepresentation(int index) {
return index == 0
@@ -3354,6 +3426,11 @@ class HPower: public HTemplateInstruction<2> {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ private:
+ virtual bool IsDeletable() const {
+ return !right()->representation().IsTagged();
+ }
};
@@ -3371,6 +3448,9 @@ class HRandom: public HTemplateInstruction<1> {
}
DECLARE_CONCRETE_INSTRUCTION(Random)
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -3761,7 +3841,7 @@ class HLoadGlobalCell: public HTemplateInstruction<0> {
}
Handle<JSGlobalPropertyCell> cell() const { return cell_; }
- bool RequiresHoleCheck();
+ bool RequiresHoleCheck() const;
virtual void PrintDataTo(StringStream* stream);
@@ -3783,6 +3863,8 @@ class HLoadGlobalCell: public HTemplateInstruction<0> {
}
private:
+ virtual bool IsDeletable() const { return !RequiresHoleCheck(); }
+
Handle<JSGlobalPropertyCell> cell_;
PropertyDetails details_;
};
@@ -3943,7 +4025,7 @@ class HLoadContextSlot: public HUnaryOperation {
return mode_ == kCheckDeoptimize;
}
- bool RequiresHoleCheck() {
+ bool RequiresHoleCheck() const {
return mode_ != kNoCheck;
}
@@ -3962,6 +4044,8 @@ class HLoadContextSlot: public HUnaryOperation {
}
private:
+ virtual bool IsDeletable() const { return !RequiresHoleCheck(); }
+
int slot_index_;
Mode mode_;
};
@@ -4054,6 +4138,8 @@ class HLoadNamedField: public HUnaryOperation {
}
private:
+ virtual bool IsDeletable() const { return true; }
+
bool is_in_object_;
int offset_;
};
@@ -4200,7 +4286,7 @@ class HLoadKeyedFastElement
virtual void PrintDataTo(StringStream* stream);
- bool RequiresHoleCheck();
+ bool RequiresHoleCheck() const;
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement)
@@ -4214,6 +4300,8 @@ class HLoadKeyedFastElement
}
private:
+ virtual bool IsDeletable() const { return !RequiresHoleCheck(); }
+
class ElementsKindField: public BitField<ElementsKind, 0, 4> {};
class IndexOffsetField: public BitField<uint32_t, 4, 27> {};
class IsDehoistedField: public BitField<bool, 31, 1> {};
@@ -4260,7 +4348,7 @@ class HLoadKeyedFastDoubleElement
return Representation::None();
}
- bool RequiresHoleCheck() {
+ bool RequiresHoleCheck() const {
return hole_check_mode_ == PERFORM_HOLE_CHECK;
}
@@ -4277,6 +4365,8 @@ class HLoadKeyedFastDoubleElement
}
private:
+ virtual bool IsDeletable() const { return !RequiresHoleCheck(); }
+
uint32_t index_offset_;
bool is_dehoisted_;
HoleCheckMode hole_check_mode_;
@@ -4341,6 +4431,8 @@ class HLoadKeyedSpecializedArrayElement
}
private:
+ virtual bool IsDeletable() const { return true; }
+
ElementsKind elements_kind_;
uint32_t index_offset_;
bool is_dehoisted_;
@@ -4722,6 +4814,10 @@ class HStringAdd: public HBinaryOperation {
protected:
virtual bool DataEquals(HValue* other) { return true; }
+
+ // TODO(svenpanne) Might be safe, but leave it out until we know for sure.
+ // private:
+ // virtual bool IsDeletable() const { return true; }
};
@@ -4756,6 +4852,10 @@ class HStringCharCodeAt: public HTemplateInstruction<3> {
virtual Range* InferRange(Zone* zone) {
return new(zone) Range(0, String::kMaxUtf16CodeUnit);
}
+
+ // TODO(svenpanne) Might be safe, but leave it out until we know for sure.
+ // private:
+ // virtual bool IsDeletable() const { return true; }
};
@@ -4782,6 +4882,10 @@ class HStringCharFromCode: public HTemplateInstruction<2> {
virtual bool DataEquals(HValue* other) { return true; }
DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode)
+
+ // TODO(svenpanne) Might be safe, but leave it out until we know for sure.
+ // private:
+ // virtual bool IsDeletable() const { return true; }
};
@@ -4810,6 +4914,9 @@ class HStringLength: public HUnaryOperation {
virtual Range* InferRange(Zone* zone) {
return new(zone) Range(0, String::kMaxLength);
}
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -4836,6 +4943,9 @@ class HAllocateObject: public HTemplateInstruction<1> {
DECLARE_CONCRETE_INSTRUCTION(AllocateObject)
private:
+ // TODO(svenpanne) Might be safe, but leave it out until we know for sure.
+ // virtual bool IsDeletable() const { return true; }
+
Handle<JSFunction> constructor_;
};
@@ -4852,6 +4962,8 @@ class HMaterializedLiteral: public HTemplateInstruction<V> {
int depth() const { return depth_; }
private:
+ virtual bool IsDeletable() const { return true; }
+
int literal_index_;
int depth_;
};
@@ -5027,6 +5139,8 @@ class HFunctionLiteral: public HTemplateInstruction<1> {
bool pretenure() const { return pretenure_; }
private:
+ virtual bool IsDeletable() const { return true; }
+
Handle<SharedFunctionInfo> shared_info_;
bool pretenure_;
};
@@ -5051,6 +5165,9 @@ class HTypeof: public HTemplateInstruction<2> {
}
DECLARE_CONCRETE_INSTRUCTION(Typeof)
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -5069,6 +5186,9 @@ class HToFastProperties: public HUnaryOperation {
}
DECLARE_CONCRETE_INSTRUCTION(ToFastProperties)
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -5083,6 +5203,9 @@ class HValueOf: public HUnaryOperation {
}
DECLARE_CONCRETE_INSTRUCTION(ValueOf)
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
@@ -5279,6 +5402,9 @@ class HLoadFieldByIndex : public HTemplateInstruction<2> {
}
DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex);
+
+ private:
+ virtual bool IsDeletable() const { return true; }
};
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698