Loading [MathJax]/extensions/tex2jax.js
CIRCT 22.0.0git
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Namespaces | Macros | Typedefs | Functions
Mem2Reg.cpp File Reference
#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"
Include dependency graph for Mem2Reg.cpp:

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.
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "llhd-mem2reg"

Definition at line 20 of file Mem2Reg.cpp.

◆ GEN_PASS_DEF_MEM2REGPASS

#define GEN_PASS_DEF_MEM2REGPASS

Definition at line 24 of file Mem2Reg.cpp.

Typedef Documentation

◆ DefSlot

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.

◆ ProjectionStack

using ProjectionStack = SmallVector<Projection>

A stack of projection operations.

Definition at line 563 of file Mem2Reg.cpp.

Function Documentation

◆ blockingSlot()

static DefSlot blockingSlot ( Value  slot)
static

Definition at line 206 of file Mem2Reg.cpp.

◆ delayedSlot()

static DefSlot delayedSlot ( Value  slot)
static

Definition at line 207 of file Mem2Reg.cpp.

◆ getLoc()

static Location getLoc ( DefSlot  slot)
static

◆ getProjections()

static ProjectionStack getProjections ( Value  fromSignal,
Value  toSlot 
)
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.

◆ getSlot()

static Value getSlot ( DefSlot  slot)
static

Definition at line 208 of file Mem2Reg.cpp.

◆ getStoredType() [1/2]

static Type getStoredType ( DefSlot  slot)
static

Definition at line 213 of file Mem2Reg.cpp.

References getStoredType().

◆ getStoredType() [2/2]

static Type getStoredType ( Value  slot)
static

Definition at line 210 of file Mem2Reg.cpp.

Referenced by getStoredType().

◆ isBlockingDrive()

static bool isBlockingDrive ( Operation *  op)
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().

◆ isDelayed()

static bool isDelayed ( DefSlot  slot)
static

Definition at line 209 of file Mem2Reg.cpp.

◆ isDeltaDelay()

static bool isDeltaDelay ( Value  value)
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().

◆ isDeltaDrive()

static bool isDeltaDrive ( Operation *  op)
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().

◆ isEpsilonDelay()

static bool isEpsilonDelay ( Value  value)
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().

◆ packProjections()

static Value packProjections ( OpBuilder &  builder,
Value  value,
const ProjectionStack projections 
)
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:

auto projections = getProjections(...);
auto fieldValue = unpackProjections(..., aggregateValue, projections);
fieldValue = update(fieldValue);
aggregateValue = packProjections(..., fieldValue, projections);
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 surr...
Definition Mem2Reg.cpp:622
static ProjectionStack getProjections(Value fromSignal, Value toSlot)
Collect the llhd.sig.
Definition Mem2Reg.cpp:570
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 ...
Definition Mem2Reg.cpp:586

Definition at line 622 of file Mem2Reg.cpp.

◆ unpackProjections()

static Value unpackProjections ( OpBuilder &  builder,
Value  value,
ProjectionStack projections 
)
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.