Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Member Functions | Friends | List of all members
dart::kernel::FlowGraphBuilder Class Reference

#include <kernel_to_il.h>

Inheritance diagram for dart::kernel::FlowGraphBuilder:
dart::kernel::BaseFlowGraphBuilder

Classes

struct  ClosureCallInfo
 

Public Member Functions

 FlowGraphBuilder (ParsedFunction *parsed_function, ZoneGrowableArray< const ICData * > *ic_data_array, ZoneGrowableArray< intptr_t > *context_level_array, InlineExitCollector *exit_collector, bool optimizing, intptr_t osr_id, intptr_t first_block_id=1, bool inlining_unchecked_entry=false)
 
virtual ~FlowGraphBuilder ()
 
FlowGraphBuildGraph ()
 
- Public Member Functions inherited from dart::kernel::BaseFlowGraphBuilder
 BaseFlowGraphBuilder (const ParsedFunction *parsed_function, intptr_t last_used_block_id, intptr_t osr_id=DeoptId::kNone, ZoneGrowableArray< intptr_t > *context_level_array=nullptr, InlineExitCollector *exit_collector=nullptr, bool inlining_unchecked_entry=false)
 
const Arraycoverage_array () const
 
void FinalizeCoverageArray ()
 
Fragment LoadField (const Field &field, bool calls_initializer)
 
Fragment LoadNativeField (const Slot &native_field, InnerPointerAccess loads_inner_pointer, bool calls_initializer=false)
 
Fragment LoadNativeField (const Slot &native_field, bool calls_initializer=false)
 
Fragment LoadIndexed (classid_t class_id, intptr_t index_scale=compiler::target::kWordSize, bool index_unboxed=false, AlignmentType alignment=kAlignedAccess)
 
Fragment GenericCheckBound ()
 
Fragment LoadUntagged (intptr_t offset)
 
Fragment CalculateElementAddress (intptr_t index_scale)
 
Fragment ConvertUntaggedToUnboxed ()
 
Fragment ConvertUnboxedToUntagged ()
 
Fragment FloatToDouble ()
 
Fragment DoubleToFloat ()
 
void SetTempIndex (Definition *definition)
 
Fragment LoadLocal (LocalVariable *variable)
 
Fragment StoreLocal (LocalVariable *variable)
 
Fragment StoreLocal (TokenPosition position, LocalVariable *variable)
 
Fragment StoreLocalRaw (TokenPosition position, LocalVariable *variable)
 
Fragment LoadContextAt (int depth)
 
Fragment GuardFieldLength (const Field &field, intptr_t deopt_id)
 
Fragment GuardFieldClass (const Field &field, intptr_t deopt_id)
 
Fragment StoreNativeField (TokenPosition position, const Slot &slot, InnerPointerAccess stores_inner_pointer, StoreFieldInstr::Kind kind=StoreFieldInstr::Kind::kOther, StoreBarrierType emit_store_barrier=kEmitStoreBarrier, compiler::Assembler::MemoryOrder memory_order=compiler::Assembler::kRelaxedNonAtomic)
 
Fragment StoreNativeField (TokenPosition position, const Slot &slot, StoreFieldInstr::Kind kind=StoreFieldInstr::Kind::kOther, StoreBarrierType emit_store_barrier=kEmitStoreBarrier, compiler::Assembler::MemoryOrder memory_order=compiler::Assembler::kRelaxedNonAtomic)
 
Fragment StoreNativeField (const Slot &slot, InnerPointerAccess stores_inner_pointer, StoreFieldInstr::Kind kind=StoreFieldInstr::Kind::kOther, StoreBarrierType emit_store_barrier=kEmitStoreBarrier, compiler::Assembler::MemoryOrder memory_order=compiler::Assembler::kRelaxedNonAtomic)
 
Fragment StoreNativeField (const Slot &slot, StoreFieldInstr::Kind kind=StoreFieldInstr::Kind::kOther, StoreBarrierType emit_store_barrier=kEmitStoreBarrier, compiler::Assembler::MemoryOrder memory_order=compiler::Assembler::kRelaxedNonAtomic)
 
