5#ifndef V8_COMPILER_BACKEND_INSTRUCTION_SCHEDULER_H_
6#define V8_COMPILER_BACKEND_INSTRUCTION_SCHEDULER_H_
151 template <
typename QueueType>
174 return instr->IsTrap() ||
175 (
instr->HasMemoryAccessMode() &&
200 return (
instr->arch_opcode() == kArchNop) && (
instr->OutputCount() == 1) &&
201 (
instr->OutputAt(0)->IsUnallocated()) &&
202 (UnallocatedOperand::cast(
instr->OutputAt(0))
203 ->HasFixedRegisterPolicy() ||
204 UnallocatedOperand::cast(
instr->OutputAt(0))
205 ->HasFixedFPRegisterPolicy());
CriticalPathFirstQueue(InstructionScheduler *scheduler)
ScheduleGraphNode * PopBestCandidate(int cycle)
Instruction * instruction()
void DropUnscheduledPredecessor()
bool HasUnscheduledPredecessor()
void AddSuccessor(ScheduleGraphNode *node)
void set_total_latency(int latency)
ScheduleGraphNode(Zone *zone, Instruction *instr)
int unscheduled_predecessors_count_
void set_start_cycle(int start_cycle)
int total_latency() const
ZoneDeque< ScheduleGraphNode * > successors_
ZoneDeque< ScheduleGraphNode * > & successors()
ZoneLinkedList< ScheduleGraphNode * > nodes_
void AddNode(ScheduleGraphNode *node)
SchedulingQueueBase(InstructionScheduler *scheduler)
InstructionScheduler * scheduler_
StressSchedulerQueue(InstructionScheduler *scheduler)
ScheduleGraphNode * PopBestCandidate(int cycle)
base::RandomNumberGenerator * random_number_generator()
V8_EXPORT_PRIVATE InstructionScheduler(Zone *zone, InstructionSequence *sequence)
InstructionSequence * sequence_
friend class InstructionSchedulerTester
ZoneVector< ScheduleGraphNode * > pending_loads_
base::RandomNumberGenerator * random_number_generator()
std::optional< base::RandomNumberGenerator > random_number_generator_
bool IsBarrier(const Instruction *instr) const
V8_EXPORT_PRIVATE void StartBlock(RpoNumber rpo)
ZoneVector< ScheduleGraphNode * > graph_
static bool SchedulerSupported()
bool HasSideEffect(const Instruction *instr) const
ScheduleGraphNode * last_deopt_or_trap_
void ComputeTotalLatencies()
bool DependsOnDeoptOrTrap(const Instruction *instr) const
V8_EXPORT_PRIVATE void AddTerminator(Instruction *instr)
InstructionSequence * sequence()
bool IsLoadOperation(const Instruction *instr) const
ZoneMap< int32_t, ScheduleGraphNode * > operands_map_
bool MayNeedDeoptOrTrapCheck(const Instruction *instr) const
bool CanTrap(const Instruction *instr) const
V8_EXPORT_PRIVATE int GetInstructionFlags(const Instruction *instr) const
V8_EXPORT_PRIVATE void AddInstruction(Instruction *instr)
ScheduleGraphNode * last_live_in_reg_marker_
int GetTargetInstructionFlags(const Instruction *instr) const
static int GetInstructionLatency(const Instruction *instr)
bool IsFixedRegisterParameter(const Instruction *instr) const
V8_EXPORT_PRIVATE void EndBlock(RpoNumber rpo)
ScheduleGraphNode * last_side_effect_instr_
@ kMayNeedDeoptOrTrapCheck
#define DCHECK_LT(v1, v2)
#define V8_EXPORT_PRIVATE