circt/test/Dialect/LLHD/Transforms
Fabian Schuiki 0d8106e640
[LLHD] Add support for `llhd.sig.array_get` projections to Mem2Reg (#8509)
Extend the Mem2Reg pass to support drives to `llhd.sig.array_get`
projections into a promotable signal. This requires a few changes:

- When checking whether a signal is promotable, we have to recursively
  check its users and look through `llhd.sig.array_get` ops to see if
  all uses are safe for promotion.

- The lattice used to propagate needed and reaching definitions has to
  track the projection being driven separately from the underlying root
  slot being driven.

- A new set of helpers to unpack and pack stacks of projections help
  probes and drives take a promotable slot and its value, descend into
  subfields as indicated by a set of projection ops ("unpack"), and then
  optionally mutate the value of a subfield and zip the updated value
  back up to the promotable slot ("pack").

- During backward and forward propagation across the lattice, drives to
  projections have to create the need for a definition of the slot to be
  available because they have to take the slot's current value in order
  to mutate the projected field.

- The functions that resolve definitions have to unpack a slot's value
  according to the projections between the probe and the slot. In case
  of a drive they also have to mutate the projected field value after
  unpacking and then pack everything back op in order to create a new
  reaching definition for the entire slot to be forwarded to readers.

This commit also drops `slotOrder` in favor of a `promotable` set of
values. The actual order of slots was never used.
2025-05-23 13:23:15 -07:00
..
deseq.mlir [LLHD] Update Deseq pass to work with process results (#8403) 2025-04-17 09:53:31 -07:00
desequentialization.mlir [LLHD][Desequentialization] Drive after inferred register should have no delay 2025-02-05 12:13:51 +00:00
earlyCodeMotion.mlir [LLHD] Let WaitOp observe plain values instead of signals (#7528) 2024-08-19 17:36:10 +01:00
hoist-signals.mlir [LLHD] Hoist drives out of processes (#8302) 2025-04-01 08:11:12 -07:00
lower-processes.mlir [LLHD] Update LowerProcesses pass to work with process results (#8387) 2025-04-06 21:31:57 -07:00
mem2reg.mlir [LLHD] Add support for `llhd.sig.array_get` projections to Mem2Reg (#8509) 2025-05-23 13:23:15 -07:00
memoryToBlockArgument.mlir [LLHD] Let WaitOp observe plain values instead of signals (#7528) 2024-08-19 17:36:10 +01:00
processLowering.mlir [LLHD] Allow processes to yield results (#8298) 2025-03-05 07:58:48 -08:00
sig2reg.mlir [LLHD][Sig2Reg] Support some signal aliasing (#8261) 2025-02-20 18:23:12 +00:00
sroa.mlir [LLHD][HW] Implement SROA interfaces (#7672) 2024-10-07 19:46:31 +01:00
temporal-code-motion.mlir [LLHD][TCM] Ignore processes with CFG loops within a TR (#8196) 2025-02-06 17:47:34 +00:00
totalFunctionInlining.mlir [LLHD] Refactor llhd.proc and remove llhd.inst (#7357) 2024-07-19 21:18:07 +01:00