Flutter Engine
The Flutter Engine
Classes | Namespaces | Macros | Functions
inliner.cc File Reference
#include "vm/compiler/backend/inliner.h"
#include "vm/compiler/aot/aot_call_specializer.h"
#include "vm/compiler/aot/precompiler.h"
#include "vm/compiler/backend/block_scheduler.h"
#include "vm/compiler/backend/branch_optimizer.h"
#include "vm/compiler/backend/flow_graph_checker.h"
#include "vm/compiler/backend/flow_graph_compiler.h"
#include "vm/compiler/backend/il_printer.h"
#include "vm/compiler/backend/type_propagator.h"
#include "vm/compiler/compiler_pass.h"
#include "vm/compiler/compiler_timings.h"
#include "vm/compiler/frontend/flow_graph_builder.h"
#include "vm/compiler/frontend/kernel_to_il.h"
#include "vm/compiler/jit/compiler.h"
#include "vm/compiler/jit/jit_call_specializer.h"
#include "vm/compiler/method_recognizer.h"
#include "vm/flags.h"
#include "vm/kernel.h"
#include "vm/log.h"
#include "vm/longjump.h"
#include "vm/object.h"
#include "vm/object_store.h"

Go to the source code of this file.

Classes

struct  dart::NamedArgument
 
class  dart::CalleeGraphValidator
 
class  dart::GraphInfoCollector
 
struct  dart::InlinedInfo
 
class  dart::CallSites
 
struct  dart::CallSites::CallInfo< CallType >
 
struct  dart::InlinedCallData
 
class  dart::PolymorphicInliner
 
class  dart::CallSiteInliner
 
struct  dart::CallSiteInliner::InliningDecision
 

Namespaces

namespace  dart
 

Macros

#define Z   (zone())
 
#define TRACE_INLINING(statement)
 
#define PRINT_INLINING_TREE(comment, caller, target, instance_call)
 

Functions

 dart::DEFINE_FLAG (int, deoptimization_counter_inlining_threshold, 12, "How many times we allow deoptimization before we stop inlining.")
 
 dart::DEFINE_FLAG (bool, trace_inlining, false, "Trace inlining")
 
 dart::DEFINE_FLAG (charp, inlining_filter, nullptr, "Inline only in named function")
 
 dart::DEFINE_FLAG (int, inline_getters_setters_smaller_than, 10, "Always inline getters and setters that have fewer instructions")
 
 dart::DEFINE_FLAG (int, inlining_depth_threshold, 6, "Inline function calls up to threshold nesting depth")
 
 dart::DEFINE_FLAG (int, inlining_size_threshold, 25, "Always inline functions that have threshold or fewer instructions")
 
 dart::DEFINE_FLAG (int, inlining_callee_call_sites_threshold, 1, "Always inline functions containing threshold or fewer calls.")
 
 dart::DEFINE_FLAG (int, inlining_callee_size_threshold, 160, "Do not inline callees larger than threshold")
 
 dart::DEFINE_FLAG (int, inlining_small_leaf_size_threshold, 50, "Do not inline leaf callees larger than threshold")
 
 dart::DEFINE_FLAG (int, inlining_caller_size_threshold, 50000, "Stop inlining once caller reaches the threshold.")
 
 dart::DEFINE_FLAG (int, inlining_hotness, 10, "Inline only hotter calls, in percents (0 .. 100); " "default 10%: calls above-equal 10% of max-count are inlined.")
 
 dart::DEFINE_FLAG (int, inlining_recursion_depth_threshold, 1, "Inline recursive function calls up to threshold recursion depth.")
 
 dart::DEFINE_FLAG (int, max_inlined_per_depth, 500, "Max. number of inlined calls per depth")
 
 dart::DEFINE_FLAG (bool, print_inlining_tree, false, "Print inlining tree")
 
 dart::DECLARE_FLAG (int, max_deoptimization_counter_threshold)
 
 dart::DECLARE_FLAG (bool, print_flow_graph)
 
 dart::DECLARE_FLAG (bool, print_flow_graph_optimized)
 
static bool dart::IsCallRecursive (const Function &function, Definition *call)
 
static intptr_t dart::AotCallCountApproximation (intptr_t nesting_depth)
 
static bool dart::IsSmallLeafOrReduction (int inlining_depth, intptr_t call_site_instructions, FlowGraph *graph)
 
static bool dart::IsAThisCallThroughAnUncheckedEntryPoint (Definition *call)
 
static bool dart::CalleeParameterTypeMightBeMoreSpecific (BitVector *is_generic_covariant_impl, const FunctionType &interface_target_signature, const FunctionType &callee_signature, intptr_t first_arg_index, intptr_t arg_index)
 
static void dart::ReplaceParameterStubs (Zone *zone, FlowGraph *caller_graph, InlinedCallData *call_data, const TargetInfo *target_info)
 
static Instruction * dart::AppendInstruction (Instruction *first, Instruction *second)
 
static void dart::TracePolyInlining (const CallTargets &targets, intptr_t idx, intptr_t total, const char *message)
 
static bool dart::IsInlineableOperator (const Function &function)
 

Macro Definition Documentation

◆ PRINT_INLINING_TREE

#define PRINT_INLINING_TREE (   comment,
  caller,
  target,
  instance_call 
)
Value:
do { \
if (FLAG_print_inlining_tree) { \
inlined_info_.Add(InlinedInfo(caller, target, inlining_depth_, \
instance_call, comment)); \
} \
} while (false)
uint32_t * target

Definition at line 95 of file inliner.cc.

◆ TRACE_INLINING

#define TRACE_INLINING (   statement)
Value:
do { \
if (trace_inlining()) statement; \
} while (false)

Definition at line 90 of file inliner.cc.

◆ Z

#define Z   (zone())

Definition at line 88 of file inliner.cc.