CIRCT
20.0.0git
|
#include "circt/Dialect/FIRRTL/FIRRTLOps.h"
#include "circt/Dialect/FIRRTL/Passes.h"
#include "mlir/Pass/Pass.h"
#include "circt/Dialect/FIRRTL/FIRRTLTypes.h"
#include "circt/Dialect/FIRRTL/FIRRTLUtils.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/Hashing.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "circt/Dialect/FIRRTL/Passes.h.inc"
Go to the source code of this file.
Namespaces | |
circt | |
The InstanceGraph op interface, see InstanceGraphInterface.td for more details. | |
circt::firrtl | |
mlir | |
Macros | |
#define | DEBUG_TYPE "infer-widths" |
#define | GEN_PASS_DEF_INFERWIDTHS |
#define | EXPR_NAMES(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 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, std::vector< Frame > &worklist) |
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 32 of file InferWidths.cpp.
#define EXPR_CLASSES EXPR_NAMES(Expr) |
Definition at line 117 of file InferWidths.cpp.
#define EXPR_KINDS EXPR_NAMES() |
Definition at line 116 of file InferWidths.cpp.
#define EXPR_NAMES | ( | x | ) | Var##x, Derived##x, Id##x, Known##x, Add##x, Pow##x, Max##x, Min##x |
Definition at line 114 of file InferWidths.cpp.
#define GEN_PASS_DEF_INFERWIDTHS |
Definition at line 36 of file InferWidths.cpp.
using ExprSolution = std::pair<std::optional<int32_t>, bool> |
Definition at line 846 of file InferWidths.cpp.
|
static |
Definition at line 856 of file InferWidths.cpp.
Referenced by solveExpr().
|
static |
Definition at line 849 of file InferWidths.cpp.
Referenced by solveExpr().
|
static |
Calculate the "InferWidths-fieldID" equivalent for the given fieldID + type.
Definition at line 69 of file InferWidths.cpp.
References circt::hw::FieldIdImpl::getSubTypeByFieldID().
|
static |
Definition at line 51 of file InferWidths.cpp.
|
static |
Check if a type contains any FIRRTL type with uninferred widths.
Definition at line 1294 of file InferWidths.cpp.
|
inline |
Definition at line 743 of file InferWidths.cpp.
|
inline |
Allow rvalue refs to Expr
and subclasses to be printed to streams.
Definition at line 99 of file InferWidths.cpp.
|
static |
Resize a uint
, sint
, or analog
type to a specific width.
Definition at line 2142 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 882 of file InferWidths.cpp.
References computeBinary(), and computeUnary().