Types:
| Old type | New type | Remarks |
|---|---|---|
void | none | |
time | !llhd.time | |
iN | MLIR signless integer | |
nN | enumeration not yet implemented | |
lN | nine-valued logic not yet implemented | |
T* | pointers not yet implemented | |
T$ | !llhd.sig<T> | only integers for now |
Array [N x T] | MLIR Vector | |
Struct {T0, T1, ...} | MLIR Tuple |
Instructions:
| Old instruction | New instruction | Remarks |
|---|---|---|
| Values | ||
const | llhd.const, constant | not stable, might switch to std dialect constant for integers |
alias | removed | |
| Array construction | constant | stable, look here for the three possible attributes to create a vector, e.g. %vec = constant dense<[1,2,3]> : vector<3xi32> |
Struct/Tuple construction, insf, inss, extf | not yet implemented | |
exts | llhd.exts | not stable |
mux | vector.extractelement | stable |
| Bitwise | ||
not, and, or, xor | llhd.not, llhd.and, llhd.or, llhd.xor | stable, nine-valued logic will be added later |
shl, shr | llhd.shl, llhd.shr | only integer and signal supported for now |
| Arithmetic | ||
neg, add, sub | llhd.neg, addi, subi | stable |
smul, umul | muli | stable |
sdiv, udiv | divi_signed, divi_unsigned | stable |
srem | remi_signed | stable |
urem, umod | remi_unsigned | stable |
smod | llhd.smod | stable |
| Comparison | ||
eq, neq, slt, sle, sgt, sge, ult, ule, ugt, uge | cmpi | stable, use predicates accordingly, integers only |
| Control flow | ||
phi | MLIR block argument | stable, MLIR uses block arguments instead |
br | br | stable, unconditional variant |
br | cond_br | stable, conditional variant |
call, ret, wait, halt | call, return, llhd.wait, llhd.halt | stable |
| Memory | ||
var, ld, st | not yet implemented | |
| Signals | ||
sig, prb, drv | llhd.sig, llhd.prb, llhd.drv | stable |
| Structural | ||
reg | llhd.reg | not quite stable |
del, con | not yet implemented | |
inst | llhd.inst | stable |
| Units | ||
func, proc, entity | func, llhd.proc, llhd.entity | stable |