CIRCT  19.0.0git
Private Member Functions | List of all members
circt::scftocalyx::BuildOpGroups Class Reference

Iterate through the operations of a source function and instantiate components or primitives based on the type of the operations. More...

Inheritance diagram for circt::scftocalyx::BuildOpGroups:
Inheritance graph
[legend]
Collaboration diagram for circt::scftocalyx::BuildOpGroups:
Collaboration graph
[legend]

Private Member Functions

LogicalResult partiallyLowerFuncToComp (FuncOp funcOp, PatternRewriter &rewriter) const override
 
LogicalResult buildOp (PatternRewriter &rewriter, scf::YieldOp yieldOp) const
 Op builder specializations. More...
 
LogicalResult buildOp (PatternRewriter &rewriter, BranchOpInterface brOp) const
 
LogicalResult buildOp (PatternRewriter &rewriter, arith::ConstantOp constOp) const
 
LogicalResult buildOp (PatternRewriter &rewriter, SelectOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, AddIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, SubIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, MulIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, DivUIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, DivSIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, RemUIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, RemSIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, ShRUIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, ShRSIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, ShLIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, AndIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, OrIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, XOrIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, CmpIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, TruncIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, ExtUIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, ExtSIOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, ReturnOp op) const
 For each return statement, we create a new group for assigning to the previously created return value registers. More...
 
LogicalResult buildOp (PatternRewriter &rewriter, IndexCastOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, memref::AllocOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, memref::AllocaOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, memref::LoadOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, memref::StoreOp op) const
 
LogicalResult buildOp (PatternRewriter &rewriter, scf::WhileOp whileOp) const
 
LogicalResult buildOp (PatternRewriter &rewriter, scf::ForOp forOp) const
 
LogicalResult buildOp (PatternRewriter &rewriter, CallOp callOp) const
 
template<typename TGroupOp , typename TCalyxLibOp , typename TSrcOp >
LogicalResult buildLibraryOp (PatternRewriter &rewriter, TSrcOp op, TypeRange srcTypes, TypeRange dstTypes) const
 buildLibraryOp will build a TCalyxLibOp inside a TGroupOp based on the source operation TSrcOp. More...
 
template<typename TGroupOp , typename TCalyxLibOp , typename TSrcOp >
LogicalResult buildLibraryOp (PatternRewriter &rewriter, TSrcOp op) const
 buildLibraryOp which provides in- and output types based on the operands and results of the op argument. More...
 
template<typename TGroupOp >
TGroupOp createGroupForOp (PatternRewriter &rewriter, Operation *op) const
 Creates a group named by the basic block which the input op resides in. More...
 
template<typename TOpType , typename TSrcOp >
LogicalResult buildLibraryBinaryPipeOp (PatternRewriter &rewriter, TSrcOp op, TOpType opPipe, Value out) const
 buildLibraryBinaryPipeOp will build a TCalyxLibBinaryPipeOp, to deal with MulIOp, DivUIOp and RemUIOp. More...
 
void assignAddressPorts (PatternRewriter &rewriter, Location loc, calyx::GroupInterface group, calyx::MemoryInterface memoryInterface, Operation::operand_range addressValues) const
 Creates assignments within the provided group to the address ports of the memoryOp based on the provided addressValues. More...
 

Additional Inherited Members

- Public Member Functions inherited from circt::calyx::FuncOpPartialLoweringPattern
 FuncOpPartialLoweringPattern (MLIRContext *context, LogicalResult &resRef, PatternApplicationState &patternState, DenseMap< mlir::func::FuncOp, calyx::ComponentOp > &map, calyx::CalyxLoweringState &state)
 
LogicalResult partiallyLower (mlir::func::FuncOp funcOp, PatternRewriter &rewriter) const override final
 Entry point to initialize the state of this class and conduct the partial lowering. More...
 
calyx::ComponentOp getComponent () const
 Returns the component operation associated with the currently executing partial lowering. More...
 
template<typename T = ComponentLoweringStateInterface>
T & getState () const
 
CalyxLoweringStateloweringState () const
 Return the calyx lowering state for this pattern. More...
 
virtual LogicalResult partiallyLowerFuncToComp (mlir::func::FuncOp funcOp, PatternRewriter &rewriter) const =0
 
- Public Member Functions inherited from circt::calyx::PartialLoweringPattern< mlir::func::FuncOp >
 PartialLoweringPattern (MLIRContext *ctx, LogicalResult &resRef, PatternApplicationState &patternState)
 