Fragment StoreField (const Field &field, StoreFieldInstr::Kind kind=StoreFieldInstr::Kind::kOther, StoreBarrierType emit_store_barrier=kEmitStoreBarrier)
 
Fragment StoreFieldGuarded (const Field &field, StoreFieldInstr::Kind kind=StoreFieldInstr::Kind::kOther)
 
Fragment LoadStaticField (const Field &field, bool calls_initializer)
 
Fragment RedefinitionWithType (const AbstractType &type)
 
Fragment ReachabilityFence ()
 
Fragment StoreStaticField (TokenPosition position, const Field &field)
 
Fragment StoreIndexed (classid_t class_id)
 
Fragment StoreIndexedTypedData (classid_t class_id, intptr_t index_scale, bool index_unboxed, AlignmentType alignment=kAlignedAccess)
 
Fragment Box (Representation from)
 
void Push (Definition *definition)
 
DefinitionPeek (intptr_t depth=0)
 
ValuePop ()
 
Fragment Drop ()
 
Fragment DropTempsPreserveTop (intptr_t num_temps_to_drop)
 
Fragment MakeTemp ()
 
LocalVariableMakeTemporary (const char *suffix=nullptr)
 
Fragment DropTemporary (LocalVariable **temp)
 
InputsArray GetArguments (int count)
 
TargetEntryInstrBuildTargetEntry ()
 
FunctionEntryInstrBuildFunctionEntry (GraphEntryInstr *graph_entry)
 
JoinEntryInstrBuildJoinEntry ()
 
JoinEntryInstrBuildJoinEntry (intptr_t try_index)
 
IndirectEntryInstrBuildIndirectEntry (intptr_t indirect_id, intptr_t try_index)
 
Fragment StrictCompare (TokenPosition position, Token::Kind kind, bool number_check=false)
 
Fragment StrictCompare (Token::Kind kind, bool number_check=false)
 
Fragment Goto (JoinEntryInstr *destination)
 
Fragment UnboxedIntConstant (int64_t value, Representation representation)
 
Fragment IntConstant (int64_t value)
 
Fragment Constant (const Object &value)
 
Fragment NullConstant ()
 
Fragment SmiRelationalOp (Token::Kind kind)
 
Fragment SmiBinaryOp (Token::Kind op, bool is_truncating=false)
 
Fragment BinaryIntegerOp (Token::Kind op, Representation representation, bool is_truncating=false)
 
Fragment LoadFpRelativeSlot (intptr_t offset, CompileType result_type, Representation representation=kTagged)
 
Fragment StoreFpRelativeSlot (intptr_t offset)
 
Fragment BranchIfTrue (TargetEntryInstr **then_entry, TargetEntryInstr **otherwise_entry, bool negate=false)
 
Fragment BranchIfNull (TargetEntryInstr **then_entry, TargetEntryInstr **otherwise_entry, bool negate=false)
 
Fragment BranchIfEqual (TargetEntryInstr **then_entry, TargetEntryInstr **otherwise_entry, bool negate=false)
 
Fragment BranchIfStrictEqual (TargetEntryInstr **then_entry, TargetEntryInstr **otherwise_entry)
 
Fragment Return (TokenPosition position)
 
Fragment CheckStackOverflow (TokenPosition position, intptr_t stack_depth, intptr_t loop_depth)
 
Fragment CheckStackOverflowInPrologue (TokenPosition position)
 
Fragment MemoryCopy (classid_t src_cid, classid_t dest_cid, bool unboxed_inputs, bool can_overlap=true)
 
Fragment TailCall (const Code &code)
 
Fragment Utf8Scan ()
 
intptr_t GetNextDeoptId ()
 
intptr_t AllocateTryIndex ()
 
intptr_t CurrentTryIndex () const
 
void SetCurrentTryIndex (intptr_t try_index)
 
bool IsCompiledForOsr ()
 
bool IsInlining () const
 
void InlineBailout (const char *reason)
 
Fragment LoadArgDescriptor ()
 
Fragment TestTypeArgsLen (Fragment eq_branch, Fragment neq_branch, intptr_t num_type_args)
 
Fragment TestDelayedTypeArgs (LocalVariable *closure, Fragment present, Fragment absent)
 
