struct BoUpSLP::ScheduleData

Declaration

struct BoUpSLP::ScheduleData { /* full declaration omitted */ };

Description

Contains all scheduling relevant data for an instruction. A ScheduleData either represents a single instruction or a member of an instruction bundle (= a group of instructions which is combined into a vector instruction).

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2693

Member Variables

public llvm::Instruction* Inst = nullptr
public llvm::Value* OpValue = nullptr
Opcode of the current instruction in the schedule data.
public llvm::slpvectorizer::BoUpSLP::TreeEntry* TE = nullptr
The TreeEntry that this instruction corresponds to.
public llvm::slpvectorizer::BoUpSLP::ScheduleData* FirstInBundle = nullptr
Points to the head in an instruction bundle (and always to this for single instructions).
public llvm::slpvectorizer::BoUpSLP::ScheduleData* NextInBundle = nullptr
Single linked list of all instructions in a bundle. Null if it is a single instruction.
public llvm::slpvectorizer::BoUpSLP::ScheduleData* NextLoadStore = nullptr
Single linked list of all memory instructions (e.g. load, store, call) in the block - until the end of the scheduling region.
public SmallVector< llvm::slpvectorizer::BoUpSLP::ScheduleData*, 4> MemoryDependencies
The dependent memory instructions. This list is derived on demand in calculateDependencies().
public SmallVector< llvm::slpvectorizer::BoUpSLP::ScheduleData*, 4> ControlDependencies
List of instructions which this instruction could be control dependent on. Allowing such nodes to be scheduled below this one could introduce a runtime fault which didn't exist in the original program. ex: this is a load or udiv following a readonly call which inf loops
public int SchedulingRegionID = 0
This ScheduleData is in the current scheduling region if this matches the current SchedulingRegionID of BlockScheduling.
public int SchedulingPriority = 0
Used for getting a "good" final ordering of instructions.
public int Dependencies = InvalidDeps
The number of dependencies. Constitutes of the number of users of the instruction plus the number of dependent memory instructions (if any). This value is calculated on demand. If InvalidDeps, the number of dependencies is not calculated yet.
public int UnscheduledDeps = InvalidDeps
The number of dependencies minus the number of dependencies of scheduled instructions. As soon as this is zero, the instruction/bundle gets ready for scheduling. Note that this is negative as long as Dependencies is not calculated.
public bool IsScheduled = false
True if this instruction is scheduled (or considered as scheduled in the dry-run).

Method Overview

Methods

ScheduleData()

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2698

void clearDependencies()

Description

Clears all dependency information.

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2776

void dump(llvm::raw_ostream& os) const

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2795

Parameters

llvm::raw_ostream& os

bool hasValidDependencies() const

Description

Returns true if the dependency information has been calculated. Note that depenendency validity can vary between instructions within a single bundle.

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2739

int incrementUnscheduledDeps(int Incr)

Description

Modifies the number of unscheduled dependencies for this instruction, and returns the number of remaining dependencies for the containing bundle.

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2762

Parameters

int Incr

void init(int BlockSchedulingRegionID,
          llvm::Value* OpVal)

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2700

Parameters

int BlockSchedulingRegionID
llvm::Value* OpVal

bool isPartOfBundle() const

Description

Returns true if it represents an instruction bundle and not only a single instruction.

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2747

bool isReady() const

Description

Returns true if it is ready for scheduling, i.e. it has no more unscheduled depending instructions/bundles.

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2753

bool isSchedulingEntity() const

Description

Returns true for single instructions and for bundle representatives (= the head of a bundle).

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2743

void resetUnscheduledDeps()

Description

Sets the number of unscheduled dependencies to the number of dependencies.

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2771

int unscheduledDepsInBundle() const

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2783

void verify()

Description

Verify basic self consistency properties

Declared at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2712