CIRCT 22.0.0git
|
#include "circt/Dialect/Comb/CombOps.h"
#include "circt/Dialect/HW/HWTypes.h"
#include "circt/Dialect/LLHD/IR/LLHDOps.h"
#include "circt/Dialect/LLHD/Transforms/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/Support/Debug.h"
#include "llvm/Support/GenericIteratedDominanceFrontier.h"
#include "circt/Dialect/LLHD/Transforms/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 20 of file Mem2Reg.cpp.
#define GEN_PASS_DEF_MEM2REGPASS |
Definition at line 24 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 205 of file Mem2Reg.cpp.
using ProjectionStack = SmallVector<Projection> |
A stack of projection operations.
Definition at line 563 of file Mem2Reg.cpp.
|
static |
Definition at line 206 of file Mem2Reg.cpp.
|
static |
Definition at line 207 of file Mem2Reg.cpp.
|
static |
Definition at line 216 of file Mem2Reg.cpp.
Referenced by emitFile(), circt::om::evaluator::AttributeValue::finalizeImpl(), omEvaluatorValueGetLoc(), circt::om::evaluator::AttributeValue::setAttr(), updateInstanceInClass(), 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 570 of file Mem2Reg.cpp.
|
static |
Definition at line 208 of file Mem2Reg.cpp.
|
static |
Definition at line 213 of file Mem2Reg.cpp.
References getStoredType().
|
static |
Definition at line 210 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 57 of file Mem2Reg.cpp.
References isEpsilonDelay().
|
static |
Definition at line 209 of file Mem2Reg.cpp.
|
static |
Check whether a value is defined by llhd.constant_time <0ns, 1d, 0e>
.
Definition at line 47 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 65 of file Mem2Reg.cpp.
References isDeltaDelay().
|
static |
Check whether a value is defined by llhd.constant_time <0ns, 0d, 1e>
.
Definition at line 38 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 622 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 586 of file Mem2Reg.cpp.