Fragment TestAnyTypeArgs (Fragment present, Fragment absent)
 
JoinEntryInstrBuildThrowNoSuchMethod ()
 
Fragment ThrowException (TokenPosition position)
 
Fragment AssertBool (TokenPosition position)
 
Fragment BooleanNegate ()
 
Fragment AllocateContext (const ZoneGrowableArray< const Slot * > &scope)
 
Fragment AllocateClosure (TokenPosition position, bool has_instantiator_type_args, bool is_generic, bool is_tear_off)
 
Fragment CreateArray ()
 
Fragment AllocateRecord (TokenPosition position, RecordShape shape)
 
Fragment AllocateSmallRecord (TokenPosition position, RecordShape shape)
 
Fragment AllocateTypedData (TokenPosition position, classid_t class_id)
 
Fragment InstantiateType (const AbstractType &type)
 
Fragment InstantiateTypeArguments (const TypeArguments &type_arguments)
 
Fragment InstantiateDynamicTypeArguments ()
 
Fragment LoadClassId ()
 
bool InliningUncheckedEntry () const
 
intptr_t GetStackDepth () const
 
Fragment AllocateObject (TokenPosition position, const Class &klass, intptr_t argument_count)
 
Fragment DebugStepCheck (TokenPosition position)
 
Fragment CheckNull (TokenPosition position, LocalVariable *receiver, const String &function_name)
 
Fragment CheckNullOptimized (const String &name, CheckNullInstr::ExceptionType exception_type, TokenPosition position=TokenPosition::kNoSource)
 
Fragment CheckNullOptimized (const String &function_name, TokenPosition position=TokenPosition::kNoSource)
 
Fragment CheckNotDeeplyImmutable (CheckWritableInstr::Kind kind)
 
void RecordUncheckedEntryPoint (GraphEntryInstr *graph_entry, FunctionEntryInstr *unchecked_entry)
 
Fragment BuildEntryPointsIntrospection ()
 
Fragment ClosureCall (const Function &target_function, TokenPosition position, intptr_t type_args_len, intptr_t argument_count, const Array &argument_names, const InferredTypeMetadata *result_type=nullptr)
 
Fragment AssertAssignable (TokenPosition position, const String &dst_name, AssertAssignableInstr::Kind kind=AssertAssignableInstr::kUnknown)
 
bool is_recording_context_levels () const
 
void set_context_depth (intptr_t context_level)
 
void reset_context_depth_for_deopt_id (intptr_t deopt_id)
 
Fragment InitConstantParameters ()
 
Fragment InvokeMathCFunction (MethodRecognizer::Kind recognized_kind, intptr_t num_inputs)
 
Fragment DoubleToInteger (MethodRecognizer::Kind recognized_kind)
 
Fragment UnaryDoubleOp (Token::Kind op)
 
Fragment RecordCoverage (TokenPosition position)
 
Fragment RecordBranchCoverage (TokenPosition position)
 
bool has_saved_args_desc_array ()
 
const Arraysaved_args_desc_array ()
 

Static Public Member Functions

static bool IsRecognizedMethodForFlowGraph (const Function &function)
 
static bool IsExpressionTempVarUsedInRecognizedMethodFlowGraph (const Function &function)
 
- Static Public Member Functions inherited from dart::kernel::BaseFlowGraphBuilder
static const FieldMayCloneField (Zone *zone, const Field &field)
 

Friends

class BreakableBlock
 
class CatchBlock
 
class ProgramState
 
class StreamingFlowGraphBuilder
 
class SwitchBlock
 
class TryCatchBlock
 
class TryFinallyBlock
 

Additional Inherited Members

- Protected Member Functions inherited from dart::kernel::BaseFlowGraphBuilder
intptr_t AllocateBlockId ()
 
Fragment RecordCoverageImpl (TokenPosition position, bool is_branch_coverage)
 
intptr_t GetCoverageIndexFor (intptr_t encoded_position)
 
- Protected Attributes inherited from dart::kernel::BaseFlowGraphBuilder
const ParsedFunctionparsed_function_
 
const Functionfunction_
 
Threadthread_
 