LogicalResult matchAndRewrite (mlir::func::FuncOp op, PatternRewriter &rewriter) const override
 
- Protected Attributes inherited from circt::calyx::FuncOpPartialLoweringPattern
DenseMap< mlir::func::FuncOp, calyx::ComponentOp > & functionMapping
 

Detailed Description

Iterate through the operations of a source function and instantiate components or primitives based on the type of the operations.

Definition at line 198 of file SCFToCalyx.cpp.

Member Function Documentation

◆ assignAddressPorts()

void circt::scftocalyx::BuildOpGroups::assignAddressPorts ( PatternRewriter &  rewriter,
Location  loc,
calyx::GroupInterface  group,
calyx::MemoryInterface  memoryInterface,
Operation::operand_range  addressValues 
) const
inlineprivate

Creates assignments within the provided group to the address ports of the memoryOp based on the provided addressValues.

Definition at line 384 of file SCFToCalyx.cpp.

References circt::calyx::MemoryInterface::addrPorts(), assert(), and circt::calyx::createConstant().

◆ buildLibraryBinaryPipeOp()

template<typename TOpType , typename TSrcOp >
LogicalResult circt::scftocalyx::BuildOpGroups::buildLibraryBinaryPipeOp ( PatternRewriter &  rewriter,
TSrcOp  op,
TOpType  opPipe,
Value  out 
) const
inlineprivate

buildLibraryBinaryPipeOp will build a TCalyxLibBinaryPipeOp, to deal with MulIOp, DivUIOp and RemUIOp.

Definition at line 339 of file SCFToCalyx.cpp.

References builder, circt::calyx::createConstant(), circt::comb::createOrFoldNot(), circt::calyx::createRegister(), seq::reg(), and width.

◆ buildLibraryOp() [1/2]

template<typename TGroupOp , typename TCalyxLibOp , typename TSrcOp >
LogicalResult circt::scftocalyx::BuildOpGroups::buildLibraryOp ( PatternRewriter &  rewriter,
TSrcOp  op 
) const
inlineprivate

buildLibraryOp which provides in- and output types based on the operands and results of the op argument.

Definition at line 320 of file SCFToCalyx.cpp.

◆ buildLibraryOp() [2/2]

template<typename TGroupOp , typename TCalyxLibOp , typename TSrcOp >
LogicalResult circt::scftocalyx::BuildOpGroups::buildLibraryOp ( PatternRewriter &  rewriter,
TSrcOp  op,
TypeRange  srcTypes,
TypeRange  dstTypes 
) const
inlineprivate

buildLibraryOp will build a TCalyxLibOp inside a TGroupOp based on the source operation TSrcOp.

Create assignments to the inputs of the library op.

Replace the result values of the source operator with the new operator.

Definition at line 276 of file SCFToCalyx.cpp.

References assert(), and Input.

◆ buildOp() [1/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
AddIOp  op 
) const
private

Definition at line 807 of file SCFToCalyx.cpp.

◆ buildOp() [2/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
AndIOp  op 
) const
private

Definition at line 827 of file SCFToCalyx.cpp.

◆ buildOp() [3/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
arith::ConstantOp  constOp 
) const
private

Move constant operations to the compOp body as hw::ConstantOp's.

Definition at line 796 of file SCFToCalyx.cpp.

References circt::calyx::matchConstantOp().

◆ buildOp() [4/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
BranchOpInterface  brOp 
) const
private

Branch argument passing group creation Branch operands are passed through registers. In BuildBasicBlockRegs we created registers for all branch arguments of each block. We now create groups for assigning values to these registers.

Register the group as a block argument group, to be executed when entering the successor block from this block (srcBlock).

Definition at line 738 of file SCFToCalyx.cpp.

References circt::calyx::buildAssignmentsForRegisterWrite(), and seq::reg().

◆ buildOp() [5/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
CallOp  callOp 
) const
private

Definition at line 944 of file SCFToCalyx.cpp.

References circt::calyx::getInstanceName(), and Output.

◆ buildOp() [6/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
CmpIOp  op 
) const
private

Definition at line 844 of file SCFToCalyx.cpp.

◆ buildOp() [7/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
DivSIOp  op 
) const
private

Definition at line 565 of file SCFToCalyx.cpp.

References width.

◆ buildOp() [8/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
DivUIOp  op 
) const
private

Definition at line 552 of file SCFToCalyx.cpp.

