|
| 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) |
|