CIRCT  19.0.0git
Functions
FlattenIO.cpp File Reference
#include "PassDetails.h"
#include "circt/Dialect/HW/HWOps.h"
#include "circt/Dialect/HW/HWPasses.h"
#include "mlir/Transforms/DialectConversion.h"
#include "llvm/ADT/TypeSwitch.h"
Include dependency graph for FlattenIO.cpp:

Go to the source code of this file.

Functions

static bool isStructType (Type type)
 
static hw::StructType getStructType (Type type)
 
static bool isLegalModLikeOp (hw::HWModuleLike moduleLikeOp)
 
static llvm::SmallVector< Type > getInnerTypes (hw::StructType t)
 
template<typename... TOp>
static void addSignatureConversion (DenseMap< Operation *, IOInfo > &ioMap, ConversionTarget &target, RewritePatternSet &patterns, FlattenIOTypeConverter &typeConverter)
 
template<typename T >
static bool hasUnconvertedOps (mlir::ModuleOp module)
 
template<typename T >
static DenseMap< Operation *, IOTypes > populateIOMap (mlir::ModuleOp module)
 
template<typename ModTy , typename T >
static llvm::SmallVector< Attribute > updateNameAttribute (ModTy op, StringRef attrName, DenseMap< unsigned, hw::StructType > &structMap, T oldNames, char joinChar)
 
template<typename ModTy >
static void updateModulePortNames (ModTy op, hw::ModuleType oldModType, char joinChar)
 
static llvm::SmallVector< Location > updateLocAttribute (DenseMap< unsigned, hw::StructType > &structMap, SmallVectorImpl< Location > &oldLocs)
 
static void updateBlockLocations (hw::HWModuleLike op, DenseMap< unsigned, hw::StructType > &structMap)
 The conversion framework seems to throw away block argument locations. More...
 
static void setIOInfo (hw::HWModuleLike op, IOInfo &ioInfo)
 
template<typename T >
static DenseMap< Operation *, IOInfo > populateIOInfoMap (mlir::ModuleOp module)
 
template<typename T >
static LogicalResult flattenOpsOfType (ModuleOp module, bool recursive, StringSet<> &externModules, char joinChar)
 
template<typename... TOps>
static bool flattenIO (ModuleOp module, bool recursive, StringSet<> &externModules, char joinChar)
 

Function Documentation

◆ addSignatureConversion()

template<typename... TOp>
static void addSignatureConversion ( DenseMap< Operation *, IOInfo > &  ioMap,
ConversionTarget &  target,
RewritePatternSet &  patterns,
FlattenIOTypeConverter &  typeConverter 
)
static

◆ flattenIO()

template<typename... TOps>
static bool flattenIO ( ModuleOp  module,
bool  recursive,
StringSet<> &  externModules,
char  joinChar 
)
static

Definition at line 477 of file FlattenIO.cpp.

◆ flattenOpsOfType()

template<typename T >
static LogicalResult flattenOpsOfType ( ModuleOp  module,
bool  recursive,
StringSet<> &  externModules,
char  joinChar 
)
static

◆ getInnerTypes()

static llvm::SmallVector<Type> getInnerTypes ( hw::StructType  t)
static

Definition at line 32 of file FlattenIO.cpp.

References circt::hw::getCanonicalType(), and circt::esi::innerType().

◆ getStructType()

static hw::StructType getStructType ( Type  type)
static

Definition at line 22 of file FlattenIO.cpp.

References circt::hw::getCanonicalType().

Referenced by setIOInfo(), and updateModulePortNames().

◆ hasUnconvertedOps()

template<typename T >
static bool hasUnconvertedOps ( mlir::ModuleOp  module)
static

Definition at line 242 of file FlattenIO.cpp.

◆ isLegalModLikeOp()

static bool isLegalModLikeOp ( hw::HWModuleLike  moduleLikeOp)
static

Definition at line 27 of file FlattenIO.cpp.

References isStructType().

Referenced by addSignatureConversion().

◆ isStructType()

static bool isStructType ( Type  type)
static

Definition at line 18 of file FlattenIO.cpp.

References circt::hw::getCanonicalType().

Referenced by isLegalModLikeOp().

◆ populateIOInfoMap()

template<typename T >
static DenseMap<Operation *, IOInfo> populateIOInfoMap ( mlir::ModuleOp  module)
static

Definition at line 349 of file FlattenIO.cpp.

References setIOInfo().

◆ populateIOMap()

template<typename T >
static DenseMap<Operation *, IOTypes> populateIOMap ( mlir::ModuleOp  module)
static

Definition at line 248 of file FlattenIO.cpp.

◆ setIOInfo()

static void setIOInfo ( hw::HWModuleLike  op,
IOInfo &  ioInfo 
)
static

Definition at line 335 of file FlattenIO.cpp.

References getStructType().

Referenced by flattenOpsOfType(), and populateIOInfoMap().

◆ updateBlockLocations()

static void updateBlockLocations ( hw::HWModuleLike  op,
DenseMap< unsigned, hw::StructType > &  structMap 
)
static

The conversion framework seems to throw away block argument locations.

We use this function to copy the location from the original argument to the set of flattened arguments.

Definition at line 326 of file FlattenIO.cpp.

Referenced by flattenOpsOfType().

◆ updateLocAttribute()

static llvm::SmallVector<Location> updateLocAttribute ( DenseMap< unsigned, hw::StructType > &  structMap,
SmallVectorImpl< Location > &  oldLocs 
)
static

Definition at line 303 of file FlattenIO.cpp.

Referenced by flattenOpsOfType().

◆ updateModulePortNames()

template<typename ModTy >
static void updateModulePortNames ( ModTy  op,
hw::ModuleType  oldModType,
char  joinChar 
)
static

Definition at line 281 of file FlattenIO.cpp.

References circt::calyx::direction::get(), and getStructType().

Referenced by flattenOpsOfType().

◆ updateNameAttribute()

template<typename ModTy , typename T >
static llvm::SmallVector<Attribute> updateNameAttribute ( ModTy  op,
StringRef  attrName,
DenseMap< unsigned, hw::StructType > &  structMap,
oldNames,
char  joinChar 
)
static

Definition at line 257 of file FlattenIO.cpp.

References circt::calyx::direction::get().

Referenced by flattenOpsOfType().