Zonezone_
 
intptr_t osr_id_
 
ZoneGrowableArray< intptr_t > * context_level_array_
 
intptr_t context_depth_
 
intptr_t last_used_block_id_
 
intptr_t current_try_index_
 
intptr_t next_used_try_index_
 
Valuestack_
 
InlineExitCollectorexit_collector_
 
const bool inlining_unchecked_entry_
 
const Arraysaved_args_desc_array_
 
GrowableArray< intptr_t > coverage_array_positions_
 
Arraycoverage_array_
 

Detailed Description

Definition at line 45 of file kernel_to_il.h.

Constructor & Destructor Documentation

◆ FlowGraphBuilder()

dart::kernel::FlowGraphBuilder::FlowGraphBuilder ( ParsedFunction parsed_function,
ZoneGrowableArray< const ICData * > *  ic_data_array,
ZoneGrowableArray< intptr_t > *  context_level_array,
InlineExitCollector exit_collector,
bool  optimizing,
intptr_t  osr_id,
intptr_t  first_block_id = 1,
bool  inlining_unchecked_entry = false 
)

Definition at line 64 of file kernel_to_il.cc.

73 : BaseFlowGraphBuilder(parsed_function,
74 first_block_id - 1,
75 osr_id,
76 context_level_array,
77 exit_collector,
78 inlining_unchecked_entry),
79 translation_helper_(Thread::Current()),
80 thread_(translation_helper_.thread()),
81 zone_(translation_helper_.zone()),
82 parsed_function_(parsed_function),
83 optimizing_(optimizing),
84 ic_data_array_(*ic_data_array),
85 next_function_id_(0),
86 loop_depth_(0),
87 try_depth_(0),
88 catch_depth_(0),
89 block_expression_depth_(0),
90 graph_entry_(nullptr),
91 scopes_(nullptr),
92 breakable_block_(nullptr),
93 switch_block_(nullptr),
94 try_catch_block_(nullptr),
95 try_finally_block_(nullptr),
96 catch_block_(nullptr),
97 prepend_type_arguments_(Function::ZoneHandle(zone_)) {
98 const auto& info = KernelProgramInfo::Handle(
99 Z, parsed_function->function().KernelProgramInfo());
100 H.InitFromKernelProgramInfo(info);
101}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213
#define Z
static Object & Handle()
Definition object.h:407
static Object & ZoneHandle()
Definition object.h:419
static Thread * Current()
Definition thread.h:361
BaseFlowGraphBuilder(const ParsedFunction *parsed_function, intptr_t last_used_block_id, intptr_t osr_id=DeoptId::kNone, ZoneGrowableArray< intptr_t > *context_level_array=nullptr, InlineExitCollector *exit_collector=nullptr, bool inlining_unchecked_entry=false)
Definition SkMD5.cpp:130

◆ ~FlowGraphBuilder()

dart::kernel::FlowGraphBuilder::~FlowGraphBuilder ( )
virtual

Definition at line 103 of file kernel_to_il.cc.

103{}

Member Function Documentation

◆ BuildGraph()

FlowGraph * dart::kernel::FlowGraphBuilder::BuildGraph ( )

Definition at line 799 of file kernel_to_il.cc.