References width.

◆ buildOp() [9/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
ExtSIOp  op 
) const
private

Definition at line 881 of file SCFToCalyx.cpp.

◆ buildOp() [10/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
ExtUIOp  op 
) const
private

Definition at line 875 of file SCFToCalyx.cpp.

◆ buildOp() [11/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
IndexCastOp  op 
) const
private

Drop the index cast and replace uses of the target value with the source value.

pad/slice the source operand.

Definition at line 887 of file SCFToCalyx.cpp.

References circt::calyx::convIndexType().

◆ buildOp() [12/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
memref::AllocaOp  op 
) const
private

Definition at line 639 of file SCFToCalyx.cpp.

References circt::scftocalyx::buildAllocOp().

◆ buildOp() [13/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
memref::AllocOp  op 
) const
private

Definition at line 634 of file SCFToCalyx.cpp.

References circt::scftocalyx::buildAllocOp().

◆ buildOp() [14/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
memref::LoadOp  op 
) const
private

◆ buildOp() [15/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
memref::StoreOp  op 
) const
private

Definition at line 510 of file SCFToCalyx.cpp.

References circt::calyx::createConstant().

◆ buildOp() [16/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
MulIOp  op 
) const
private

Definition at line 539 of file SCFToCalyx.cpp.

References width.

◆ buildOp() [17/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
OrIOp  op 
) const
private

Definition at line 831 of file SCFToCalyx.cpp.

◆ buildOp() [18/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
RemSIOp  op 
) const
private

Definition at line 591 of file SCFToCalyx.cpp.

References width.

◆ buildOp() [19/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
RemUIOp  op 
) const
private

Definition at line 578 of file SCFToCalyx.cpp.

References width.

◆ buildOp() [20/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
ReturnOp  op 
) const
private

For each return statement, we create a new group for assigning to the previously created return value registers.

Schedule group for execution for when executing the return op block.

Definition at line 775 of file SCFToCalyx.cpp.

References circt::calyx::buildAssignmentsForRegisterWrite(), and seq::reg().

◆ buildOp() [21/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
scf::ForOp  forOp 
) const
private

◆ buildOp() [22/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
scf::WhileOp  whileOp 
) const
private

Definition at line 912 of file SCFToCalyx.cpp.

◆ buildOp() [23/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
scf::YieldOp  yieldOp 
) const
private

Op builder specializations.

Definition at line 644 of file SCFToCalyx.cpp.

References assert(), circt::calyx::buildAssignmentsForRegisterWrite(), circt::calyx::createConstant(), Input, and Output.

◆ buildOp() [24/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
SelectOp  op 
) const
private

Definition at line 839 of file SCFToCalyx.cpp.

◆ buildOp() [25/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
ShLIOp  op 
) const
private

Definition at line 823 of file SCFToCalyx.cpp.

◆ buildOp() [26/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
ShRSIOp  op 
) const
private

Definition at line 819 of file SCFToCalyx.cpp.

◆ buildOp() [27/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
ShRUIOp  op 
) const
private

Definition at line 815 of file SCFToCalyx.cpp.

◆ buildOp() [28/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
SubIOp  op 
) const
private

Definition at line 811 of file SCFToCalyx.cpp.

◆ buildOp() [29/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
TruncIOp  op 
) const
private

Definition at line 870 of file SCFToCalyx.cpp.

◆ buildOp() [30/30]

LogicalResult circt::scftocalyx::BuildOpGroups::buildOp ( PatternRewriter &  rewriter,
XOrIOp  op 
) const
private

Definition at line 835 of file SCFToCalyx.cpp.

◆ createGroupForOp()

template<typename TGroupOp >
TGroupOp circt::scftocalyx::BuildOpGroups::createGroupForOp ( PatternRewriter &  rewriter,
Operation *  op 
) const
inlineprivate

Creates a group named by the basic block which the input op resides in.

Definition at line 327 of file SCFToCalyx.cpp.

◆ partiallyLowerFuncToComp()

LogicalResult circt::scftocalyx::BuildOpGroups::partiallyLowerFuncToComp ( FuncOp  funcOp,
PatternRewriter &  rewriter 
) const
inlineoverrideprivate

We walk the operations of the funcOp to ensure that all def's have been visited before their uses.

SCF

memref

standard arithmetic

Skip: these special cases will be handled separately.

Definition at line 202 of file SCFToCalyx.cpp.


The documentation for this class was generated from the following file: