|
CIRCT 23.0.0git
|
#include "circt/Dialect/Comb/CombOps.h"#include "circt/Dialect/HW/HWTypes.h"#include "circt/Dialect/LLHD/LLHDOps.h"#include "circt/Dialect/LLHD/LLHDPasses.h"#include "circt/Support/UnusedOpPruner.h"#include "mlir/Analysis/Liveness.h"#include "mlir/Dialect/Arith/IR/Arith.h"#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"#include "mlir/IR/Dominance.h"#include "llvm/ADT/ArrayRef.h"#include "llvm/Support/Debug.h"#include "llvm/Support/GenericIteratedDominanceFrontier.h"#include "circt/Dialect/LLHD/LLHDPasses.h.inc"
Go to the source code of this file.
Classes | |
| struct | llvm::DenseMapInfo< DriveCondition > |
Namespaces | |
| namespace | circt |
| The InstanceGraph op interface, see InstanceGraphInterface.td for more details. | |
| namespace | circt::llhd |
Macros | |
| #define | DEBUG_TYPE "llhd-mem2reg" |
| #define | GEN_PASS_DEF_MEM2REGPASS |
Typedefs | |
| using | DefSlot = PointerIntPair< Value, 1 > |
| The slot a reaching definition specifies a value for, alongside a bit indicating whether the definition is from a delayed drive or a blocking drive. | |
| using | ProjectionStack = SmallVector< Projection > |
| A stack of projection operations. | |
Functions | |
| static bool | isEpsilonDelay (Value value) |
Check whether a value is defined by llhd.constant_time <0ns, 0d, 1e>. | |
| static bool | isZeroDelay (Value value) |
Check whether a value is defined by llhd.constant_time <0ns, 0d, 0e>. | |
| static bool | isDeltaDelay (Value value) |
Check whether a value is defined by llhd.constant_time <0ns, 1d, 0e>. | |
| static bool | isBlockingDrive (Operation *op) |
Check whether an operation is a llhd.drive with an epsilon delay. | |
| static bool | isDeltaDrive (Operation *op) |
Check whether an operation is a llhd.drive with a delta delay. | |
| static DefSlot | blockingSlot (Value slot) |
| static DefSlot | delayedSlot (Value slot) |
| static Value | getSlot (DefSlot slot) |
| static bool | isDelayed (DefSlot slot) |
| static Type | getStoredType (Value slot) |
| static Type | getStoredType (DefSlot slot) |
| static Location | getLoc (DefSlot slot) |
| static std::optional< unsigned > | getPromotableSlotBitWidth (Type type) |
| static bool | isPromotableSlotType (Type type) |
| static Value | createZeroValue (OpBuilder &builder, Location loc, Type type) |
| static ProjectionStack | getProjections (Value fromSignal, Value toSlot) |
Collect the llhd.sig. | |
| static Value | unpackProjections (OpBuilder &builder, Value value, ProjectionStack &projections) |
| Resolve a stack of projections by taking a value and descending into its subelements until the final value targeted by the projection stack remains, which is then returned. | |
| static Value | packProjections (OpBuilder &builder, Value value, const ProjectionStack &projections) |
| Undo a stack of projections by taking the value of the projected field and injecting it into the surrounding aggregate value that the projection targets. | |
| #define DEBUG_TYPE "llhd-mem2reg" |
Definition at line 22 of file Mem2Reg.cpp.
| #define GEN_PASS_DEF_MEM2REGPASS |
Definition at line 26 of file Mem2Reg.cpp.
| using DefSlot = PointerIntPair<Value, 1> |
The slot a reaching definition specifies a value for, alongside a bit indicating whether the definition is from a delayed drive or a blocking drive.
Definition at line 211 of file Mem2Reg.cpp.
| using ProjectionStack = SmallVector<Projection> |
A stack of projection operations.
Definition at line 628 of file Mem2Reg.cpp.
|
static |
Definition at line 212 of file Mem2Reg.cpp.
|
static |
Definition at line 241 of file Mem2Reg.cpp.
References assert(), hw.ConstantOp::create(), hw.BitcastOp::create(), and getPromotableSlotBitWidth().
|
static |
Definition at line 213 of file Mem2Reg.cpp.
|
static |
Definition at line 222 of file Mem2Reg.cpp.
Referenced by emitFile(), circt::om::evaluator::AttributeValue::finalizeImpl(), omEvaluatorValueGetLoc(), circt::om::evaluator::AttributeValue::setAttr(), updateInstanceInClass(), updateObjectInClass(), and verifyUniqueNamesInRegion().
|
static |
Collect the llhd.sig.
* projection ops between fromSignal and toSlot. The fromSignal value must be derived from toSlot through only llhd.sig.* operations. The result is a stack; the op producing fromSignal appears first in the vector, while the final op projecting into toSlot appears last in the vector.
Definition at line 635 of file Mem2Reg.cpp.
|
static |
Definition at line 224 of file Mem2Reg.cpp.
Referenced by createZeroValue(), and isPromotableSlotType().
|
static |
Definition at line 214 of file Mem2Reg.cpp.
|
static |
Definition at line 219 of file Mem2Reg.cpp.
References getStoredType().
|
static |
Definition at line 216 of file Mem2Reg.cpp.
Referenced by getStoredType().
|
static |
Check whether an operation is a llhd.drive with an epsilon delay.
This corresponds to a blocking assignment in Verilog.
Definition at line 69 of file Mem2Reg.cpp.
References isEpsilonDelay(), and isZeroDelay().
|
static |
Definition at line 215 of file Mem2Reg.cpp.
|
static |
Check whether a value is defined by llhd.constant_time <0ns, 1d, 0e>.
Definition at line 59 of file Mem2Reg.cpp.
Referenced by isDeltaDrive().
|
static |
Check whether an operation is a llhd.drive with a delta delay.
This corresponds to a non-blocking assignment in Verilog.
Definition at line 77 of file Mem2Reg.cpp.
References isDeltaDelay().
|
static |
Check whether a value is defined by llhd.constant_time <0ns, 0d, 1e>.
Definition at line 41 of file Mem2Reg.cpp.
Referenced by isBlockingDrive().
|
static |
Definition at line 236 of file Mem2Reg.cpp.
References getPromotableSlotBitWidth().
|
static |
Check whether a value is defined by llhd.constant_time <0ns, 0d, 0e>.
Definition at line 50 of file Mem2Reg.cpp.
Referenced by isBlockingDrive().
|
static |
Undo a stack of projections by taking the value of the projected field and injecting it into the surrounding aggregate value that the projection targets.
This requires the into fields to be set to the concrete value of the intermediate projections.
Example:
Definition at line 691 of file Mem2Reg.cpp.
|
static |
Resolve a stack of projections by taking a value and descending into its subelements until the final value targeted by the projection stack remains, which is then returned.
Also updates the into fields of the projections in the stack to represent the concrete value of intermediate projections. This allows a later packProjections to reconstruct the root value with the field targeted by the projection updated to a different value.
Definition at line 651 of file Mem2Reg.cpp.