799 {
800 const Function& function = parsed_function_->function();
801
802#ifdef DEBUG
803 // Check that all functions that are explicitly marked as recognized with the
804 // vm:recognized annotation are in fact recognized. The check can't be done on
805 // function creation, since the recognized status isn't set until later.
806 if ((function.IsRecognized() !=
808 !function.IsDynamicInvocationForwarder()) {
809 if (function.IsRecognized()) {
810 FATAL("Recognized method %s is not marked with the vm:recognized pragma.",
811 function.ToQualifiedCString());
812 } else {
813 FATAL("Non-recognized method %s is marked with the vm:recognized pragma.",
814 function.ToQualifiedCString());
815 }
816 }
817#endif
818
819 auto& kernel_data = TypedDataView::Handle(Z, function.KernelLibrary());
820 intptr_t kernel_data_program_offset = function.KernelLibraryOffset();
821
822 StreamingFlowGraphBuilder streaming_flow_graph_builder(
823 this, kernel_data, kernel_data_program_offset);
824 auto result = streaming_flow_graph_builder.BuildGraph();
825
827 result->set_coverage_array(coverage_array());
828
829 if (streaming_flow_graph_builder.num_ast_nodes() >
830 FLAG_huge_method_cutoff_in_ast_nodes) {
831 if (FLAG_print_huge_methods) {
833 "Warning: \'%s\' from \'%s\' is too large. Some optimizations have "
834 "been "
835 "disabled, and the compiler might run out of memory. "
836 "Consider refactoring this code into smaller components.\n",
837 function.QualifiedUserVisibleNameCString(),
839 Z, Class::Handle(Z, function.Owner()).library())
840 .url())
841 .ToCString());
842 }
843 result->mark_huge_method();
844 }
845
846 return result;
847}
static bool IsMarkedAsRecognized(const Function &function, const char *kind=nullptr)
static void static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
virtual const char * ToCString() const
Definition object.h:366
const Function & function() const
Definition parser.h:73
#define FATAL(error)
GAsyncResult * result
Dart_NativeFunction function
Definition fuchsia.cc:51

◆ IsExpressionTempVarUsedInRecognizedMethodFlowGraph()

bool dart::kernel::FlowGraphBuilder::IsExpressionTempVarUsedInRecognizedMethodFlowGraph ( const Function function)
static

Definition at line 1161 of file kernel_to_il.cc.

1162 {
1164 switch (function.recognized_kind()) {
1165 case MethodRecognizer::kStringBaseCodeUnitAt:
1166 return true;
1167 default:
1168 return false;
1169 }
1170}
static bool IsRecognizedMethodForFlowGraph(const Function &function)
#define ASSERT(E)

◆ IsRecognizedMethodForFlowGraph()

bool dart::kernel::FlowGraphBuilder::IsRecognizedMethodForFlowGraph ( const Function function)
static

Definition at line 958 of file kernel_to_il.cc.

