LLVM: lib/Transforms/Utils/MatrixUtils.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

20

21using namespace llvm;

22

27 LLVMContext &Ctx = Preheader->getContext();

31 Header->getParent(), Exit);

33 Header->getParent(), Exit);

34

38 PHINode *IV =

39 PHINode::Create(I32Ty, 2, Name + ".iv", Header->getTerminator()->getIterator());

40 IV->addIncoming(ConstantInt::get(I32Ty, 0), Preheader);

41

42 B.SetInsertPoint(Latch);

43 Value *Inc = B.CreateAdd(IV, Step, Name + ".step");

44 Value *Cond = B.CreateICmpNE(Inc, Bound, Name + ".cond");

46 IV->addIncoming(Inc, Latch);

47

58 });

59

60 L->addBasicBlockToLoop(Header, LI);

61 L->addBasicBlockToLoop(Body, LI);

62 L->addBasicBlockToLoop(Latch, LI);

63 return Body;

64}

65

66

67

68

69

79 ParentL->addChildLoop(ColumnLoopInfo);

80 else

82

85 "cols", B, DTU, ColumnLoopInfo, LI);

89 B.getInt64(TileSize), "rows", B, DTU, RowLoopInfo, LI);

91

94 B.getInt64(TileSize), "inner", B, DTU, KLoopInfo, LI);

101 KLoop.Index = &*KLoop.Header->begin();

102

103 return InnerBody;

104}

static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")

const SmallVectorImpl< MachineOperand > & Cond

static const uint32_t IV[8]

LLVM Basic Block Representation.

const Function * getParent() const

Return the enclosing method, or null if none.

static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=nullptr, BasicBlock *InsertBefore=nullptr)

Creates a new BasicBlock.

LLVM_ABI const BasicBlock * getSinglePredecessor() const

Return the predecessor of this block if it has a single predecessor block.

LLVM_ABI const BasicBlock * getSingleSuccessor() const

Return the successor of this block if it has a single successor.

LLVM_ABI LLVMContext & getContext() const

Get the context in which this basic block lives.

const Instruction * getTerminator() const LLVM_READONLY

Returns the terminator instruction if the block is well formed or null if the block is not well forme...

static BranchInst * Create(BasicBlock *IfTrue, InsertPosition InsertBefore=nullptr)

BasicBlock * getSuccessor(unsigned i) const

void setSuccessor(unsigned idx, BasicBlock *NewSucc)

static constexpr UpdateKind Delete

static constexpr UpdateKind Insert

void applyUpdatesPermissive(ArrayRef< UpdateT > Updates)

Submit updates to all available trees.

Common base class shared among various IRBuilders.

void addChildLoop(LoopT *NewChild)

Add the specified loop to be a child of this loop.

void addTopLevelLoop(LoopT *New)

This adds the specified loop to the collection of top-level loops.

LoopT * AllocateLoop(ArgsTy &&...Args)

LoopT * getLoopFor(const BlockT *BB) const

Return the inner most loop that BB lives in.

Represents a single loop in the control flow graph.

static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)

Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...

StringRef - Represent a constant reference to a string, i.e.

static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)

LLVM Value Representation.

@ BasicBlock

Various leaf nodes.

This is an optimization pass for GlobalISel generic memory operations.

FunctionAddr VTableAddr Value

decltype(auto) cast(const From &Val)

cast - Return the argument parameter cast to the specified type.

unsigned NumInner

Number of columns of the first matrix of a multiply / number of rows of the second matrix of a multip...

MatrixLoop ColumnLoop

The loop iterating on the columns.

MatrixLoop RowLoop

The loop iterating on the rows.

unsigned NumRows

Number of rows of the matrix.

BasicBlock * CreateTiledLoops(BasicBlock *Start, BasicBlock *End, IRBuilderBase &B, DomTreeUpdater &DTU, LoopInfo &LI)

Creates an IR loop nests for tiling of the form below.

Definition MatrixUtils.cpp:70

unsigned NumColumns

Number of columns of the matrix.

unsigned TileSize

Number of rows/columns in a tile.

MatrixLoop KLoop

The loop iterating on k (inner dimension).