Index: runtime/vm/flow_graph_optimizer.cc |
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc |
index 1ad25c8fdb3cb9a10db529c8bb9fdc8d1ff87633..fa5649ffc593681a88dd8072a9c0856f475ba8f7 100644 |
--- a/runtime/vm/flow_graph_optimizer.cc |
+++ b/runtime/vm/flow_graph_optimizer.cc |
@@ -20,7 +20,6 @@ |
#include "vm/intermediate_language.h" |
#include "vm/object_store.h" |
#include "vm/parser.h" |
-#include "vm/precompiler.h" |
#include "vm/resolver.h" |
#include "vm/scopes.h" |
#include "vm/stack_frame.h" |
@@ -28,28 +27,6 @@ |
namespace dart { |
-DEFINE_FLAG(int, getter_setter_ratio, 13, |
- "Ratio of getter/setter usage used for double field unboxing heuristics"); |
-DEFINE_FLAG(bool, guess_icdata_cid, true, |
- "Artificially create type feedback for arithmetic etc. operations" |
- " by guessing the other unknown argument cid"); |
-DEFINE_FLAG(int, max_polymorphic_checks, 4, |
- "Maximum number of polymorphic check, otherwise it is megamorphic."); |
-DEFINE_FLAG(int, max_equality_polymorphic_checks, 32, |
- "Maximum number of polymorphic checks in equality operator," |
- " otherwise use megamorphic dispatch."); |
-DEFINE_FLAG(bool, merge_sin_cos, false, "Merge sin/cos into sincos"); |
-DEFINE_FLAG(bool, trace_optimization, false, "Print optimization details."); |
-DEFINE_FLAG(bool, truncating_left_shift, true, |
- "Optimize left shift to truncate if possible"); |
-DEFINE_FLAG(bool, use_cha_deopt, true, |
- "Use class hierarchy analysis even if it can cause deoptimization."); |
- |
-DECLARE_FLAG(bool, precompilation); |
-DECLARE_FLAG(bool, polymorphic_with_deopt); |
-DECLARE_FLAG(bool, trace_cha); |
-DECLARE_FLAG(bool, trace_field_guards); |
- |
// Quick access to the current isolate and zone. |
#define I (isolate()) |
#define Z (zone()) |
@@ -75,34 +52,6 @@ void FlowGraphOptimizer::ApplyICData() { |
} |
-void FlowGraphOptimizer::PopulateWithICData() { |
- ASSERT(current_iterator_ == NULL); |
- for (BlockIterator block_it = flow_graph_->reverse_postorder_iterator(); |
- !block_it.Done(); |
- block_it.Advance()) { |
- ForwardInstructionIterator it(block_it.Current()); |
- for (; !it.Done(); it.Advance()) { |
- Instruction* instr = it.Current(); |
- if (instr->IsInstanceCall()) { |
- InstanceCallInstr* call = instr->AsInstanceCall(); |
- if (!call->HasICData()) { |
- const Array& arguments_descriptor = |
- Array::Handle(zone(), |
- ArgumentsDescriptor::New(call->ArgumentCount(), |
- call->argument_names())); |
- const ICData& ic_data = ICData::ZoneHandle(zone(), ICData::New( |
- function(), call->function_name(), |
- arguments_descriptor, call->deopt_id(), |
- call->checked_argument_count())); |
- call->set_ic_data(&ic_data); |
- } |
- } |
- } |
- current_iterator_ = NULL; |
- } |
-} |
- |
- |
// Optimize instance calls using cid. This is called after optimizer |
// converted instance calls to instructions. Any remaining |
// instance calls are either megamorphic calls, cannot be optimized or |
@@ -218,29 +167,6 @@ bool FlowGraphOptimizer::TryCreateICData(InstanceCallInstr* call) { |
return true; |
} |
-#ifdef DART_PRECOMPILER |
- if (FLAG_precompilation && |
- (isolate()->object_store()->unique_dynamic_targets() != Array::null())) { |
- // Check if the target is unique. |
- Function& target_function = Function::Handle(Z); |
- Precompiler::GetUniqueDynamicTarget( |
- isolate(), call->function_name(), &target_function); |
- // Calls with named arguments must be resolved/checked at runtime. |
- String& error_message = String::Handle(Z); |
- if (!target_function.IsNull() && |
- !target_function.HasOptionalNamedParameters() && |
- target_function.AreValidArgumentCounts(call->ArgumentCount(), 0, |
- &error_message)) { |
- const intptr_t cid = Class::Handle(Z, target_function.Owner()).id(); |
- const ICData& ic_data = ICData::ZoneHandle(Z, |
- ICData::NewFrom(*call->ic_data(), 1)); |
- ic_data.AddReceiverCheck(cid, target_function); |
- call->set_ic_data(&ic_data); |
- return true; |
- } |
- } |
-#endif |
- |
// Check if getter or setter in function's class and class is currently leaf. |
if (FLAG_guess_icdata_cid && |
((call->token_kind() == Token::kGET) || |
@@ -2058,10 +1984,6 @@ bool FlowGraphOptimizer::TryInlineInstanceMethod(InstanceCallInstr* call) { |
bool FlowGraphOptimizer::TryInlineFloat32x4Constructor( |
StaticCallInstr* call, |
MethodRecognizer::Kind recognized_kind) { |
- if (FLAG_precompilation) { |
- // Cannot handle unboxed instructions. |
- return false; |
- } |
if (!ShouldInlineSimd()) { |
return false; |
} |
@@ -2105,10 +2027,6 @@ bool FlowGraphOptimizer::TryInlineFloat32x4Constructor( |
bool FlowGraphOptimizer::TryInlineFloat64x2Constructor( |
StaticCallInstr* call, |
MethodRecognizer::Kind recognized_kind) { |
- if (FLAG_precompilation) { |
- // Cannot handle unboxed instructions. |
- return false; |
- } |
if (!ShouldInlineSimd()) { |
return false; |
} |
@@ -2144,10 +2062,6 @@ bool FlowGraphOptimizer::TryInlineFloat64x2Constructor( |
bool FlowGraphOptimizer::TryInlineInt32x4Constructor( |
StaticCallInstr* call, |
MethodRecognizer::Kind recognized_kind) { |
- if (FLAG_precompilation) { |
- // Cannot handle unboxed instructions. |
- return false; |
- } |
if (!ShouldInlineSimd()) { |
return false; |
} |
@@ -2938,11 +2852,6 @@ void FlowGraphOptimizer::InstanceCallNoopt(InstanceCallInstr* instr) { |
// Tries to optimize instance call by replacing it with a faster instruction |
// (e.g, binary op, field load, ..). |
void FlowGraphOptimizer::VisitInstanceCall(InstanceCallInstr* instr) { |
- if (FLAG_precompilation) { |
- InstanceCallNoopt(instr); |
- return; |
- } |
- |
if (!instr->HasICData() || (instr->ic_data()->NumberOfUsedChecks() == 0)) { |
return; |
} |
@@ -3070,10 +2979,6 @@ void FlowGraphOptimizer::VisitStaticCall(StaticCallInstr* call) { |
break; |
} |
if (unary_kind != MathUnaryInstr::kIllegal) { |
- if (FLAG_precompilation) { |
- // TODO(srdjan): Adapt MathUnaryInstr to allow tagged inputs as well. |
- return; |
- } |
MathUnaryInstr* math_unary = |
new(Z) MathUnaryInstr(unary_kind, |
new(Z) Value(call->ArgumentAt(0)), |
@@ -3156,10 +3061,6 @@ void FlowGraphOptimizer::VisitStaticCall(StaticCallInstr* call) { |
case MethodRecognizer::kMathAcos: |
case MethodRecognizer::kMathAtan: |
case MethodRecognizer::kMathAtan2: { |
- if (FLAG_precompilation) { |
- // No UnboxDouble instructons allowed. |
- return; |
- } |
// InvokeMathCFunctionInstr requires unboxed doubles. UnboxDouble |
// instructions contain type checks and conversions to double. |
ZoneGrowableArray<Value*>* args = |