|
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/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 | 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 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 21 of file Mem2Reg.cpp.
| #define GEN_PASS_DEF_MEM2REGPASS |
Definition at line 25 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 207 of file Mem2Reg.cpp.
| using ProjectionStack = SmallVector<Projection> |
A stack of projection operations.
Definition at line 594 of file Mem2Reg.cpp.
|
static |
Definition at line 208 of file Mem2Reg.cpp.
|
static |
Definition at line 209 of file Mem2Reg.cpp.
|
static |
Definition at line 218 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 601 of file Mem2Reg.cpp.
|
static |
Definition at line 210 of file Mem2Reg.cpp.
|
static |
Definition at line 215 of file Mem2Reg.cpp.
References getStoredType().
|
static |
Definition at line 212 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 59 of file Mem2Reg.cpp.
References isEpsilonDelay().
|
static |
Definition at line 211 of file Mem2Reg.cpp.
|
static |
Check whether a value is defined by llhd.constant_time <0ns, 1d, 0e>.
Definition at line 49 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 67 of file Mem2Reg.cpp.
References isDeltaDelay().
|
static |
Check whether a value is defined by llhd.constant_time <0ns, 0d, 1e>.
Definition at line 40 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 657 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 617 of file Mem2Reg.cpp.