class VPInterleaveRecipe

Declaration

class VPInterleaveRecipe : public VPRecipeBase { /* full declaration omitted */ };

Description

VPInterleaveRecipe is a recipe for transforming an interleave group of load or stores into one wide load/store and shuffles. The first operand of a VPInterleave recipe is the address, followed by the stored values, followed by an optional mask.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1424

Inherits from: VPRecipeBase

Member Variables

private const InterleaveGroup<llvm::Instruction>* IG
private bool HasMask = false

Method Overview

  • public VPInterleaveRecipe(const InterleaveGroup<llvm::Instruction> * IG, llvm::VPValue * Addr, ArrayRef<llvm::VPValue *> StoredValues, llvm::VPValue * Mask)
  • public static inline bool classof(const llvm::VPDef * D)
  • public void execute(llvm::VPTransformState & State)
  • public llvm::VPValue * getAddr() const
  • public const InterleaveGroup<llvm::Instruction> * getInterleaveGroup()
  • public llvm::VPValue * getMask() const
  • public unsigned int getNumStoreOperands() const
  • public ArrayRef<llvm::VPValue *> getStoredValues() const
  • public bool onlyFirstLaneUsed(const llvm::VPValue * Op) const
  • public void print(llvm::raw_ostream & O, const llvm::Twine & Indent, llvm::VPSlotTracker & SlotTracker) const
  • public ~VPInterleaveRecipe()

Inherited from VPRecipeBase:

Inherited from VPUser:

Inherited from VPDef:

Methods

VPInterleaveRecipe(
    const InterleaveGroup<llvm::Instruction>* IG,
    llvm::VPValue* Addr,
    ArrayRef<llvm::VPValue*> StoredValues,
    llvm::VPValue* Mask)

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1430

Parameters

const InterleaveGroup<llvm::Instruction>* IG
llvm::VPValue* Addr
ArrayRef<llvm::VPValue*> StoredValues
llvm::VPValue* Mask

static inline bool classof(const llvm::VPDef* D)

Description

Method to support type inquiry through isa, cast, and dyn_cast.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1450

Parameters

const llvm::VPDef* D

void execute(llvm::VPTransformState& State)

Description

Generate the wide load or store, and shuffles.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1476

Parameters

llvm::VPTransformState& State

llvm::VPValue* getAddr() const

Description

Return the address accessed by this recipe.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1455

const InterleaveGroup<llvm::Instruction>*
getInterleaveGroup()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1484

llvm::VPValue* getMask() const

Description

Return the mask used by this recipe. Note that a full mask is represented by a nullptr.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1461

unsigned int getNumStoreOperands() const

Description

Returns the number of stored operands of this interleave group. Returns 0 for load interleave groups.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1488

ArrayRef<llvm::VPValue*> getStoredValues() const

Description

Return the VPValues stored by this interleave group. If it is a load interleave group, return an empty ArrayRef.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1468

bool onlyFirstLaneUsed(
    const llvm::VPValue* Op) const

Description

The recipe only uses the first lane of the address.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1493

Parameters

const llvm::VPValue* Op

void print(llvm::raw_ostream& O,
           const llvm::Twine& Indent,
           llvm::VPSlotTracker& SlotTracker) const

Description

Print the recipe.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1480

Parameters

llvm::raw_ostream& O
const llvm::Twine& Indent
llvm::VPSlotTracker& SlotTracker

~VPInterleaveRecipe()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:1447