959 {
960 const MethodRecognizer::Kind kind = function.recognized_kind();
961
962 switch (kind) {
963#define TYPED_DATA_GET_INDEXED_CASES(clazz) \
964 case MethodRecognizer::k##clazz##ArrayGetIndexed: \
965 FALL_THROUGH; \
966 case MethodRecognizer::kExternal##clazz##ArrayGetIndexed: \
967 FALL_THROUGH; \
968 case MethodRecognizer::k##clazz##ArrayViewGetIndexed: \
969 FALL_THROUGH;
971#undef TYPED_DATA_GET_INDEXED_CASES
972 case MethodRecognizer::kObjectArrayGetIndexed:
973 case MethodRecognizer::kGrowableArrayGetIndexed:
974 case MethodRecognizer::kRecord_fieldAt:
975 case MethodRecognizer::kRecord_fieldNames:
976 case MethodRecognizer::kRecord_numFields:
977 case MethodRecognizer::kSuspendState_clone:
978 case MethodRecognizer::kSuspendState_resume:
979 case MethodRecognizer::kTypedList_GetInt8:
980 case MethodRecognizer::kTypedList_SetInt8:
981 case MethodRecognizer::kTypedList_GetUint8:
982 case MethodRecognizer::kTypedList_SetUint8:
983 case MethodRecognizer::kTypedList_GetInt16:
984 case MethodRecognizer::kTypedList_SetInt16:
985 case MethodRecognizer::kTypedList_GetUint16:
986 case MethodRecognizer::kTypedList_SetUint16:
987 case MethodRecognizer::kTypedList_GetInt32:
988 case MethodRecognizer::kTypedList_SetInt32:
989 case MethodRecognizer::kTypedList_GetUint32:
990 case MethodRecognizer::kTypedList_SetUint32:
991 case MethodRecognizer::kTypedList_GetInt64:
992 case MethodRecognizer::kTypedList_SetInt64:
993 case MethodRecognizer::kTypedList_GetUint64:
994 case MethodRecognizer::kTypedList_SetUint64:
995 case MethodRecognizer::kTypedList_GetFloat32:
996 case MethodRecognizer::kTypedList_SetFloat32:
997 case MethodRecognizer::kTypedList_GetFloat64:
998 case MethodRecognizer::kTypedList_SetFloat64:
999 case MethodRecognizer::kTypedList_GetInt32x4:
1000 case MethodRecognizer::kTypedList_SetInt32x4:
1001 case MethodRecognizer::kTypedList_GetFloat32x4:
1002 case MethodRecognizer::kTypedList_SetFloat32x4:
1003 case MethodRecognizer::kTypedList_GetFloat64x2:
1004 case MethodRecognizer::kTypedList_SetFloat64x2:
1005 case MethodRecognizer::kTypedData_memMove1:
1006 case MethodRecognizer::kTypedData_memMove2:
1007 case MethodRecognizer::kTypedData_memMove4:
1008 case MethodRecognizer::kTypedData_memMove8:
1009 case MethodRecognizer::kTypedData_memMove16:
1010 case MethodRecognizer::kTypedData_ByteDataView_factory:
1011 case MethodRecognizer::kTypedData_Int8ArrayView_factory:
1012 case MethodRecognizer::kTypedData_Uint8ArrayView_factory:
1013 case MethodRecognizer::kTypedData_Uint8ClampedArrayView_factory:
1014 case MethodRecognizer::kTypedData_Int16ArrayView_factory:
1015 case MethodRecognizer::kTypedData_Uint16ArrayView_factory:
1016 case MethodRecognizer::kTypedData_Int32ArrayView_factory:
1017 case MethodRecognizer::kTypedData_Uint32ArrayView_factory:
1018 case MethodRecognizer::kTypedData_Int64ArrayView_factory:
1019 case MethodRecognizer::kTypedData_Uint64ArrayView_factory:
1020 case MethodRecognizer::kTypedData_Float32ArrayView_factory:
1021 case MethodRecognizer::kTypedData_Float64ArrayView_factory:
1022 case MethodRecognizer::kTypedData_Float32x4ArrayView_factory:
1023 case MethodRecognizer::kTypedData_Int32x4ArrayView_factory:
1024 case MethodRecognizer::kTypedData_Float64x2ArrayView_factory:
1025 case MethodRecognizer::kTypedData_UnmodifiableByteDataView_factory:
1026 case MethodRecognizer::kTypedData_UnmodifiableInt8ArrayView_factory:
1027 case MethodRecognizer::kTypedData_UnmodifiableUint8ArrayView_factory:
1028 case MethodRecognizer::kTypedData_UnmodifiableUint8ClampedArrayView_factory:
1029 case MethodRecognizer::kTypedData_UnmodifiableInt16ArrayView_factory:
1030 case MethodRecognizer::kTypedData_UnmodifiableUint16ArrayView_factory:
1031 case MethodRecognizer::kTypedData_UnmodifiableInt32ArrayView_factory:
1032 case MethodRecognizer::kTypedData_UnmodifiableUint32ArrayView_factory:
1033 case MethodRecognizer::kTypedData_UnmodifiableInt64ArrayView_factory:
1034 case MethodRecognizer::kTypedData_UnmodifiableUint64ArrayView_factory:
1035 case MethodRecognizer::kTypedData_UnmodifiableFloat32ArrayView_factory:
1036 case MethodRecognizer::kTypedData_UnmodifiableFloat64ArrayView_factory:
1037 case MethodRecognizer::kTypedData_UnmodifiableFloat32x4ArrayView_factory:
1038 case MethodRecognizer::kTypedData_UnmodifiableInt32x4ArrayView_factory:
1039 case MethodRecognizer::kTypedData_UnmodifiableFloat64x2ArrayView_factory:
1040 case MethodRecognizer::kTypedData_Int8Array_factory:
1041 case MethodRecognizer::kTypedData_Uint8Array_factory:
1042 case MethodRecognizer::kTypedData_Uint8ClampedArray_factory:
1043 case MethodRecognizer::kTypedData_Int16Array_factory:
1044 case MethodRecognizer::kTypedData_Uint16Array_factory:
1045 case MethodRecognizer::kTypedData_Int32Array_factory:
1046 case MethodRecognizer::kTypedData_Uint32Array_factory:
1047 case MethodRecognizer::kTypedData_Int64Array_factory:
1048 case MethodRecognizer::kTypedData_Uint64Array_factory:
1049 case MethodRecognizer::kTypedData_Float32Array_factory:
1050 case MethodRecognizer::kTypedData_Float64Array_factory:
1051 case MethodRecognizer::kTypedData_Float32x4Array_factory:
1052 case MethodRecognizer::kTypedData_Int32x4Array_factory:
1053 case MethodRecognizer::kTypedData_Float64x2Array_factory:
1054 case MethodRecognizer::kMemCopy:
1055 case MethodRecognizer::kFfiLoadInt8:
1056 case MethodRecognizer::kFfiLoadInt16:
1057 case MethodRecognizer::kFfiLoadInt32:
1058 case MethodRecognizer::kFfiLoadInt64:
1059 case MethodRecognizer::kFfiLoadUint8:
1060 case MethodRecognizer::kFfiLoadUint16:
1061 case MethodRecognizer::kFfiLoadUint32:
1062 case MethodRecognizer::kFfiLoadUint64:
1063 case MethodRecognizer::kFfiLoadFloat:
1064 case MethodRecognizer::kFfiLoadFloatUnaligned:
1065 case MethodRecognizer::kFfiLoadDouble:
1066 case MethodRecognizer::kFfiLoadDoubleUnaligned:
1067 case MethodRecognizer::kFfiLoadPointer:
1068 case MethodRecognizer::kFfiNativeCallbackFunction:
1069 case MethodRecognizer::kFfiNativeAsyncCallbackFunction:
1070 case MethodRecognizer::kFfiNativeIsolateLocalCallbackFunction:
1071 case MethodRecognizer::kFfiStoreInt8:
1072 case MethodRecognizer::kFfiStoreInt16:
1073 case MethodRecognizer::kFfiStoreInt32:
1074 case MethodRecognizer::kFfiStoreInt64:
1075 case MethodRecognizer::kFfiStoreUint8:
1076 case MethodRecognizer::kFfiStoreUint16:
1077 case MethodRecognizer::kFfiStoreUint32:
1078 case MethodRecognizer::kFfiStoreUint64:
1079 case MethodRecognizer::kFfiStoreFloat:
1080 case MethodRecognizer::kFfiStoreFloatUnaligned:
1081 case MethodRecognizer::kFfiStoreDouble:
1082 case MethodRecognizer::kFfiStoreDoubleUnaligned:
1083 case MethodRecognizer::kFfiStorePointer:
1084 case MethodRecognizer::kFfiFromAddress:
1085 case MethodRecognizer::kFfiGetAddress:
1086 case MethodRecognizer::kFfiAsExternalTypedDataInt8:
1087 case MethodRecognizer::kFfiAsExternalTypedDataInt16:
1088 case MethodRecognizer::kFfiAsExternalTypedDataInt32:
1089 case MethodRecognizer::kFfiAsExternalTypedDataInt64:
1090 case MethodRecognizer::kFfiAsExternalTypedDataUint8:
1091 case MethodRecognizer::kFfiAsExternalTypedDataUint16:
1092 case MethodRecognizer::kFfiAsExternalTypedDataUint32:
1093 case MethodRecognizer::kFfiAsExternalTypedDataUint64:
1094 case MethodRecognizer::kFfiAsExternalTypedDataFloat:
1095 case MethodRecognizer::kFfiAsExternalTypedDataDouble:
1096 case MethodRecognizer::kGetNativeField:
1097 case MethodRecognizer::kFinalizerBase_exchangeEntriesCollectedWithNull:
1098 case MethodRecognizer::kFinalizerBase_getIsolateFinalizers:
1099 case MethodRecognizer::kFinalizerBase_setIsolate:
1100 case MethodRecognizer::kFinalizerBase_setIsolateFinalizers:
1101 case MethodRecognizer::kFinalizerEntry_allocate:
1102 case MethodRecognizer::kFinalizerEntry_getExternalSize:
1103 case MethodRecognizer::kCheckNotDeeplyImmutable:
1104 case MethodRecognizer::kObjectEquals:
1105 case MethodRecognizer::kStringBaseCodeUnitAt:
1106 case MethodRecognizer::kStringBaseLength:
1107 case MethodRecognizer::kStringBaseIsEmpty:
1108 case MethodRecognizer::kClassIDgetID:
1109 case MethodRecognizer::kGrowableArrayAllocateWithData:
1110 case MethodRecognizer::kGrowableArrayCapacity:
1111 case MethodRecognizer::kObjectArrayAllocate:
1112 case MethodRecognizer::kCopyRangeFromUint8ListToOneByteString:
1113 case MethodRecognizer::kImmutableLinkedHashBase_setIndexStoreRelease:
1114 case MethodRecognizer::kFfiAbi:
1115 case MethodRecognizer::kUtf8DecoderScan:
1116 case MethodRecognizer::kHas63BitSmis:
1117 case MethodRecognizer::kExtensionStreamHasListener:
1118 case MethodRecognizer::kSmi_hashCode:
1119 case MethodRecognizer::kMint_hashCode:
1120 case MethodRecognizer::kDouble_hashCode:
1121#define CASE(method, slot) case MethodRecognizer::k##method:
1125#undef CASE
1126 return true;
1127 case MethodRecognizer::kDoubleToInteger:
1128 case MethodRecognizer::kDoubleMod:
1129 case MethodRecognizer::kDoubleRoundToDouble:
1130 case MethodRecognizer::kDoubleTruncateToDouble:
1131 case MethodRecognizer::kDoubleFloorToDouble:
1132 case MethodRecognizer::kDoubleCeilToDouble:
1133 case MethodRecognizer::kMathDoublePow:
1134 case MethodRecognizer::kMathSin:
1135 case MethodRecognizer::kMathCos:
1136 case MethodRecognizer::kMathTan:
1137 case MethodRecognizer::kMathAsin:
1138 case MethodRecognizer::kMathAcos:
1139 case MethodRecognizer::kMathAtan:
1140 case MethodRecognizer::kMathAtan2:
1141 case MethodRecognizer::kMathExp:
1142 case MethodRecognizer::kMathLog:
1143 case MethodRecognizer::kMathSqrt:
1145 case MethodRecognizer::kDoubleCeilToInt:
1146 case MethodRecognizer::kDoubleFloorToInt:
1147 if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
1148#if defined(TARGET_ARCH_X64)
1149 return CompilerState::Current().is_aot() || FLAG_target_unknown_cpu;
1150#elif defined(TARGET_ARCH_ARM64) || defined(TARGET_ARCH_RISCV32) || \
1151 defined(TARGET_ARCH_RISCV64)
1152 return true;
1153#else
1154 return false;
1155#endif
1156 default:
1157 return false;
1158 }
1159}
#define DART_CLASS_LIST_TYPED_DATA(V)
Definition class_id.h:177
static CompilerState & Current()
static bool SupportsUnboxedDoubles()
#define CASE(Arity, Mask, Name, Args, Result)
#define LOAD_NATIVE_FIELD(V)
#define STORE_NATIVE_FIELD_NO_BARRIER(V)
#define STORE_NATIVE_FIELD(V)
#define TYPED_DATA_GET_INDEXED_CASES(clazz)

Friends And Related Symbol Documentation

◆ BreakableBlock

friend class BreakableBlock
friend

Definition at line 639 of file kernel_to_il.h.

◆ CatchBlock

friend class CatchBlock
friend

Definition at line 640 of file kernel_to_il.h.

◆ ProgramState

friend class ProgramState
friend

Definition at line 641 of file kernel_to_il.h.

◆ StreamingFlowGraphBuilder

friend class StreamingFlowGraphBuilder
friend

Definition at line 642 of file kernel_to_il.h.

◆ SwitchBlock

friend class SwitchBlock
friend

Definition at line 643 of file kernel_to_il.h.

◆ TryCatchBlock

friend class TryCatchBlock
friend

Definition at line 644 of file kernel_to_il.h.

◆ TryFinallyBlock

friend class TryFinallyBlock
friend

Definition at line 645 of file kernel_to_il.h.


The documentation for this class was generated from the following files: