LLVM
12.0.0git
|
A Recipe for widening load/store operations. More...
#include "Transforms/Vectorize/VPlan.h"
Public Member Functions | |
VPWidenMemoryInstructionRecipe (LoadInst &Load, VPValue *Addr, VPValue *Mask) | |
VPWidenMemoryInstructionRecipe (StoreInst &Store, VPValue *Addr, VPValue *StoredValue, VPValue *Mask) | |
VPValue * | getAddr () const |
Return the address accessed by this recipe. More... | |
VPValue * | getMask () const |
Return the mask used by this recipe. More... | |
bool | isStore () const |
Returns true if this recipe is a store. More... | |
VPValue * | getStoredValue () const |
Return the address accessed by this recipe. More... | |
void | execute (VPTransformState &State) override |
Generate the wide load/store. More... | |
void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override |
Print the recipe. More... | |
![]() | |
VPRecipeBase (const unsigned char SC) | |
virtual | ~VPRecipeBase ()=default |
VPBasicBlock * | getParent () |
const VPBasicBlock * | getParent () const |
void | insertBefore (VPRecipeBase *InsertPos) |
Insert an unlinked recipe into a basic block immediately before the specified recipe. More... | |
void | insertAfter (VPRecipeBase *InsertPos) |
Insert an unlinked Recipe into a basic block immediately after the specified Recipe. More... | |
void | moveAfter (VPRecipeBase *MovePos) |
Unlink this recipe from its current VPBasicBlock and insert it into the VPBasicBlock that MovePos lives in, right after MovePos. More... | |
void | moveBefore (VPBasicBlock &BB, iplist< VPRecipeBase >::iterator I) |
Unlink this recipe and insert into BB before I. More... | |
void | removeFromParent () |
This method unlinks 'this' from the containing basic block, but does not delete it. More... | |
iplist< VPRecipeBase >::iterator | eraseFromParent () |
This method unlinks 'this' from the containing basic block and deletes it. More... | |
VPUser * | toVPUser () |
Returns a pointer to a VPUser, if the recipe inherits from VPUser or nullptr otherwise. More... | |
Instruction * | getUnderlyingInstr () |
Returns the underlying instruction, if the recipe is a VPValue or nullptr otherwise. More... | |
const Instruction * | getUnderlyingInstr () const |
![]() | |
VPRecipeBase * | getPrevNode () |
const VPRecipeBase * | getPrevNode () const |
Get the previous node, or nullptr for the list head. More... | |
VPRecipeBase * | getNextNode () |
Get the next node, or nullptr for the list tail. More... | |
const VPRecipeBase * | getNextNode () const |
Get the next node, or nullptr for the list tail. More... | |
![]() | |
self_iterator | getIterator () |
const_self_iterator | getIterator () const |
reverse_self_iterator | getReverseIterator () |
const_reverse_self_iterator | getReverseIterator () const |
bool | isSentinel () const |
Check whether this is the sentinel node. More... | |
![]() | |
VPDef (const unsigned char SC) | |
virtual | ~VPDef () |
VPValue * | getVPValue (unsigned I=0) |
Returns the VPValue with index I defined by the VPDef. More... | |
const VPValue * | getVPValue (unsigned I=0) const |
ArrayRef< VPValue * > | definedValues () |
Returns an ArrayRef of the values defined by the VPDef. More... | |
ArrayRef< VPValue * > | definedValues () const |
Returns an ArrayRef of the values defined by the VPDef. More... | |
unsigned | getNumDefinedValues () const |
Returns the number of values defined by the VPDef. More... | |
unsigned | getVPDefID () const |
void | dump () const |
Dump the VPDef to stderr (for debugging). More... | |
![]() | |
VPUser () | |
VPUser (ArrayRef< VPValue * > Operands) | |
VPUser (std::initializer_list< VPValue * > Operands) | |
template<typename IterT > | |
VPUser (iterator_range< IterT > Operands) | |
VPUser (const VPUser &)=delete | |
VPUser & | operator= (const VPUser &)=delete |
virtual | ~VPUser () |
void | addOperand (VPValue *Operand) |
unsigned | getNumOperands () const |
VPValue * | getOperand (unsigned N) const |
void | setOperand (unsigned I, VPValue *New) |
operand_iterator | op_begin () |
const_operand_iterator | op_begin () const |
operand_iterator | op_end () |
const_operand_iterator | op_end () const |
operand_range | operands () |
const_operand_range | operands () const |
Static Public Member Functions | |
static bool | classof (const VPDef *D) |
Method to support type inquiry through isa, cast, and dyn_cast. More... | |
![]() | |
static bool | classof (const VPDef *D) |
Method to support type inquiry through isa, cast, and dyn_cast. More... | |
![]() | |
static bool | classof (const VPDef *Recipe) |
Method to support type inquiry through isa, cast, and dyn_cast. More... | |
A Recipe for widening load/store operations.
The recipe uses the following VPValues:
|
overridevirtual |
Generate the wide load/store.
Implements llvm::VPRecipeBase.
Definition at line 8987 of file LoopVectorize.cpp.
References llvm::VPTransformState::ILV, isStore(), and llvm::InnerLoopVectorizer::vectorizeMemoryInstruction().
|
inline |
Return the address accessed by this recipe.
Definition at line 1324 of file VPlan.h.
References llvm::VPUser::getOperand().
|
inline |
Return the mask used by this recipe.
Note that a full mask is represented by a nullptr.
Definition at line 1330 of file VPlan.h.
References llvm::VPUser::getNumOperands(), and llvm::VPUser::getOperand().
|
inline |
Return the address accessed by this recipe.
Definition at line 1339 of file VPlan.h.
References assert(), llvm::VPUser::getOperand(), and isStore().
|
inline |
Returns true if this recipe is a store.
Definition at line 1336 of file VPlan.h.
Referenced by getStoredValue(), and print().
|
overridevirtual |
Print the recipe.
Implements llvm::VPDef.
Definition at line 958 of file VPlan.cpp.
References llvm::Instruction::getOpcode(), llvm::Instruction::getOpcodeName(), llvm::VPDef::getVPValue(), isStore(), llvm::RISCVFenceField::O, llvm::VPValue::printAsOperand(), and llvm::VPUser::printOperands().