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:1790

Member Variables

public llvm::Instruction* Inst = nullptr
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 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 int UnscheduledDepsInBundle = InvalidDeps
The sum of UnscheduledDeps in a bundle. Equals to UnscheduledDeps for single instructions.
public bool IsScheduled = false
True if this instruction is scheduled (or considered as scheduled in the dry-run).
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 int Lane = -1
The lane of this node in the TreeEntry.

Method Overview

Methods

ScheduleData()

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

void clearDependencies()

Description

Clears all dependency information.

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

void dump(llvm::raw_ostream& os) const

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

Parameters

llvm::raw_ostream& os

bool hasValidDependencies() const

Description

Returns true if the dependency information has been calculated.

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

int incrementUnscheduledDeps(int Incr)

Description

Modifies the number of unscheduled dependencies, also updating it for the whole bundle.

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

Parameters

int Incr

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

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

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:1819

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:1825

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:1815

void resetUnscheduledDeps()

Description

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

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