|
| | InstructionSelectorT (Zone *zone, size_t node_count, Linkage *linkage, InstructionSequence *sequence, turboshaft::Graph *schedule, source_position_table_t *source_positions, Frame *frame, InstructionSelector::EnableSwitchJumpTable enable_switch_jump_table, TickCounter *tick_counter, JSHeapBroker *broker, size_t *max_unoptimized_frame_height, size_t *max_pushed_argument_count, InstructionSelector::SourcePositionMode source_position_mode=InstructionSelector::kCallSourcePositions, Features features=SupportedFeatures(), InstructionSelector::EnableScheduling enable_scheduling=v8_flags.turbo_instruction_scheduling ? InstructionSelector::kEnableScheduling :InstructionSelector::kDisableScheduling, InstructionSelector::EnableRootsRelativeAddressing enable_roots_relative_addressing=InstructionSelector::kDisableRootsRelativeAddressing, InstructionSelector::EnableTraceTurboJson trace_turbo=InstructionSelector::kDisableTraceTurboJson) |
| |
| std::optional< BailoutReason > | SelectInstructions () |
| |
| void | StartBlock (RpoNumber rpo) |
| |
| void | EndBlock (RpoNumber rpo) |
| |
| void | AddInstruction (Instruction *instr) |
| |
| void | AddTerminator (Instruction *instr) |
| |
| Instruction * | Emit (InstructionCode opcode, InstructionOperand output, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (InstructionCode opcode, InstructionOperand output, InstructionOperand a, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (InstructionCode opcode, InstructionOperand output, InstructionOperand a, InstructionOperand b, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (InstructionCode opcode, InstructionOperand output, InstructionOperand a, InstructionOperand b, InstructionOperand c, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (InstructionCode opcode, InstructionOperand output, InstructionOperand a, InstructionOperand b, InstructionOperand c, InstructionOperand d, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (InstructionCode opcode, InstructionOperand output, InstructionOperand a, InstructionOperand b, InstructionOperand c, InstructionOperand d, InstructionOperand e, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (InstructionCode opcode, InstructionOperand output, InstructionOperand a, InstructionOperand b, InstructionOperand c, InstructionOperand d, InstructionOperand e, InstructionOperand f, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (InstructionCode opcode, InstructionOperand output, InstructionOperand a, InstructionOperand b, InstructionOperand c, InstructionOperand d, InstructionOperand e, InstructionOperand f, InstructionOperand g, InstructionOperand h, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (InstructionCode opcode, size_t output_count, InstructionOperand *outputs, size_t input_count, InstructionOperand *inputs, size_t temp_count=0, InstructionOperand *temps=nullptr) |
| |
| Instruction * | Emit (Instruction *instr) |
| |
| Instruction * | EmitWithContinuation (InstructionCode opcode, FlagsContinuation *cont) |
| |
| Instruction * | EmitWithContinuation (InstructionCode opcode, InstructionOperand a, FlagsContinuation *cont) |
| |
| Instruction * | EmitWithContinuation (InstructionCode opcode, InstructionOperand a, InstructionOperand b, FlagsContinuation *cont) |
| |
| Instruction * | EmitWithContinuation (InstructionCode opcode, InstructionOperand a, InstructionOperand b, InstructionOperand c, FlagsContinuation *cont) |
| |
| Instruction * | EmitWithContinuation (InstructionCode opcode, size_t output_count, InstructionOperand *outputs, size_t input_count, InstructionOperand *inputs, FlagsContinuation *cont) |
| |
| Instruction * | EmitWithContinuation (InstructionCode opcode, size_t output_count, InstructionOperand *outputs, size_t input_count, InstructionOperand *inputs, size_t temp_count, InstructionOperand *temps, FlagsContinuation *cont) |
| |
| void | EmitIdentity (turboshaft::OpIndex node) |
| |
| bool | IsSupported (CpuFeature feature) const |
| |
| bool | CanCover (turboshaft::OpIndex user, turboshaft::OpIndex node) const |
| |
| bool | CanCoverProtectedLoad (turboshaft::OpIndex user, turboshaft::OpIndex node) const |
| |
| bool | IsOnlyUserOfNodeInSameBlock (turboshaft::OpIndex user, turboshaft::OpIndex node) const |
| |
| bool | IsDefined (turboshaft::OpIndex node) const |
| |
| bool | IsUsed (turboshaft::OpIndex node) const |
| |
| bool | IsReallyUsed (turboshaft::OpIndex node) const |
| |
| bool | IsLive (turboshaft::OpIndex node) const |
| |
| bool | IsReallyLive (turboshaft::OpIndex node) const |
| |
| int | GetEffectLevel (turboshaft::OpIndex node) const |
| |
| int | GetEffectLevel (turboshaft::OpIndex node, FlagsContinuation *cont) const |
| |
| int | GetVirtualRegister (turboshaft::OpIndex node) |
| |
| const std::map< uint32_t, int > | GetVirtualRegistersForTesting () const |
| |
| bool | CanAddressRelativeToRootsRegister (const ExternalReference &reference) const |
| |
| bool | CanUseRootsRegister () const |
| |
| Isolate * | isolate () const |
| |
| const ZoneVector< std::pair< int, int > > & | instr_origins () const |
| |
| turboshaft::OptionalOpIndex | FindProjection (turboshaft::OpIndex node, size_t projection_index) |
| |
| template<typename Op > |
| auto | Inputs (turboshaft::OpIndex node) |
| |
| template<typename Op , std::size_t... Is> |
| auto | InputsImpl (const Op &op, std::index_sequence< Is... >) |
| |
| bool | CanDoBranchIfOverflowFusion (turboshaft::OpIndex node) |
| |
| void | SetProtectedLoadToRemove (turboshaft::OpIndex node) |
| |
| void | MarkAsProtected (turboshaft::OpIndex node) |
| |
| void | UpdateSourcePosition (Instruction *instruction, turboshaft::OpIndex node) |
| |
| bool | IsCommutative (turboshaft::OpIndex node) const |
| |
| turboshaft::OpIndex | block_terminator (const turboshaft::Block *block) const |
| |
| | TurboshaftAdapter (turboshaft::Graph *graph) |
| |
| bool | is_load (turboshaft::OpIndex node) const |
| |
| bool | is_load_root_register (turboshaft::OpIndex node) const |
| |
| LoadView | load_view (turboshaft::OpIndex node) |
| |
| StoreView | store_view (turboshaft::OpIndex node) |
| |
| turboshaft::Graph * | turboshaft_graph () const |
| |
| turboshaft::Block * | block (turboshaft::Graph *schedule, turboshaft::OpIndex node) const |
| |
| RpoNumber | rpo_number (const turboshaft::Block *block) const |
| |
| const ZoneVector< turboshaft::Block * > & | rpo_order (turboshaft::Graph *schedule) |
| |
| bool | IsLoopHeader (const turboshaft::Block *block) const |
| |
| size_t | PredecessorCount (const turboshaft::Block *block) const |
| |
| turboshaft::Block * | PredecessorAt (const turboshaft::Block *block, size_t index) const |
| |
| base::iterator_range< turboshaft::Graph::OpIndexIterator > | nodes (const turboshaft::Block *block) |
| |
| bool | IsRetain (turboshaft::OpIndex node) const |
| |
| bool | IsHeapConstant (turboshaft::OpIndex node) const |
| |
| bool | IsExternalConstant (turboshaft::OpIndex node) const |
| |
| bool | IsRelocatableWasmConstant (turboshaft::OpIndex node) const |
| |
| bool | IsLoadOrLoadImmutable (turboshaft::OpIndex node) const |
| |
| bool | IsProtectedLoad (turboshaft::OpIndex node) const |
| |
| int | value_input_count (turboshaft::OpIndex node) const |
| |
| turboshaft::OpIndex | input_at (turboshaft::OpIndex node, size_t index) const |
| |
| base::Vector< const turboshaft::OpIndex > | inputs (turboshaft::OpIndex node) const |
| |
| turboshaft::Opcode | opcode (turboshaft::OpIndex node) const |
| |
| uint32_t | id (turboshaft::OpIndex node) const |
| |
| | OperationMatcher (const Graph &graph) |
| |
| template<class Op > |
| bool | Is (V< AnyOrNone > op_idx) const |
| |
| template<class Op > |
| const underlying_operation_t< Op > * | TryCast (V< AnyOrNone > op_idx) const |
| |
| template<class Op > |
| const underlying_operation_t< Op > & | Cast (V< AnyOrNone > op_idx) const |
| |
| const Operation & | Get (V< AnyOrNone > op_idx) const |
| |
| V< AnyOrNone > | Index (const Operation &op) const |
| |
| bool | MatchZero (V< Any > matched) const |
| |
| bool | MatchIntegralZero (V< Any > matched) const |
| |
| bool | MatchSmiZero (V< Any > matched) const |
| |
| bool | MatchFloat32Constant (V< Any > matched, float *constant) const |
| |
| bool | MatchFloat32Constant (V< Any > matched, i::Float32 *constant) const |
| |
| bool | MatchFloat64Constant (V< Any > matched, double *constant) const |
| |
| bool | MatchFloat64Constant (V< Any > matched, i::Float64 *constant) const |
| |
| bool | MatchFloat (V< Any > matched, double *value) const |
| |
| bool | MatchFloat (V< Any > matched, double value) const |
| |
| bool | MatchNaN (V< Float > matched) const |
| |
| bool | MatchHeapConstant (V< Any > matched, Handle< HeapObject > *tagged=nullptr) const |
| |
| bool | MatchIntegralWordConstant (V< Any > matched, WordRepresentation rep, uint64_t *unsigned_constant, int64_t *signed_constant=nullptr) const |
| |
| bool | MatchIntegralWordConstant (V< Any > matched, WordRepresentation rep, int64_t *signed_constant) const |
| |
| bool | MatchIntegralWord32Constant (V< Any > matched, uint32_t *constant) const |
| |
| bool | MatchIntegralWord64Constant (V< Any > matched, uint64_t *constant) const |
| |
| bool | MatchIntegralWord32Constant (V< Any > matched, uint32_t constant) const |
| |
| bool | MatchIntegralWord64Constant (V< Any > matched, int64_t *constant) const |
| |
| bool | MatchIntegralWord32Constant (V< Any > matched, int32_t *constant) const |
| |
| template<typename T = intptr_t> |
| bool | MatchIntegralWordPtrConstant (V< Any > matched, T *constant) const |
| |
| bool | MatchSignedIntegralConstant (V< Any > matched, int64_t *constant) const |
| |
| bool | MatchUnsignedIntegralConstant (V< Any > matched, uint64_t *constant) const |
| |
| bool | MatchExternalConstant (V< Any > matched, ExternalReference *reference) const |
| |
| bool | MatchWasmStubCallConstant (V< Any > matched, uint64_t *stub_id) const |
| |
| template<typename T > |
| bool | MatchChange (V< Any > matched, VMatch< T > input, OMatch< ChangeOp::Kind > kind={}, OMatch< ChangeOp::Assumption > assumption={}, OMatch< RegisterRepresentation > from={}, OMatch< RegisterRepresentation > to={}) const |
| |
| bool | MatchTruncateWord64ToWord32 (V< Any > matched, VMatch< Word64 > input) const |
| |
template<typename T >
requires (IsWord<T>()) |
| bool | MatchWordBinop (V< Any > matched, VMatch< T > left, VMatch< T > right, OMatch< WordBinopOp::Kind > kind={}, OMatch< WordRepresentation > rep={}) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchWordAdd (V< Any > matched, V< T > *left, V< T > *right, WordRepresentation rep) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchWordSub (V< Any > matched, V< T > *left, V< T > *right, WordRepresentation rep) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchWordMul (V< Any > matched, V< T > *left, V< T > *right, WordRepresentation rep) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchBitwiseAnd (V< Any > matched, V< T > *left, V< T > *right, WordRepresentation rep) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchBitwiseAndWithConstant (V< Any > matched, V< T > *value, uint64_t *constant, WordRepresentation rep) const |
| |
| template<typename T > |
| bool | MatchEqual (V< Any > matched, V< T > *left, V< T > *right) const |
| |
| bool | MatchFloatUnary (V< Any > matched, V< Float > *input, FloatUnaryOp::Kind kind, FloatRepresentation rep) const |
| |
| bool | MatchFloatRoundDown (V< Any > matched, V< Float > *input, FloatRepresentation rep) const |
| |
| bool | MatchFloatBinary (V< Any > matched, V< Float > *left, V< Float > *right, FloatBinopOp::Kind kind, FloatRepresentation rep) const |
| |
| bool | MatchFloatSub (V< Any > matched, V< Float > *left, V< Float > *right, FloatRepresentation rep) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchConstantShift (V< Any > matched, V< T > *input, ShiftOp::Kind *kind, WordRepresentation *rep, int *amount) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchConstantShift (V< Any > matched, V< T > *input, ShiftOp::Kind kind, WordRepresentation rep, int *amount) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchConstantRightShift (V< Any > matched, V< T > *input, WordRepresentation rep, int *amount) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchConstantLeftShift (V< Any > matched, V< T > *input, WordRepresentation rep, int *amount) const |
| |
template<class T >
requires (IsWord<T>()) |
| bool | MatchConstantShiftRightArithmeticShiftOutZeros (V< Any > matched, V< T > *input, WordRepresentation rep, uint16_t *amount) const |
| |
| bool | MatchPhi (V< Any > matched, std::optional< int > input_count=std::nullopt) const |
| |
| bool | MatchPowerOfTwoWordConstant (V< Any > matched, int64_t *ret_cst, WordRepresentation rep) const |
| |
| bool | MatchPowerOfTwoWord32Constant (V< Any > matched, int32_t *divisor) const |
| |
|
| bool | UseInstructionScheduling () const |
| |
| void | AppendDeoptimizeArguments (InstructionOperandVector *args, DeoptimizeReason reason, uint32_t node_id, FeedbackSource const &feedback, turboshaft::OpIndex frame_state, DeoptimizeKind kind=DeoptimizeKind::kEager) |
| |
| void | EmitTableSwitch (const SwitchInfo &sw, InstructionOperand const &index_operand) |
| |
| void | EmitBinarySearchSwitch (const SwitchInfo &sw, InstructionOperand const &value_operand) |
| |
| void | TryRename (InstructionOperand *op) |
| |
| int | GetRename (int virtual_register) |
| |
| void | SetRename (turboshaft::OpIndex node, turboshaft::OpIndex rename) |
| |
| void | UpdateRenames (Instruction *instruction) |
| |
| void | UpdateRenamesInPhi (PhiInstruction *phi) |
| |
| void | MarkAsDefined (turboshaft::OpIndex node) |
| |
| void | MarkAsUsed (turboshaft::OpIndex node) |
| |
| void | SetEffectLevel (turboshaft::OpIndex node, int effect_level) |
| |
| void | MarkAsRepresentation (MachineRepresentation rep, turboshaft::OpIndex node) |
| |
| void | MarkAsRepresentation (turboshaft::RegisterRepresentation rep, turboshaft::OpIndex node) |
| |
| void | MarkAsWord32 (turboshaft::OpIndex node) |
| |
| void | MarkAsWord64 (turboshaft::OpIndex node) |
| |
| void | MarkAsFloat32 (turboshaft::OpIndex node) |
| |
| void | MarkAsFloat64 (turboshaft::OpIndex node) |
| |
| void | MarkAsSimd128 (turboshaft::OpIndex node) |
| |
| void | MarkAsSimd256 (turboshaft::OpIndex node) |
| |
| void | MarkAsTagged (turboshaft::OpIndex node) |
| |
| void | MarkAsCompressed (turboshaft::OpIndex node) |
| |
| void | MarkAsRepresentation (MachineRepresentation rep, const InstructionOperand &op) |
| |
| void | InitializeCallBuffer (turboshaft::OpIndex call, CallBuffer *buffer, CallBufferFlags flags, turboshaft::OpIndex callee, turboshaft::OptionalOpIndex frame_state_opt, base::Vector< const turboshaft::OpIndex > arguments, int return_count, int stack_slot_delta=0) |
| |
| bool | IsTailCallAddressImmediate () |
| |
| void | UpdateMaxPushedArgumentCount (size_t count) |
| |
| FrameStateDescriptor * | GetFrameStateDescriptor (turboshaft::OpIndex node) |
| |
| size_t | AddInputsToFrameStateDescriptor (FrameStateDescriptor *descriptor, turboshaft::OpIndex state, OperandGenerator *g, StateObjectDeduplicator *deduplicator, InstructionOperandVector *inputs, FrameStateInputKind kind, Zone *zone) |
| |
| size_t | AddInputsToFrameStateDescriptor (StateValueList *values, InstructionOperandVector *inputs, OperandGenerator *g, StateObjectDeduplicator *deduplicator, turboshaft::OpIndex node, FrameStateInputKind kind, Zone *zone) |
| |
| size_t | AddOperandToStateValueDescriptor (StateValueList *values, InstructionOperandVector *inputs, OperandGenerator *g, StateObjectDeduplicator *deduplicator, turboshaft::OpIndex input, MachineType type, FrameStateInputKind kind, Zone *zone) |
| |
| void | VisitBlock (const turboshaft::Block *block) |
| |
| void | VisitControl (const turboshaft::Block *block) |
| |
| void | VisitNode (turboshaft::OpIndex node) |
| |
| void | VisitFloat64Ieee754Binop (turboshaft::OpIndex, InstructionCode code) |
| |
| void | VisitFloat64Ieee754Unop (turboshaft::OpIndex, InstructionCode code) |
| |
| void | VisitLoad (turboshaft::OpIndex node, turboshaft::OpIndex value, InstructionCode opcode) |
| |
| void | VisitLoadTransform (Node *node, Node *value, InstructionCode opcode) |
| |
| void | VisitFinishRegion (Node *node) |
| |
| void | VisitParameter (turboshaft::OpIndex node) |
| |
| void | VisitIfException (turboshaft::OpIndex node) |
| |
| void | VisitOsrValue (turboshaft::OpIndex node) |
| |
| void | VisitPhi (turboshaft::OpIndex node) |
| |
| void | VisitProjection (turboshaft::OpIndex node) |
| |
| void | VisitConstant (turboshaft::OpIndex node) |
| |
| void | VisitCall (turboshaft::OpIndex call, turboshaft::Block *handler={}) |
| |
| void | VisitDeoptimizeIf (turboshaft::OpIndex node) |
| |
| void | VisitDynamicCheckMapsWithDeoptUnless (Node *node) |
| |
| void | VisitTrapIf (turboshaft::OpIndex node) |
| |
| void | VisitTailCall (turboshaft::OpIndex call) |
| |
| void | VisitGoto (turboshaft::Block *target) |
| |
| void | VisitBranch (turboshaft::OpIndex input, turboshaft::Block *tbranch, turboshaft::Block *fbranch) |
| |
| void | VisitSwitch (turboshaft::OpIndex node, const SwitchInfo &sw) |
| |
| void | VisitDeoptimize (DeoptimizeReason reason, uint32_t node_id, FeedbackSource const &feedback, turboshaft::OpIndex frame_state) |
| |
| void | VisitSelect (turboshaft::OpIndex node) |
| |
| void | VisitReturn (turboshaft::OpIndex node) |
| |
| void | VisitThrow (Node *node) |
| |
| void | VisitRetain (turboshaft::OpIndex node) |
| |
| void | VisitUnreachable (turboshaft::OpIndex node) |
| |
| void | VisitStaticAssert (turboshaft::OpIndex node) |
| |
| void | VisitDeadValue (Node *node) |
| |
| void | VisitBitcastWord32PairToFloat64 (turboshaft::OpIndex node) |
| |
| void | TryPrepareScheduleFirstProjection (turboshaft::OpIndex maybe_projection) |
| |
| void | VisitStackPointerGreaterThan (turboshaft::OpIndex node, FlagsContinuation *cont) |
| |
| void | VisitWordCompareZero (turboshaft::OpIndex user, turboshaft::OpIndex value, FlagsContinuation *cont) |
| |
| void | EmitPrepareArguments (ZoneVector< PushParameter > *arguments, const CallDescriptor *call_descriptor, turboshaft::OpIndex node) |
| |
| void | EmitPrepareResults (ZoneVector< PushParameter > *results, const CallDescriptor *call_descriptor, turboshaft::OpIndex node) |
| |
| void | EmitMoveFPRToParam (InstructionOperand *op, LinkageLocation location) |
| |
| void | EmitMoveParamToFPR (turboshaft::OpIndex node, int index) |
| |
| bool | CanProduceSignalingNaN (Node *node) |
| |
| void | AddOutputToSelectContinuation (OperandGenerator *g, int first_input_index, turboshaft::OpIndex node) |
| |
| void | ConsumeEqualZero (turboshaft::OpIndex *user, turboshaft::OpIndex *value, FlagsContinuation *cont) |
| |
| void | VisitI8x16RelaxedSwizzle (turboshaft::OpIndex node) |
| |
| turboshaft::Graph * | schedule () const |
| |
| Linkage * | linkage () const |
| |
| InstructionSequence * | sequence () const |
| |
| base::Vector< const turboshaft::OpIndex > | turboshaft_uses (turboshaft::OpIndex node) const |
| |
| Zone * | instruction_zone () const |
| |
| Zone * | zone () const |
| |
| void | set_instruction_selection_failed () |
| |
| bool | instruction_selection_failed () |
| |
| FlagsCondition | GetComparisonFlagCondition (const turboshaft::ComparisonOp &op) const |
| |
| void | MarkPairProjectionsAsWord32 (turboshaft::OpIndex node) |
| |
| bool | IsSourcePositionUsed (turboshaft::OpIndex node) |
| |
| void | VisitWord32AtomicBinaryOperation (turboshaft::OpIndex node, ArchOpcode int8_op, ArchOpcode uint8_op, ArchOpcode int16_op, ArchOpcode uint16_op, ArchOpcode word32_op) |
| |
| void | VisitWord64AtomicBinaryOperation (turboshaft::OpIndex node, ArchOpcode uint8_op, ArchOpcode uint16_op, ArchOpcode uint32_op, ArchOpcode uint64_op) |
| |
| void | VisitWord64AtomicNarrowBinop (Node *node, ArchOpcode uint8_op, ArchOpcode uint16_op, ArchOpcode uint32_op) |
| |