CIRCT  20.0.0git
Namespaces | Macros | Functions
LowerTypes.cpp File Reference
#include "circt/Dialect/FIRRTL/FIRRTLOps.h"
#include "circt/Dialect/FIRRTL/Passes.h"
#include "mlir/Pass/Pass.h"
#include "circt/Dialect/FIRRTL/AnnotationDetails.h"
#include "circt/Dialect/FIRRTL/FIRRTLAttributes.h"
#include "circt/Dialect/FIRRTL/FIRRTLTypes.h"
#include "circt/Dialect/FIRRTL/FIRRTLUtils.h"
#include "circt/Dialect/FIRRTL/FIRRTLVisitors.h"
#include "circt/Dialect/FIRRTL/NLATable.h"
#include "circt/Dialect/FIRRTL/Namespace.h"
#include "circt/Dialect/HW/HWAttributes.h"
#include "circt/Dialect/HW/HWOpInterfaces.h"
#include "circt/Dialect/SV/SVOps.h"
#include "circt/Support/Debug.h"
#include "mlir/IR/ImplicitLocOpBuilder.h"
#include "mlir/IR/Threading.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Parallel.h"
#include "circt/Dialect/FIRRTL/Passes.h.inc"
Include dependency graph for LowerTypes.cpp:

Go to the source code of this file.

Namespaces

 circt
 The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
 
 circt::firrtl
 

Macros

#define DEBUG_TYPE   "firrtl-lower-types"
 
#define GEN_PASS_DEF_LOWERFIRRTLTYPES
 

Functions

static FIRRTLType mapLoweredType (FIRRTLType type, FIRRTLBaseType fieldType)
 Return fieldType or fieldType as same ref as type. More...
 
static Type mapLoweredType (Type type, FIRRTLBaseType fieldType)
 Return fieldType or fieldType as same ref as type. More...
 
static bool isOneDimVectorType (FIRRTLType type)
 Return true if the type is a 1d vector type or ground type. More...
 
static bool containsBundleType (FIRRTLType type)
 Return true if the type has a bundle type as subtype. More...
 
static bool isPreservableAggregateType (Type type, PreserveAggregate::PreserveMode mode)
 Return true if we can preserve the type. More...
 
static bool peelType (Type type, SmallVectorImpl< FlatBundleFieldEntry > &fields, PreserveAggregate::PreserveMode mode)
 Peel one layer of an aggregate type into its components. More...
 
static bool isNotSubAccess (Operation *op)
 Return if something is not a normal subaccess. More...
 
static SmallVector< Operation * > getSAWritePath (Operation *op)
 Look through and collect subfields leading to a subaccess. More...
 
static MemOp cloneMemWithNewType (ImplicitLocOpBuilder *b, MemOp op, FlatBundleFieldEntry field)
 Clone memory for the specified field. Returns null op on error. More...
 
static Value cloneAccess (ImplicitLocOpBuilder *builder, Operation *op, Value rhs)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "firrtl-lower-types"

Definition at line 54 of file LowerTypes.cpp.

◆ GEN_PASS_DEF_LOWERFIRRTLTYPES

#define GEN_PASS_DEF_LOWERFIRRTLTYPES

Definition at line 58 of file LowerTypes.cpp.

Function Documentation

◆ cloneAccess()

static Value cloneAccess ( ImplicitLocOpBuilder *  builder,
Operation *  op,
Value  rhs 
)
static

Definition at line 842 of file LowerTypes.cpp.

◆ cloneMemWithNewType()

static MemOp cloneMemWithNewType ( ImplicitLocOpBuilder *  b,
MemOp  op,
FlatBundleFieldEntry  field 
)
static

Clone memory for the specified field. Returns null op on error.

Definition at line 239 of file LowerTypes.cpp.

References circt::firrtl::Annotation::getDict(), circt::firrtl::Annotation::getFieldID(), circt::hw::FieldIdImpl::getMaxFieldID(), and circt::firrtl::Annotation::setMember().

◆ containsBundleType()

static bool containsBundleType ( FIRRTLType  type)
static

Return true if the type has a bundle type as subtype.

Definition at line 128 of file LowerTypes.cpp.

References circt::firrtl::FIRRTLTypeSwitch< T, ResultT >::Case().

Referenced by isPreservableAggregateType().

◆ getSAWritePath()

static SmallVector<Operation *> getSAWritePath ( Operation *  op)
static

Look through and collect subfields leading to a subaccess.

Definition at line 225 of file LowerTypes.cpp.

References isNotSubAccess().

◆ isNotSubAccess()

static bool isNotSubAccess ( Operation *  op)
static

Return if something is not a normal subaccess.

Non-normal includes zero-length vectors and constant indexes (which are really subindexes).

Definition at line 215 of file LowerTypes.cpp.

Referenced by getSAWritePath().

◆ isOneDimVectorType()

static bool isOneDimVectorType ( FIRRTLType  type)
static

Return true if the type is a 1d vector type or ground type.

Definition at line 115 of file LowerTypes.cpp.

References circt::firrtl::FIRRTLTypeSwitch< T, ResultT >::Case().

Referenced by isPreservableAggregateType().

◆ isPreservableAggregateType()

static bool isPreservableAggregateType ( Type  type,
PreserveAggregate::PreserveMode  mode 
)
static

◆ mapLoweredType() [1/2]

static FIRRTLType mapLoweredType ( FIRRTLType  type,
FIRRTLBaseType  fieldType 
)
static

Return fieldType or fieldType as same ref as type.

Definition at line 102 of file LowerTypes.cpp.

References circt::firrtl::mapBaseType().

Referenced by mapLoweredType().

◆ mapLoweredType() [2/2]

static Type mapLoweredType ( Type  type,
FIRRTLBaseType  fieldType 
)
static

Return fieldType or fieldType as same ref as type.

Definition at line 107 of file LowerTypes.cpp.

References mapLoweredType().

◆ peelType()

static bool peelType ( Type  type,
SmallVectorImpl< FlatBundleFieldEntry > &  fields,
PreserveAggregate::PreserveMode  mode 
)
static

Peel one layer of an aggregate type into its components.

Type may be complex, but empty, in which case fields is empty, but the return is true.

Definition at line 178 of file LowerTypes.cpp.

References circt::firrtl::FIRRTLTypeSwitch< T, ResultT >::Case(), and isPreservableAggregateType().