All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Update
mlir::writer
to reflect recent changes in CIRCT
- Fix MLIR struct types and operation printing
- Fix missing panic argument in
FunctionLayout::unmap_inst
- Fix Rust 2021 edition warning
- Add
mlir::writer
module
- Return
Value
fromInstBuilder::call
- Remove
%
from basic block names inBlock
formatting
- Update dependencies
indoc
,num
,regex
,lalrpop-util
- Remove dependency
time
- Increase minimum rustc version to 1.45
- Fix TCM duplicating instructions rather than moving them (#145)
- Fix
delete_block
not removing instruction-to-block mapping (#146)
- Fix entity simulation panic caused by
halt
instruction (#143)
- Fix faulty constant folding on signal/pointer shifts (#138)
- Add
llhd-sim
tool (merged in from https://github.com/fabianschuiki/llhd-sim) - Add MLIR output to
llhd-conv
- Add
pretty_env_logger
dependency
- Fix implementation of
IntValue::smod
.
- Remove
stderrlog
andenv_logger
dependencies
- Add
UnitData
struct. - Add
Unit
andUnitBuilder
structs. - Add
analysis
module. - Add
trg()
,predtbl()
,domtree()
, anddomtree_with_predtbl()
toUnit
. - Extend dominator tree queries to cover all block, instruction, and value combinations.
- Fold
ControlFlowGraph
,DataFlowGraph
, andFunctionLayout
functions intoUnit
andUnitBuilder
. - Change
dump()
functions to take a&Unit
instead of DFG/CFG. - Make
sig
,dfg
,cfg
, andlayout
fields ofUnitData
private. - Make
FunctionLayout
andInstLayout
structs private. - Make
ControlFlowGraph
andDataFlowGraph
structs private. - Factor out
TemporalRegionGraph
,PredecessorTable
, andDominatorTree
intoanalysis
module. - Rename
licm
pass toecm
.
- Deprecate calling
new
onTemporalRegionGraph
,PredecessorTable
, andDominatorTree
, in favor of accessors onUnit
.
- Remove
Function
,Process
, andEntity
structs. - Remove
Unit
andUnitBuilder
traits. - Remove
Layout
trait. - Remove
func_layout()
andfunc_layout_mut()
functions. - Remove
cfg()
,cfg_mut()
,try_cfg()
, andtry_cfg_mut()
functions. - Remove
dfg()
anddfg_mut()
functions. - Remove
sig()
andname()
fromUnitBuilder
.
- llhd-opt: Add
-p
option to specify exact passes to be executed. - Add instruction simplification pass. (#92)
- Add optional condition to drive instruction. (#97)
- Add process lowering pass. (#93)
- Add desequentialization pass. (#103)
- Add
reg
gating conditions. (#105) - llhd-opt: Add
-l
option to lower from behavioural to structural LLHD. - llhd-conv: Add
-i
,-o
,--input-format
,--output-format
options.
- Use dense vector table instead of hash map for blocks, instructions, values, and external unit data.
- Improve dominator tree computation performance.
- Add auxiliary temporal region entry blocks during TCM.
- Improve value/block use lookup performance. (#91)
- Fold
mux
instructions with constant selector. - Fold
extf
instructions on constant arrays and structs. - Wrap register triggers in
RegTrigger
. - Changed
reg
anddel
to returnvoid
, and take target signal as operand.
- Fix instructions in entry block being reordered during LICM.
- Fix
drv
instructions being removed during TCM. (#100) - Fix value names not being uniquified properly in assembly writer.
- ir: Add various
unit()
,unit_mut()
,get_unit()
, andget_unit_mut()
functions. - ir: Add location hint tracking for units and values.
- llhd-check: Add
--emit-trg
option. - llhd-check: Add verbosity options.
- Add
Layout
trait with functionality shared betweenInstLayout
andFunctionLayout
.
- Extend verifier to check if used values and blocks have a definition.
- llhd-check: Honor dump flag
-d
. - Fix Temporal Region Graph computation not producing distinct regions for blocks that may execute at different points in time.
- Fix broken phi nodes after block removal. (#87)
- Add Sublime Text syntax highlighting.
- Add function/process/entity and name getters to
Unit
. - Add
--dump
option tollhd-check
. - Add
name()
,const_zero()
, andsuffix()
to instruction builder. - Add
named_block()
to unit builder. - Add
log
dependency. - Add
value
module with utilities to deal with values. - Add
get_const*
functions to the DFG. - Add fallible
try_cfg*
functions to units. - Add
len()
for types. - Add
stderrlog
dependency. - Add
rayon
dependency. - Add
time
dependency. - Add
-v
,-t
, and-s
options tollhd-opt
. - Add
opt
module for optimization infrastructure. - Add Global Common Subexpression Elimination pass.
- Add Temporal Code Motion pass.
- Add
phi
instruction. - Add Loop Independent Code Motion Pass.
- Add Control Flow Simplification Pass.
- Add Variable to Phi Promotion Pass.
- Add
serde
dependency. - Add serialization/deserialization for the IR.
- Add missing
dyn
keywords. - Preserve anonymous names as hints in the DFG.
- Use names when dumping values.
- Make
Unit
object-safe. - Allow comments in certain locations in the assembly.
- Make
ty
module visible. - Change
const
instructions to useIntValue
andTimeValue
. - Improve constant folding.
- Remove
konst
module.
- Fix issue in
insert_inst_before
of block layouts. - Fix instruction insertion position being invalidated on instruction removal.
- Add function to lookup external units in a module.
- Data flow instructions in entities are no longer automatically of signal type.
- Leading
%
in block names may now be omitted. - Make types in syntax of
extf
,exts
,insf
, andinss
more explicit. - Increase minimum rustc version to 1.36.
- Limit
wait
to processes. - Limit
inst
to entities. - Fix reader not always accepting non-uniform arrays like
[i32 %0, %1]
. - Fix reader not accepting
shl
,shr
, andmux
instructions. - Fix
extf
andexts
sometimes having wrong return type.
- Add
llhd-check
tool to verify consistency of assembly files. - Add
const iN$
flavor to generate a constant integer signal. - Add
llhd-opt
tool to perform assembly optimization. - Add constant folding pass.
- Add dead code elimination pass.
- Triggers for
reg
instruction now require type annotation.
- Fix
reg
instruction writer output having data and triggers mangled. - Fix
remove_inst
for instructions not yielding a result. - Fix
prune_if_unused
for instructions not yielding a result.
- Make llhd-conv more robust in presence of unknown LIB pin functions.
- Add
llhd-conv
tool to convert between intermediate representations.
- Add
ir
module. - Add
lalrpop
dependency. - Add
write_module
,write_module_string
,parse_type
,parse_time
, andparse_module
to theassembly
module.
- Update assembly reader and writer to new IR module.
- Update
num
to version 0.2.
- Remove
write
andwrite_string
from theassembly
module. - Remove
visit
module. - Remove
Module
in favor ofir::Module
. - Remove
Entity
in favor ofir::Entity
. - Remove
Function
in favor ofir::Function
. - Remove
Process
in favor ofir::Process
. - Remove
seq_body
module. - Remove
block
module. - Remove
argument
module. - Remove
inst
module. - Remove
unit
module. - Remove
Const
andConstInt
in favor of theconst
instruction. - Remove
aggregate
module in favor ofarray
andstruct
instructions. - Remove
value
module. - Remove
combine
dependency.
- Fix emission of time constants.
- Signal and pointer semantics for
extract
. (#41) - Constructor for constant aggregate values.
### Changed
- Make
shl
andshr
separate instructions.
- Fix parsing of spaces in time constants.
- Fix parsing of dots in names. (#44)
- Add
insert
andextract
instructions. - Add missing
unwrap_*
andis_*
functions to types. (#35) - Add aggregate values. (#39)
- Add struct and array type parsing.
- Rename
as_*
functions on types tounwrap_*
. - Rename
VectorType
toArrayType
. (#24) - Change vector syntax from
<N x T>
to[N x T]
. - Swap order of
store
instruction parameters such that the pointer comes first. - Change type of delta and epsilon time steps to
usize
.
- Fix representation of times in assembly; always print seconds. (#36)
- Fix type lookup of constants via
Context::ty
.
- Make
ValueRef
,InstKind
,ReturnKind
, andBranchKind
comparable. - Add
var
,load
, andstore
instructions.
- Fix blocks with temporary names not being parsed properly.
- Fix parsing of comparison operations.
- Fix time constant printing. (#28)
- Add
unwrap_*
functions onValueRef
. - Add
write
andwrite_string
convenience functions. (#26)
- Emit instance names. (#21)
- Parse temporary names as
None
. (#30) - Fix parsing of binary operations. (#31)
- Make most modules private.
- Re-export contents of modules directly. (#22, #23)
- Make
util::write_implode
andutil::write_implode_with
private. - Accept anything that converts to a string as name of entities, functions, and processes.
- Initial release