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

Unified Diff: runtime/vm/intermediate_language.h

Issue 2772143002: Reland "VM: Handle null-comparisons in the flow graph type propagation" (Closed)
Patch Set: fix CanDeoptimize Created 3 years, 9 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
Index: runtime/vm/intermediate_language.h
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 766a6836e4fad3bcfc72638c9fb21a20d0ab2c93..85023b775614a603ea8c9b308c13c51acf620311 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -104,7 +104,7 @@ class CompileType : public ZoneAllocated {
static CompileType Create(intptr_t cid, const AbstractType& type);
CompileType CopyNonNullable() const {
- return CompileType(kNonNullable, cid_, type_);
+ return CompileType(kNonNullable, kIllegalCid, type_);
}
static CompileType CreateNullable(bool is_nullable, intptr_t cid) {
@@ -157,9 +157,10 @@ class CompileType : public ZoneAllocated {
bool IsNone() const { return (cid_ == kIllegalCid) && (type_ == NULL); }
bool IsInt() {
- return !is_nullable() && ((ToCid() == kSmiCid) || (ToCid() == kMintCid) ||
- ((type_ != NULL) &&
- (type_->Equals(Type::Handle(Type::IntType())))));
+ return !is_nullable() &&
+ ((ToCid() == kSmiCid) || (ToCid() == kMintCid) ||
+ ((type_ != NULL) &&
+ (type_->Equals(Type::Handle(Type::Int64Type())))));
}
void PrintTo(BufferFormatter* f) const;
@@ -567,7 +568,7 @@ class Instruction : public ZoneAllocated {
virtual Tag tag() const = 0;
intptr_t deopt_id() const {
- ASSERT(CanDeoptimize() || CanBecomeDeoptimizationTarget());
+ ASSERT(ComputeCanDeoptimize() || CanBecomeDeoptimizationTarget());
return GetDeoptId();
}
@@ -599,7 +600,11 @@ class Instruction : public ZoneAllocated {
inline Definition* ArgumentAt(intptr_t index) const;
// Returns true, if this instruction can deoptimize.
- virtual bool CanDeoptimize() const = 0;
+ virtual bool ComputeCanDeoptimize() const = 0;
Vyacheslav Egorov (Google) 2017/03/31 10:39:44 Maybe add a comment here that it is not currently
Florian Schneider 2017/03/31 16:39:31 Done.
+
+ // Once we removed the deopt environment, we assume that this
+ // instructions can't deoptimize.
+ bool CanDeoptimize() const { return env() != NULL && ComputeCanDeoptimize(); }
// Visiting support.
virtual void Accept(FlowGraphVisitor* visitor) = 0;
@@ -742,8 +747,6 @@ class Instruction : public ZoneAllocated {
// instruction.
Instruction* AppendInstruction(Instruction* tail);
- virtual bool AllowsDCE() const { return false; }
-
// Returns true if CSE and LICM are allowed for this instruction.
virtual bool AllowsCSE() const { return false; }
@@ -791,7 +794,7 @@ class Instruction : public ZoneAllocated {
virtual void InheritDeoptTarget(Zone* zone, Instruction* other);
bool NeedsEnvironment() const {
- return CanDeoptimize() || CanBecomeDeoptimizationTarget();
+ return ComputeCanDeoptimize() || CanBecomeDeoptimizationTarget();
}
virtual bool CanBecomeDeoptimizationTarget() const { return false; }
@@ -972,7 +975,7 @@ class ParallelMoveInstr : public TemplateInstruction<0, NoThrow> {
virtual intptr_t ArgumentCount() const { return 0; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const {
UNREACHABLE(); // This instruction never visited by optimization passes.
@@ -1104,7 +1107,7 @@ class BlockEntryInstr : public Instruction {
return true;
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
virtual EffectSet Dependencies() const { return EffectSet::None(); }
@@ -1837,7 +1840,7 @@ class PhiInstr : public Definition {
Value* InputAt(intptr_t i) const { return inputs_[i]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -1932,7 +1935,7 @@ class ParameterInstr : public Definition {
return NULL;
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
virtual EffectSet Dependencies() const { return EffectSet::None(); }
@@ -1969,7 +1972,7 @@ class PushArgumentInstr : public TemplateDefinition<1, NoThrow> {
Value* value() const { return InputAt(0); }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2008,7 +2011,7 @@ class ReturnInstr : public TemplateInstruction<1, NoThrow> {
return true;
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2031,7 +2034,7 @@ class ThrowInstr : public TemplateInstruction<0, Throws> {
virtual TokenPosition token_pos() const { return token_pos_; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2058,7 +2061,7 @@ class ReThrowInstr : public TemplateInstruction<0, Throws> {
virtual TokenPosition token_pos() const { return token_pos_; }
intptr_t catch_try_index() const { return catch_try_index_; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2082,7 +2085,7 @@ class StopInstr : public TemplateInstruction<0, NoThrow> {
virtual intptr_t ArgumentCount() const { return 0; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2124,7 +2127,7 @@ class GotoInstr : public TemplateInstruction<0, NoThrow> {
return true;
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2200,7 +2203,7 @@ class IndirectGotoInstr : public TemplateInstruction<1, NoThrow> {
return successors_[index];
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool CanBecomeDeoptimizationTarget() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2333,7 +2336,9 @@ class BranchInstr : public Instruction {
virtual TokenPosition token_pos() const { return comparison_->token_pos(); }
- virtual bool CanDeoptimize() const { return comparison()->CanDeoptimize(); }
+ virtual bool ComputeCanDeoptimize() const {
+ return comparison()->ComputeCanDeoptimize();
+ }
virtual bool CanBecomeDeoptimizationTarget() const {
return comparison()->CanBecomeDeoptimizationTarget();
@@ -2394,7 +2399,7 @@ class DeoptimizeInstr : public TemplateInstruction<0, NoThrow, Pure> {
DeoptimizeInstr(ICData::DeoptReasonId deopt_reason, intptr_t deopt_id)
: TemplateInstruction(deopt_id), deopt_reason_(deopt_reason) {}
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual bool AttributesEqual(Instruction* other) const { return true; }
@@ -2425,7 +2430,7 @@ class RedefinitionInstr : public TemplateDefinition<1, NoThrow> {
void set_constrained_type(CompileType* type) { constrained_type_ = type; }
CompileType* constrained_type() const { return constrained_type_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Dependencies() const { return EffectSet::None(); }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2446,7 +2451,7 @@ class ConstraintInstr : public TemplateDefinition<1, NoThrow> {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -2488,7 +2493,7 @@ class ConstantInstr : public TemplateDefinition<0, NoThrow, Pure> {
const Object& value() const { return value_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual void InferRange(RangeAnalysis* analysis, Range* range);
@@ -2565,7 +2570,7 @@ class AssertAssignableInstr : public TemplateDefinition<2, Throws, Pure> {
}
const String& dst_name() const { return dst_name_; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual bool CanBecomeDeoptimizationTarget() const {
// AssertAssignable instructions that are specialized by the optimizer
@@ -2602,7 +2607,7 @@ class AssertBooleanInstr : public TemplateDefinition<1, Throws, Pure> {
virtual TokenPosition token_pos() const { return token_pos_; }
Value* value() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual Definition* Canonicalize(FlowGraph* flow_graph);
@@ -2627,7 +2632,7 @@ class CurrentContextInstr : public TemplateDefinition<0, NoThrow> {
DECLARE_INSTRUCTION(CurrentContext)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
virtual EffectSet Dependencies() const { return EffectSet::None(); }
@@ -2674,7 +2679,7 @@ class ClosureCallInstr : public TemplateDefinition<1, Throws> {
// TODO(kmillikin): implement exact call counts for closure calls.
virtual intptr_t CallCount() const { return 1; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::All(); }
@@ -2742,7 +2747,7 @@ class InstanceCallInstr : public TemplateDefinition<0, Throws> {
bool has_unique_selector() const { return has_unique_selector_; }
void set_has_unique_selector(bool b) { has_unique_selector_ = b; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual Definition* Canonicalize(FlowGraph* flow_graph);
@@ -2828,7 +2833,7 @@ class PolymorphicInstanceCallInstr : public TemplateDefinition<0, Throws> {
const ICData& ic_data() const { return ic_data_; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::All(); }
@@ -2863,7 +2868,7 @@ class StrictCompareInstr : public TemplateComparison<2, NoThrow, Pure> {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Definition* Canonicalize(FlowGraph* flow_graph);
@@ -2908,7 +2913,7 @@ class TestSmiInstr : public TemplateComparison<2, NoThrow, Pure> {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
return kTagged;
@@ -2953,7 +2958,7 @@ class TestCidsInstr : public TemplateComparison<1, NoThrow, Pure> {
virtual Definition* Canonicalize(FlowGraph* flow_graph);
- virtual bool CanDeoptimize() const {
+ virtual bool ComputeCanDeoptimize() const {
return GetDeoptId() != Thread::kNoDeoptId;
}
@@ -3000,7 +3005,7 @@ class EqualityCompareInstr : public TemplateComparison<2, NoThrow, Pure> {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual void EmitBranchCode(FlowGraphCompiler* compiler, BranchInstr* branch);
@@ -3042,7 +3047,7 @@ class RelationalOpInstr : public TemplateComparison<2, NoThrow, Pure> {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual void EmitBranchCode(FlowGraphCompiler* compiler, BranchInstr* branch);
@@ -3089,7 +3094,9 @@ class IfThenElseInstr : public Definition {
Value* InputAt(intptr_t i) const { return comparison()->InputAt(i); }
- virtual bool CanDeoptimize() const { return comparison()->CanDeoptimize(); }
+ virtual bool ComputeCanDeoptimize() const {
+ return comparison()->ComputeCanDeoptimize();
+ }
virtual bool CanBecomeDeoptimizationTarget() const {
return comparison()->CanBecomeDeoptimizationTarget();
@@ -3206,7 +3213,7 @@ class StaticCallInstr : public TemplateDefinition<0, Throws> {
return ic_data() == NULL ? 0 : ic_data()->AggregateCount();
}
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual bool CanBecomeDeoptimizationTarget() const {
// Static calls that are specialized by the optimizer (e.g. sqrt) need a
@@ -3257,7 +3264,7 @@ class LoadLocalInstr : public TemplateDefinition<0, NoThrow> {
const LocalVariable& local() const { return local_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const {
UNREACHABLE(); // Eliminated by SSA construction.
@@ -3303,7 +3310,7 @@ class DropTempsInstr : public Definition {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const {
UNREACHABLE(); // Eliminated by SSA construction.
@@ -3344,7 +3351,7 @@ class StoreLocalInstr : public TemplateDefinition<1, NoThrow> {
const LocalVariable& local() const { return local_; }
Value* value() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
void mark_dead() { is_dead_ = true; }
bool is_dead() const { return is_dead_; }
@@ -3401,7 +3408,7 @@ class NativeCallInstr : public TemplateDefinition<0, Throws> {
bool link_lazily() const { return link_lazily_; }
virtual TokenPosition token_pos() const { return token_pos_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::All(); }
@@ -3435,7 +3442,7 @@ class DebugStepCheckInstr : public TemplateInstruction<0, NoThrow> {
DECLARE_INSTRUCTION(DebugStepCheck)
virtual TokenPosition token_pos() const { return token_pos_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::All(); }
virtual Instruction* Canonicalize(FlowGraph* flow_graph);
@@ -3501,7 +3508,7 @@ class StoreInstanceFieldInstr : public TemplateDefinition<2, NoThrow> {
(emit_store_barrier_ == kEmitStoreBarrier);
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
// May require a deoptimization target for input conversions.
virtual intptr_t DeoptimizationTarget() const { return GetDeoptId(); }
@@ -3552,7 +3559,7 @@ class GuardFieldInstr : public TemplateInstruction<1, NoThrow, Pure> {
const Field& field() const { return field_; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual bool CanBecomeDeoptimizationTarget() const {
// Ensure that we record kDeopt PC descriptor in unoptimized code.
return true;
@@ -3618,7 +3625,7 @@ class LoadStaticFieldInstr : public TemplateDefinition<1, NoThrow> {
Value* field_value() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool AllowsCSE() const { return StaticField().is_final(); }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -3654,7 +3661,7 @@ class StoreStaticFieldInstr : public TemplateDefinition<1, NoThrow> {
const Field& field() const { return field_; }
Value* value() const { return inputs_[kValuePos]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
// Currently CSE/LICM don't operate on any instructions that can be affected
// by stores/loads. LoadOptimizer handles loads separately. Hence stores
@@ -3716,7 +3723,7 @@ class LoadIndexedInstr : public TemplateDefinition<2, NoThrow> {
intptr_t class_id() const { return class_id_; }
bool aligned() const { return alignment_ == kAlignedAccess; }
- virtual bool CanDeoptimize() const {
+ virtual bool ComputeCanDeoptimize() const {
return GetDeoptId() != Thread::kNoDeoptId;
}
@@ -3787,7 +3794,7 @@ class LoadCodeUnitsInstr : public TemplateDefinition<2, NoThrow> {
return element_count() <= kSmiBits / (index_scale() * kBitsPerByte);
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return representation_; }
void set_representation(Representation repr) { representation_ = repr; }
@@ -3817,7 +3824,7 @@ class OneByteStringFromCharCodeInstr
Value* char_code() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool AttributesEqual(Instruction* other) const { return true; }
@@ -3838,7 +3845,7 @@ class StringToCharCodeInstr : public TemplateDefinition<1, NoThrow, Pure> {
Value* str() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool AttributesEqual(Instruction* other) const {
return other->AsStringToCharCode()->cid_ == cid_;
@@ -3866,7 +3873,7 @@ class StringInterpolateInstr : public TemplateDefinition<1, Throws> {
virtual CompileType ComputeType() const;
// Issues a static call to Dart code which calls toString on objects.
virtual EffectSet Effects() const { return EffectSet::All(); }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
const Function& CallFunction() const;
@@ -3910,7 +3917,7 @@ class StoreIndexedInstr : public TemplateDefinition<3, NoThrow> {
(emit_store_barrier_ == kEmitStoreBarrier);
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation RequiredInputRepresentation(intptr_t idx) const;
@@ -3947,7 +3954,7 @@ class BooleanNegateInstr : public TemplateDefinition<1, NoThrow> {
Value* value() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -3982,7 +3989,7 @@ class InstanceOfInstr : public TemplateDefinition<2, Throws> {
const AbstractType& type() const { return type_; }
virtual TokenPosition token_pos() const { return token_pos_; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -4028,7 +4035,7 @@ class AllocateObjectInstr : public TemplateDefinition<0, NoThrow> {
closure_function_ ^= function.raw();
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -4063,7 +4070,7 @@ class AllocateUninitializedContextInstr
virtual TokenPosition token_pos() const { return token_pos_; }
intptr_t num_context_variables() const { return num_context_variables_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -4150,7 +4157,7 @@ class MaterializeObjectInstr : public Definition {
return kNoRepresentation;
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
Location* locations() { return locations_; }
@@ -4207,7 +4214,7 @@ class CreateArrayInstr : public TemplateDefinition<2, Throws> {
// Throw needs environment, which is created only if instruction can
// deoptimize.
- virtual bool CanDeoptimize() const { return MayThrow(); }
+ virtual bool ComputeCanDeoptimize() const { return MayThrow(); }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -4246,7 +4253,7 @@ class LoadUntaggedInstr : public TemplateDefinition<1, NoThrow> {
Value* object() const { return inputs_[0]; }
intptr_t offset() const { return offset_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
virtual bool AttributesEqual(Instruction* other) const { return true; }
@@ -4268,7 +4275,7 @@ class LoadClassIdInstr : public TemplateDefinition<1, NoThrow> {
Value* object() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool AllowsCSE() const { return true; }
virtual EffectSet Dependencies() const {
@@ -4352,7 +4359,7 @@ class LoadFieldInstr : public TemplateDefinition<1, NoThrow> {
DECLARE_INSTRUCTION(LoadField)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual void InferRange(RangeAnalysis* analysis, Range* range);
@@ -4405,7 +4412,7 @@ class InstantiateTypeInstr : public TemplateDefinition<1, Throws> {
const AbstractType& type() const { return type_; }
virtual TokenPosition token_pos() const { return token_pos_; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -4442,7 +4449,7 @@ class InstantiateTypeArgumentsInstr : public TemplateDefinition<1, Throws> {
const Class& instantiator_class() const { return instantiator_class_; }
virtual TokenPosition token_pos() const { return token_pos_; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -4470,7 +4477,7 @@ class AllocateContextInstr : public TemplateDefinition<0, NoThrow> {
virtual TokenPosition token_pos() const { return token_pos_; }
intptr_t num_context_variables() const { return num_context_variables_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -4498,7 +4505,7 @@ class InitStaticFieldInstr : public TemplateInstruction<1, Throws> {
DECLARE_INSTRUCTION(InitStaticField)
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::All(); }
virtual Instruction* Canonicalize(FlowGraph* flow_graph);
@@ -4523,7 +4530,7 @@ class CloneContextInstr : public TemplateDefinition<1, NoThrow> {
DECLARE_INSTRUCTION(CloneContext)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -4547,7 +4554,7 @@ class CheckEitherNonSmiInstr : public TemplateInstruction<2, NoThrow, Pure> {
DECLARE_INSTRUCTION(CheckEitherNonSmi)
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual Instruction* Canonicalize(FlowGraph* flow_graph);
@@ -4632,7 +4639,7 @@ class BoxInstr : public TemplateDefinition<1, NoThrow, Pure> {
DECLARE_INSTRUCTION(Box)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual intptr_t DeoptimizationTarget() const { return Thread::kNoDeoptId; }
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -4741,7 +4748,7 @@ class UnboxInstr : public TemplateDefinition<1, NoThrow, Pure> {
Value* value() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const {
+ virtual bool ComputeCanDeoptimize() const {
const intptr_t value_cid = value()->Type()->ToCid();
if (CanConvertSmi() && (value()->Type()->ToCid() == kSmiCid)) {
@@ -4843,7 +4850,7 @@ class UnboxUint32Instr : public UnboxInteger32Instr {
ASSERT(is_truncating());
}
- virtual bool CanDeoptimize() const;
+ virtual bool ComputeCanDeoptimize() const;
virtual void InferRange(RangeAnalysis* analysis, Range* range);
@@ -4861,7 +4868,7 @@ class UnboxInt32Instr : public UnboxInteger32Instr {
intptr_t deopt_id)
: UnboxInteger32Instr(kUnboxedInt32, truncation_mode, value, deopt_id) {}
- virtual bool CanDeoptimize() const;
+ virtual bool ComputeCanDeoptimize() const;
virtual void InferRange(RangeAnalysis* analysis, Range* range);
@@ -4909,7 +4916,7 @@ class MathUnaryInstr : public TemplateDefinition<1, NoThrow, Pure> {
Value* value() const { return inputs_[0]; }
MathUnaryKind kind() const { return kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedDouble; }
@@ -4977,7 +4984,7 @@ class CaseInsensitiveCompareUC16Instr
intptr_t class_id() const { return cid_; }
intptr_t index_scale() const { return Instance::ElementSizeFor(cid_); }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kTagged; }
@@ -5018,7 +5025,7 @@ class MathMinMaxInstr : public TemplateDefinition<2, NoThrow, Pure> {
intptr_t result_cid() const { return result_cid_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const {
if (result_cid() == kSmiCid) {
@@ -5073,7 +5080,7 @@ class BinaryDoubleOpInstr : public TemplateDefinition<2, NoThrow, Pure> {
virtual TokenPosition token_pos() const { return token_pos_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedDouble; }
@@ -5121,7 +5128,7 @@ class DoubleTestOpInstr : public TemplateComparison<1, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
ASSERT(idx == 0);
@@ -5170,7 +5177,7 @@ class BinaryFloat32x4OpInstr : public TemplateDefinition<2, NoThrow, Pure> {
Token::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5217,7 +5224,7 @@ class Simd32x4ShuffleInstr : public TemplateDefinition<1, NoThrow, Pure> {
intptr_t mask() const { return mask_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const {
if ((op_kind_ == MethodRecognizer::kFloat32x4ShuffleX) ||
@@ -5289,7 +5296,7 @@ class Simd32x4ShuffleMixInstr : public TemplateDefinition<2, NoThrow, Pure> {
intptr_t mask() const { return mask_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const {
if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
@@ -5351,7 +5358,7 @@ class Float32x4ConstructorInstr : public TemplateDefinition<4, NoThrow, Pure> {
Value* value2() const { return inputs_[2]; }
Value* value3() const { return inputs_[3]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5387,7 +5394,7 @@ class Float32x4SplatInstr : public TemplateDefinition<1, NoThrow, Pure> {
Value* value() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5419,7 +5426,7 @@ class Float32x4ZeroInstr : public TemplateDefinition<0, NoThrow, Pure> {
public:
Float32x4ZeroInstr() {}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5449,7 +5456,7 @@ class Float32x4ComparisonInstr : public TemplateDefinition<2, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedInt32x4; }
@@ -5496,7 +5503,7 @@ class Float32x4MinMaxInstr : public TemplateDefinition<2, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5543,7 +5550,7 @@ class Float32x4ScaleInstr : public TemplateDefinition<2, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5590,7 +5597,7 @@ class Float32x4SqrtInstr : public TemplateDefinition<1, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5635,7 +5642,7 @@ class Float32x4ZeroArgInstr : public TemplateDefinition<1, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5682,7 +5689,7 @@ class Float32x4ClampInstr : public TemplateDefinition<3, NoThrow, Pure> {
Value* lower() const { return inputs_[1]; }
Value* upper() const { return inputs_[2]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5725,7 +5732,7 @@ class Float32x4WithInstr : public TemplateDefinition<2, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5775,7 +5782,7 @@ class Simd64x2ShuffleInstr : public TemplateDefinition<1, NoThrow, Pure> {
intptr_t mask() const { return mask_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const {
if ((op_kind_ == MethodRecognizer::kFloat64x2GetX) ||
@@ -5829,7 +5836,7 @@ class Float32x4ToInt32x4Instr : public TemplateDefinition<1, NoThrow, Pure> {
Value* left() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedInt32x4; }
@@ -5865,7 +5872,7 @@ class Float32x4ToFloat64x2Instr : public TemplateDefinition<1, NoThrow, Pure> {
Value* left() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat64x2; }
@@ -5901,7 +5908,7 @@ class Float64x2ToFloat32x4Instr : public TemplateDefinition<1, NoThrow, Pure> {
Value* left() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -5939,7 +5946,7 @@ class Float64x2ConstructorInstr : public TemplateDefinition<2, NoThrow, Pure> {
Value* value0() const { return inputs_[0]; }
Value* value1() const { return inputs_[1]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat64x2; }
@@ -5975,7 +5982,7 @@ class Float64x2SplatInstr : public TemplateDefinition<1, NoThrow, Pure> {
Value* value() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat64x2; }
@@ -6006,7 +6013,7 @@ class Float64x2ZeroInstr : public TemplateDefinition<0, NoThrow, Pure> {
public:
Float64x2ZeroInstr() {}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat64x2; }
@@ -6034,7 +6041,7 @@ class Float64x2ZeroArgInstr : public TemplateDefinition<1, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const {
if (op_kind() == MethodRecognizer::kFloat64x2GetSignMask) {
@@ -6087,7 +6094,7 @@ class Float64x2OneArgInstr : public TemplateDefinition<2, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat64x2; }
@@ -6145,7 +6152,7 @@ class Int32x4ConstructorInstr : public TemplateDefinition<4, NoThrow, Pure> {
Value* value2() const { return inputs_[2]; }
Value* value3() const { return inputs_[3]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedInt32x4; }
@@ -6192,7 +6199,7 @@ class Int32x4BoolConstructorInstr
Value* value2() const { return inputs_[2]; }
Value* value3() const { return inputs_[3]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedInt32x4; }
@@ -6232,7 +6239,7 @@ class Int32x4GetFlagInstr : public TemplateDefinition<1, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kTagged; }
@@ -6276,7 +6283,7 @@ class Simd32x4GetSignMaskInstr : public TemplateDefinition<1, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kTagged; }
@@ -6327,7 +6334,7 @@ class Int32x4SelectInstr : public TemplateDefinition<3, NoThrow, Pure> {
Value* trueValue() const { return inputs_[1]; }
Value* falseValue() const { return inputs_[2]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -6373,7 +6380,7 @@ class Int32x4SetFlagInstr : public TemplateDefinition<2, NoThrow, Pure> {
MethodRecognizer::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedInt32x4; }
@@ -6416,7 +6423,7 @@ class Int32x4ToFloat32x4Instr : public TemplateDefinition<1, NoThrow, Pure> {
Value* left() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat32x4; }
@@ -6459,7 +6466,7 @@ class BinaryInt32x4OpInstr : public TemplateDefinition<2, NoThrow, Pure> {
Token::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedInt32x4; }
@@ -6506,7 +6513,7 @@ class BinaryFloat64x2OpInstr : public TemplateDefinition<2, NoThrow, Pure> {
Token::Kind op_kind() const { return op_kind_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedFloat64x2; }
@@ -6581,7 +6588,9 @@ class UnarySmiOpInstr : public UnaryIntegerOpInstr {
UnarySmiOpInstr(Token::Kind op_kind, Value* value, intptr_t deopt_id)
: UnaryIntegerOpInstr(op_kind, value, deopt_id) {}
- virtual bool CanDeoptimize() const { return op_kind() == Token::kNEGATE; }
+ virtual bool ComputeCanDeoptimize() const {
+ return op_kind() == Token::kNEGATE;
+ }
virtual CompileType ComputeType() const;
@@ -6599,7 +6608,7 @@ class UnaryUint32OpInstr : public UnaryIntegerOpInstr {
ASSERT(op_kind == Token::kBIT_NOT);
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual CompileType ComputeType() const;
@@ -6624,7 +6633,7 @@ class UnaryMintOpInstr : public UnaryIntegerOpInstr {
ASSERT(op_kind == Token::kBIT_NOT);
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual CompileType ComputeType() const;
@@ -6658,7 +6667,7 @@ class CheckedSmiOpInstr : public TemplateDefinition<2, Throws> {
Value* left() const { return inputs_[0]; }
Value* right() const { return inputs_[1]; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual EffectSet Effects() const { return EffectSet::All(); }
@@ -6690,7 +6699,7 @@ class CheckedSmiComparisonInstr : public TemplateComparison<2, Throws> {
InstanceCallInstr* call() const { return call_; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Definition* Canonicalize(FlowGraph* flow_graph);
@@ -6768,26 +6777,6 @@ class BinaryIntegerOpInstr : public TemplateDefinition<2, NoThrow, Pure> {
virtual Definition* Canonicalize(FlowGraph* flow_graph);
- virtual bool AllowsDCE() const {
- switch (op_kind()) {
- case Token::kADD:
- case Token::kSUB:
- case Token::kMUL:
- case Token::kBIT_AND:
- case Token::kBIT_OR:
- case Token::kBIT_XOR:
- return true;
-
- case Token::kSHR:
- case Token::kSHL:
- // These instructions throw on negative shifts.
- return !CanDeoptimize();
-
- default:
- return false;
- }
- }
-
virtual bool AttributesEqual(Instruction* other) const;
virtual intptr_t DeoptimizationTarget() const { return GetDeoptId(); }
@@ -6820,7 +6809,7 @@ class BinarySmiOpInstr : public BinaryIntegerOpInstr {
intptr_t deopt_id)
: BinaryIntegerOpInstr(op_kind, left, right, deopt_id) {}
- virtual bool CanDeoptimize() const;
+ virtual bool ComputeCanDeoptimize() const;
virtual void InferRange(RangeAnalysis* analysis, Range* range);
virtual CompileType ComputeType() const;
@@ -6866,7 +6855,7 @@ class BinaryInt32OpInstr : public BinaryIntegerOpInstr {
#endif
}
- virtual bool CanDeoptimize() const;
+ virtual bool ComputeCanDeoptimize() const;
virtual Representation representation() const { return kUnboxedInt32; }
@@ -6895,7 +6884,7 @@ class BinaryUint32OpInstr : public BinaryIntegerOpInstr {
mark_truncating();
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedUint32; }
@@ -6923,7 +6912,7 @@ class ShiftUint32OpInstr : public BinaryIntegerOpInstr {
ASSERT((op_kind == Token::kSHR) || (op_kind == Token::kSHL));
}
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual Representation representation() const { return kUnboxedUint32; }
@@ -6949,7 +6938,7 @@ class BinaryMintOpInstr : public BinaryIntegerOpInstr {
intptr_t deopt_id)
: BinaryIntegerOpInstr(op_kind, left, right, deopt_id) {}
- virtual bool CanDeoptimize() const {
+ virtual bool ComputeCanDeoptimize() const {
return (can_overflow() &&
((op_kind() == Token::kADD) || (op_kind() == Token::kSUB))) ||
(op_kind() == Token::kMUL); // Deopt if inputs are not int32.
@@ -6982,7 +6971,7 @@ class ShiftMintOpInstr : public BinaryIntegerOpInstr {
ASSERT((op_kind == Token::kSHR) || (op_kind == Token::kSHL));
}
- virtual bool CanDeoptimize() const {
+ virtual bool ComputeCanDeoptimize() const {
return has_shift_count_check() ||
(can_overflow() && (op_kind() == Token::kSHL));
}
@@ -7021,7 +7010,7 @@ class UnaryDoubleOpInstr : public TemplateDefinition<1, NoThrow, Pure> {
DECLARE_INSTRUCTION(UnaryDoubleOp)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual intptr_t DeoptimizationTarget() const {
// Direct access since this instruction cannot deoptimize, and the deopt-id
@@ -7060,7 +7049,7 @@ class CheckStackOverflowInstr : public TemplateInstruction<0, NoThrow> {
DECLARE_INSTRUCTION(CheckStackOverflow)
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -7090,7 +7079,7 @@ class SmiToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> {
virtual Representation representation() const { return kUnboxedDouble; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool AttributesEqual(Instruction* other) const { return true; }
@@ -7117,7 +7106,7 @@ class Int32ToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> {
virtual Representation representation() const { return kUnboxedDouble; }
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool AttributesEqual(Instruction* other) const { return true; }
@@ -7151,7 +7140,7 @@ class MintToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> {
return GetDeoptId();
}
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool AttributesEqual(Instruction* other) const { return true; }
private:
@@ -7175,7 +7164,7 @@ class DoubleToIntegerInstr : public TemplateDefinition<1, Throws> {
virtual intptr_t ArgumentCount() const { return 1; }
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual EffectSet Effects() const { return EffectSet::None(); }
@@ -7200,7 +7189,7 @@ class DoubleToSmiInstr : public TemplateDefinition<1, NoThrow, Pure> {
DECLARE_INSTRUCTION(DoubleToSmi)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
ASSERT(idx == 0);
@@ -7232,7 +7221,7 @@ class DoubleToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> {
DECLARE_INSTRUCTION(DoubleToDouble)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedDouble; }
@@ -7267,7 +7256,7 @@ class DoubleToFloatInstr : public TemplateDefinition<1, NoThrow, Pure> {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const {
// This works since double is the representation that the typed array
@@ -7306,7 +7295,7 @@ class FloatToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedDouble; }
@@ -7344,7 +7333,7 @@ class InvokeMathCFunctionInstr : public PureDefinition {
DECLARE_INSTRUCTION(InvokeMathCFunction)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
virtual Representation representation() const { return kUnboxedDouble; }
@@ -7403,7 +7392,7 @@ class ExtractNthOutputInstr : public TemplateDefinition<1, NoThrow, Pure> {
DECLARE_INSTRUCTION(ExtractNthOutput)
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const { return false; }
+ virtual bool ComputeCanDeoptimize() const { return false; }
intptr_t index() const { return index_; }
@@ -7464,7 +7453,7 @@ class MergedMathInstr : public PureDefinition {
virtual CompileType ComputeType() const;
- virtual bool CanDeoptimize() const {
+ virtual bool ComputeCanDeoptimize() const {
if (kind_ == kTruncDivMod) {
return true;
} else {
@@ -7530,7 +7519,7 @@ class CheckClassInstr : public TemplateInstruction<1, NoThrow> {
DECLARE_INSTRUCTION(CheckClass)
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual TokenPosition token_pos() const { return token_pos_; }
@@ -7587,7 +7576,7 @@ class CheckSmiInstr : public TemplateInstruction<1, NoThrow, Pure> {
DECLARE_INSTRUCTION(CheckSmi)
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual Instruction* Canonicalize(FlowGraph* flow_graph);
@@ -7616,7 +7605,7 @@ class CheckClassIdInstr : public TemplateInstruction<1, NoThrow> {
DECLARE_INSTRUCTION(CheckClassId)
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
virtual Instruction* Canonicalize(FlowGraph* flow_graph);
@@ -7649,7 +7638,7 @@ class CheckArrayBoundInstr : public TemplateInstruction<2, NoThrow, Pure> {
DECLARE_INSTRUCTION(CheckArrayBound)
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
bool IsRedundant(const RangeBoundary& length);
@@ -7693,7 +7682,7 @@ class GenericCheckBoundInstr : public TemplateInstruction<2, Throws, NoCSE> {
DECLARE_INSTRUCTION(GenericCheckBound)
- virtual bool CanDeoptimize() const { return true; }
+ virtual bool ComputeCanDeoptimize() const { return true; }
// Give a name to the location/input indices.
enum { kLengthPos = 0, kIndexPos = 1 };
@@ -7731,7 +7720,7 @@ class UnboxedIntConverterInstr : public TemplateDefinition<1, NoThrow> {
Definition* Canonicalize(FlowGraph* flow_graph);
- virtual bool CanDeoptimize() const;
+ virtual bool ComputeCanDeoptimize() const;
virtual Representation representation() const { return to(); }
@@ -7777,7 +7766,7 @@ class GrowRegExpStackInstr : public TemplateDefinition<1, Throws> {
Value* typed_data_cell() const { return inputs_[0]; }
- virtual bool CanDeoptimize() const { return MayThrow(); }
+ virtual bool ComputeCanDeoptimize() const { return MayThrow(); }
virtual EffectSet Effects() const { return EffectSet::None(); }
DECLARE_INSTRUCTION(GrowRegExpStack);
@@ -7983,6 +7972,7 @@ class Environment : public ZoneAllocated {
private:
friend class ShallowIterator;
+ friend class BlockBuilder; // For Environment constructor.
Environment(intptr_t length,
intptr_t fixed_parameter_count,

Powered by Google App Engine
This is Rietveld 408576698