5#ifndef V8_COMPILER_WASM_GRAPH_ASSEMBLER_H_
6#define V8_COMPILER_WASM_GRAPH_ASSEMBLER_H_
8#if !V8_ENABLE_WEBASSEMBLY
9#error This header should only be included if WebAssembly is enabled.
21 bool needs_frame_state =
false,
37 template <
typename... Args>
42 builtin,
temp_zone(), StubCallMode::kCallWasmRuntimeStub,
false,
47 return Call(call_descriptor, call_target,
args...);
51 static_assert(std::is_same<Smi, BuiltinPtr>(),
"BuiltinPtr must be Smi");
55 template <
typename... Args>
61 template <
typename... Args>
209 Node* fixed_array,
Node* index_intptr,
319 const bool has_frame_state =
false;
327 const bool has_frame_state =
false;
338 template <
typename... Args>
345 return Call(call_descriptor, call_target,
args...);
static V8_INLINE constexpr Address IntegralToSmi(T value)
static constexpr MachineType AnyTagged()
static constexpr MachineType TaggedSigned()
static constexpr MachineType TaggedPointer()
Node * IntPtrConstant(intptr_t value)
MachineGraph * mcgraph() const
Node * Int64Constant(int64_t value)
TNode< Object > Call(const CallDescriptor *call_descriptor, int inputs_size, Node **inputs)
CommonOperatorBuilder * common() const
Node * Int32Constant(int32_t value)
Node * AddNode(Node *node)
Node * RelocatableWasmBuiltinCallTarget(Builtin builtin)
static void MergeControlToEnd(TFGraph *graph, CommonOperatorBuilder *common, Node *node)
constexpr IrOpcode::Value opcode() const
base::Flags< Property, uint8_t > Properties
Node * NewNode(const Operator *op, int input_count, Node *const *inputs, bool incomplete=false)
Node * BuildChangeSmiToInt32(Node *value)
Node * SmiConstant(Tagged_t value)
Node * ArrayLength(Node *array, CheckForNull null_check)
Node * WasmTypeCast(Node *object, Node *rtt, WasmTypeCheckConfig config)
Node * BuildChangeInt32ToSmi(Node *value)
Node * LoadImmutableFromObject(MachineType type, Node *base, Node *offset)
Node * IsSmi(Node *object)
Node * StoreFixedArrayElementAny(Node *array, int index, Node *value)
Node * WasmTypeCheck(Node *object, Node *rtt, WasmTypeCheckConfig config)
Node * LoadProtectedPointerFromObject(Node *object, int offset)
Node * LoadExportedFunctionIndexAsSmi(Node *exported_function_data)
WasmGraphAssembler(MachineGraph *mcgraph, Zone *zone)
Node * FieldOffset(const wasm::StructType *type, uint32_t field_index)
Node * BuildLoadExternalPointerFromObject(Node *object, int offset, ExternalPointerTagRange tag_range, Node *isolate_root)
Node * CallBuiltin(Builtin name, Operator::Properties properties, Args... args)
Node * LoadProtectedFixedArrayElement(Node *array, int index)
Node * LoadFunctionDataFromJSFunction(Node *js_function)
Node * LoadFromObject(MachineType type, Node *base, int offset)
void TrapIf(Node *condition, TrapId reason)
void ArraySet(Node *array, Node *index, Node *value, const wasm::ArrayType *type)
Node * WasmAnyConvertExtern(Node *object)
Node * LoadContextFromJSFunction(Node *js_function)
void TrapUnless(Node *condition, TrapId reason)
Node * BuildConvertUint32ToSmiWithSaturation(Node *value, uint32_t maxval)
Node * Branch(Node *cond, Node **true_node, Node **false_node, BranchHint hint)
Node * NumberConstant(double value)
Node * LoadImmutableFixedArrayElement(Node *fixed_array, Node *index_intptr, MachineType type=MachineType::AnyTagged())
Node * CallBuiltinWithFrameState(Builtin name, Operator::Properties properties, Node *frame_state, Args... args)
Node * LoadExportedFunctionInstanceData(Node *exported_function_data)
Node * LoadFromObject(MachineType type, Node *base, Node *offset)
Node * StoreToObject(ObjectAccess access, Node *base, Node *offset, Node *value)
Node * LoadFixedArrayElementAny(Node *array, int index)
Node * LoadTrustedDataFromInstanceObject(Node *instance_object)
Node * StoreFixedArrayElementSmi(Node *array, int index, Node *value)
Node * LoadImmutable(LoadRepresentation rep, Node *base, Node *offset)
Node * LoadWeakFixedArrayElement(Node *fixed_array, Node *index_intptr)
Node * LoadStringLength(Node *string)
Node * LoadInstanceType(Node *map)
Node * WasmExternConvertAny(Node *object)
Node * IsDataRefMap(Node *map)
Node * WasmTypeCastAbstract(Node *object, WasmTypeCheckConfig config)
Node * BuildChangeIntPtrToInt64(Node *value)
SimplifiedOperatorBuilder * simplified() override
Node * BuildDecodeTrustedPointer(Node *handle, IndirectPointerTag tag)
Node * LoadWasmCodePointer(Node *code_pointer)
Node * LoadProtectedPointerFromObject(Node *object, Node *offset)
Node * CallBuiltinImpl(Builtin name, bool needs_frame_state, Operator::Properties properties, Args... args)
Node * BuildChangeInt32ToIntPtr(Node *value)
SimplifiedOperatorBuilder simplified_
Node * LoadFixedArrayElementPtr(Node *array, int index)
Node * BuildChangeUint31ToSmi(Node *value)
Node * InitializeImmutableInObject(ObjectAccess access, Node *base, int offset, Node *value)
Node * BuildChangeUint32ToUintPtr(Node *node)
Node * Allocate(int size)
Node * BuildDecodeSandboxedExternalPointer(Node *handle, ExternalPointerTagRange tag_range, Node *isolate_root)
Node * GetBuiltinPointerTarget(Builtin builtin)
Node * LoadImmutableTrustedPointerFromObject(Node *object, int offset, IndirectPointerTag tag)
Node * IsNull(Node *object, wasm::ValueType type)
Node * BuildTruncateIntPtrToInt32(Node *value)
Node * BuildChangeSmiToIntPtr(Node *value)
Node * BuildSmiShiftBitsConstant32()
Node * LoadJSArrayElements(Node *js_array)
Node * CallBuiltinThroughJumptable(Builtin builtin, Operator::Properties properties, Args... args)
Node * StoreToObject(ObjectAccess access, Node *base, int offset, Node *value)
Node * ArrayGet(Node *array, Node *index, const wasm::ArrayType *type, bool is_signed)
Node * LoadFixedArrayLengthAsSmi(Node *fixed_array)
Node * WasmTypeCheckAbstract(Node *object, WasmTypeCheckConfig config)
Node * StringAsWtf16(Node *string)
void StoreMap(Node *heap_object, Node *map)
void MergeControlToEnd(Node *control)
Node * LoadMap(Node *object)
Node * LoadByteArrayElement(Node *byte_array, Node *index_intptr, MachineType type)
void StructSet(Node *object, Node *value, const wasm::StructType *type, int field_index, CheckForNull null_check)
Node * InitializeImmutableInObject(ObjectAccess access, Node *base, Node *offset, Node *value)
Node * LoadImmutableProtectedPointerFromObject(Node *object, Node *offset)
Node * LoadImmutable(LoadRepresentation rep, Node *base, int offset)
Node * LoadFixedArrayElementSmi(Node *array, int index)
Node * LoadSharedFunctionInfo(Node *js_function)
Node * LoadTrustedPointerFromObject(Node *object, int offset, IndirectPointerTag tag)
Node * LoadFixedArrayElement(Node *fixed_array, Node *index_intptr, MachineType type=MachineType::AnyTagged())
std::pair< Node *, Node * > LoadTrustedPointerFromObjectTrapOnNull(Node *object, int offset, IndirectPointerTag tag)
Node * LoadWasmTypeInfo(Node *map)
void ArrayInitializeLength(Node *array, Node *length)
Node * StructGet(Node *object, const wasm::StructType *type, int field_index, bool is_signed, CheckForNull null_check)
Node * HasInstanceType(Node *heap_object, InstanceType type)
Node * WasmArrayElementOffset(Node *index, wasm::ValueType element_type)
Node * LoadImmutableFromObject(MachineType type, Node *base, int offset)
Node * StringPrepareForGetCodeunit(Node *string)
Node * IsNotNull(Node *object, wasm::ValueType type)
Node * StoreFixedArrayElement(Node *array, int index, Node *value, ObjectAccess access)
Node * BuildLoadExternalPointerFromObject(Node *object, int offset, Node *index, ExternalPointerTagRange tag_range, Node *isolate_root)
Node * AssertNotNull(Node *object, wasm::ValueType type, TrapId trap_id)
Node * LoadImmutableProtectedPointerFromObject(Node *object, int offset)
Node * BuildSmiShiftBitsConstant()
base::Vector< const DirectHandle< Object > > args
ObjectAccess ObjectAccessForGCStores(wasm::ValueType type)
CallDescriptor * GetBuiltinCallDescriptor(Builtin name, Zone *zone, StubCallMode stub_mode, bool needs_frame_state, Operator::Properties properties)
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
constexpr int kTaggedSize
kMemory0SizeOffset Address kNewAllocationLimitAddressOffset Address kOldAllocationLimitAddressOffset uint8_t kGlobalsStartOffset kJumpTableStartOffset std::atomic< uint32_t > kTieringBudgetArrayOffset kDataSegmentStartsOffset kElementSegmentsOffset instance_object
bool is_signed(Condition cond)
#define DCHECK_EQ(v1, v2)