Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Namespaces | Macros | Functions
call_specializer.cc File Reference
#include "vm/compiler/call_specializer.h"
#include "vm/compiler/backend/flow_graph_compiler.h"
#include "vm/compiler/backend/inliner.h"
#include "vm/compiler/cha.h"
#include "vm/compiler/compiler_state.h"
#include "vm/compiler/compiler_timings.h"
#include "vm/cpu.h"

Go to the source code of this file.

Classes

class  dart::SimdLowering
 

Namespaces

namespace  dart
 

Macros

#define IG   (isolate_group())
 
#define Z   (zone())
 
#define INIT_HANDLE(iface, member_name, type, cid)
 
#define TRY_INLINE(iface, member_name, type, cid)
 
#define Z   (flow_graph->zone())
 

Functions

 dart::DECLARE_FLAG (bool, enable_simd_inline)
 
static void dart::RefineUseTypes (Definition *instr)
 
static bool dart::ShouldInlineSimd ()
 
static bool dart::CanUnboxDouble ()
 
static bool dart::CanConvertInt64ToDouble ()
 
static bool dart::IsNumberCid (intptr_t cid)
 
static bool dart::ShouldSpecializeForDouble (const BinaryFeedback &binary_feedback)
 
static bool dart::IsLengthOneString (Definition *d)
 
static bool dart::SmiFitsInDouble ()
 
static bool dart::CidTestResultsContains (const ZoneGrowableArray< intptr_t > &results, intptr_t test_cid)
 
static void dart::TryAddTest (ZoneGrowableArray< intptr_t > *results, intptr_t test_cid, bool result)
 
static void dart::PurgeNegativeTestCidsEntries (ZoneGrowableArray< intptr_t > *results)
 
static bool dart::IsSmiValue (Value *val, intptr_t *int_val)
 
static CompileTypedart::ResultType (Definition *call)
 
static bool dart::InlineTypedDataIndexCheck (FlowGraph *flow_graph, Instruction *call, Definition *receiver, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result, const String &symbol)
 
static intptr_t dart::PrepareInlineIndexedOp (FlowGraph *flow_graph, Instruction *call, intptr_t array_cid, Definition **array, Definition **index, Instruction **cursor)
 
static bool dart::InlineGetIndexed (FlowGraph *flow_graph, bool can_speculate, bool is_dynamic_call, MethodRecognizer::Kind kind, Definition *call, Definition *receiver, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static bool dart::InlineSetIndexed (FlowGraph *flow_graph, MethodRecognizer::Kind kind, const Function &target, Instruction *call, Definition *receiver, const InstructionSource &source, CallSpecializer::ExactnessInfo *exactness, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static bool dart::InlineDoubleOp (FlowGraph *flow_graph, Token::Kind op_kind, Instruction *call, Definition *receiver, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static bool dart::InlineDoubleTestOp (FlowGraph *flow_graph, Instruction *call, Definition *receiver, MethodRecognizer::Kind kind, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static bool dart::InlineGrowableArraySetter (FlowGraph *flow_graph, const Slot &field, StoreBarrierType store_barrier_type, Instruction *call, Definition *receiver, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static bool dart::InlineLoadClassId (FlowGraph *flow_graph, Instruction *call, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static Definitiondart::PrepareInlineStringIndexOp (FlowGraph *flow_graph, Instruction *call, intptr_t cid, Definition *str, Definition *index, Instruction *cursor)
 
static bool dart::InlineStringBaseCharAt (FlowGraph *flow_graph, Instruction *call, Definition *receiver, intptr_t cid, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static bool dart::InlineStringBaseCodeUnitAt (FlowGraph *flow_graph, Instruction *call, Definition *receiver, intptr_t cid, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static bool dart::CheckMask (Definition *definition, intptr_t *mask_ptr)
 
static bool dart::InlineSimdOp (FlowGraph *flow_graph, bool is_dynamic_call, Instruction *call, Definition *receiver, MethodRecognizer::Kind kind, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 
static Instructiondart::InlineMul (FlowGraph *flow_graph, Instruction *cursor, Definition *x, Definition *y)
 
static bool dart::InlineMathIntPow (FlowGraph *flow_graph, Instruction *call, GraphEntryInstr *graph_entry, FunctionEntryInstr **entry, Instruction **last, Definition **result)
 

Macro Definition Documentation

◆ IG

#define IG   (isolate_group())

Definition at line 19 of file call_specializer.cc.

◆ INIT_HANDLE

#define INIT_HANDLE (   iface,
  member_name,
  type,
  cid 
)
Value:
td_class = typed_data.LookupClass(Symbols::iface()); \
ASSERT(!td_class.IsNull()); \
direct_implementors = td_class.direct_implementors(); \
member_name = td_class.RareType();

◆ TRY_INLINE

#define TRY_INLINE (   iface,
  member_name,
  type,
  cid 
)
Value:
if (!member_name.IsNull()) { \
auto const rep = RepresentationUtils::RepresentationOfArrayElement(cid); \
const bool is_float_access = \
rep == kUnboxedFloat || rep == kUnboxedDouble; \
if (receiver_type->IsAssignableTo(member_name)) { \
if (is_length_getter) { \
type_class = member_name.type_class(); \
ReplaceWithLengthGetter(call); \
} else if (is_index_get) { \
if (is_float_access && !FlowGraphCompiler::SupportsUnboxedDoubles()) { \
return; \
} \
if (!index_type->IsNullableInt()) return; \
type_class = member_name.type_class(); \
ReplaceWithIndexGet(call, cid); \
} else { \
if (is_float_access && !FlowGraphCompiler::SupportsUnboxedDoubles()) { \
return; \
} \
if (!index_type->IsNullableInt()) return; \
if (!value_type->IsAssignableTo(type)) return; \
type_class = member_name.type_class(); \
ReplaceWithIndexSet(call, cid); \
} \
return; \
} \
}

◆ Z [1/2]

#define Z   (zone())

Definition at line 20 of file call_specializer.cc.

◆ Z [2/2]

#define Z   (flow_graph->zone())

Definition at line 20 of file call_specializer.cc.