CIRCT
19.0.0git
|
#include "PassDetails.h"
#include "circt/Dialect/FIRRTL/FIRRTLOps.h"
#include "circt/Dialect/FIRRTL/FIRRTLTypes.h"
#include "circt/Dialect/FIRRTL/FIRRTLUtils.h"
#include "circt/Dialect/FIRRTL/FIRRTLVisitors.h"
#include "circt/Dialect/FIRRTL/Passes.h"
#include "circt/Support/Debug.h"
#include "circt/Support/FieldRef.h"
#include "mlir/IR/ImplicitLocOpBuilder.h"
#include "mlir/IR/Threading.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/GraphTraits.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
Go to the source code of this file.
Classes | |
struct | llvm::DenseMapInfo< InternedSlot< T > > |
Namespaces | |
mlir | |
llvm | |
Macros | |
#define | DEBUG_TYPE "infer-widths" |
#define | EXPR_NAMES(x) Root##x, Var##x, Derived##x, Id##x, Known##x, Add##x, Pow##x, Max##x, Min##x |
#define | EXPR_KINDS EXPR_NAMES() |
#define | EXPR_CLASSES EXPR_NAMES(Expr) |
Typedefs | |
using | ExprSolution = std::pair< std::optional< int32_t >, bool > |
Functions | |
static void | diagnoseUninferredType (InFlightDiagnostic &diag, Type t, Twine str) |
static FieldRef | getRefForIST (const hw::InnerSymTarget &ist) |
Get FieldRef pointing to the specified inner symbol target, which must be valid. More... | |
static uint64_t | convertFieldIDToOurVersion (uint64_t fieldID, FIRRTLType type) |
Calculate the "InferWidths-fieldID" equivalent for the given fieldID + type. More... | |
template<typename T , typename std::enable_if< std::is_base_of< Expr, T >::value, int >::type = 0> | |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &os, const T &e) |
Allow rvalue refs to Expr and subclasses to be printed to streams. More... | |
template<typename T , typename std::enable_if< std::is_base_of< Expr, T >::value, int >::type = 0> | |
llvm::hash_code | mlir::hash_value (const T &e) |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &os, const LinIneq &l) |
static ExprSolution | computeUnary (ExprSolution arg, llvm::function_ref< int32_t(int32_t)> operation) |
static ExprSolution | computeBinary (ExprSolution lhs, ExprSolution rhs, llvm::function_ref< int32_t(int32_t, int32_t)> operation) |
static ExprSolution | solveExpr (Expr *expr, SmallPtrSetImpl< Expr * > &seenVars, unsigned defaultWorklistSize) |
Compute the value of a constraint expr . More... | |
static bool | hasUninferredWidth (Type type) |
Check if a type contains any FIRRTL type with uninferred widths. More... | |
static FIRRTLBaseType | resizeType (FIRRTLBaseType type, uint32_t newWidth) |
Resize a uint , sint , or analog type to a specific width. More... | |
#define DEBUG_TYPE "infer-widths" |
Definition at line 34 of file InferWidths.cpp.
#define EXPR_CLASSES EXPR_NAMES(Expr) |
Definition at line 130 of file InferWidths.cpp.
#define EXPR_KINDS EXPR_NAMES() |
Definition at line 129 of file InferWidths.cpp.
#define EXPR_NAMES | ( | x | ) | Root##x, Var##x, Derived##x, Id##x, Known##x, Add##x, Pow##x, Max##x, Min##x |
Definition at line 127 of file InferWidths.cpp.
using ExprSolution = std::pair<std::optional<int32_t>, bool> |
Definition at line 837 of file InferWidths.cpp.
|
static |
Definition at line 847 of file InferWidths.cpp.
Referenced by solveExpr().
|
static |
Definition at line 840 of file InferWidths.cpp.
Referenced by solveExpr().
|
static |
Calculate the "InferWidths-fieldID" equivalent for the given fieldID + type.
Definition at line 82 of file InferWidths.cpp.
References circt::hw::FieldIdImpl::getSubTypeByFieldID().
|
static |
Definition at line 46 of file InferWidths.cpp.
|
static |
Get FieldRef pointing to the specified inner symbol target, which must be valid.
Returns null FieldRef if target points to something with no value, such as a port of an external module.
Definition at line 66 of file InferWidths.cpp.
References assert().
|
static |
Check if a type contains any FIRRTL type with uninferred widths.
Definition at line 1303 of file InferWidths.cpp.
|
inline |
Definition at line 734 of file InferWidths.cpp.
|
inline |
Allow rvalue refs to Expr
and subclasses to be printed to streams.
Definition at line 112 of file InferWidths.cpp.
|
static |
Resize a uint
, sint
, or analog
type to a specific width.
Definition at line 2177 of file InferWidths.cpp.
References circt::firrtl::FIRRTLTypeSwitch< T, ResultT >::Case(), circt::calyx::direction::get(), and circt::firrtl::FIRRTLBaseType::isConst().
|
static |
Compute the value of a constraint expr
.
seenVars
is used as a recursion breaker. Recursive variables are treated as zero. Returns the computed value and a boolean indicating whether a recursion was detected. This may be used to memoize the result of expressions in case they were not involved in a cycle (which may alter their value from the perspective of a variable).
Definition at line 864 of file InferWidths.cpp.
References computeBinary(), and computeUnary().