Skip to content

ACT-Backend v1.16

Latest

Choose a tag to compare

@DEVANSH-DVJ DEVANSH-DVJ released this 05 Nov 06:33
0e749e0

Changes since v1.15, constraints:

  • Checked an instruction's attribute constraints when selecting it (#283)
  • Passed an instruction's address constraints to the allocator (#287)
  • Read a quotient and a remainder in an attribute constraint (#289)
  • Passed an address constraint's quotient and remainder to the allocator (#293)
  • Read a conjunction or a bracketed condition in a constraint (#295)
  • Pinned TAIDL v2.15 and TAIDL-TO v2.11 and dropped a check TAIDL now makes (#296)

This release:

  • The version is 1.16 in pyproject.toml and act_backend/__init__.py, and the README's install line names v1.16. The generated crate's Cargo.toml and Cargo.lock say 1.16.0.
  • generate_backend now accepts a constraint of comparisons over an instruction's attributes and integers, joined by and and or and bracketed to any depth. v1.15 refused any instruction with a constraint.
  • A constraint that names no address attribute is now checked in the instruction's precondition in ir2isa_rewrites.rs. So the instruction is selected only where it holds.
  • A constraint that names an address attribute, such as those set_apart and set_no_partial_overlap give, is now pushed to the allocator. So a candidate is placed only where it holds.
  • Under set_apart an output is now placed apart from each marked input. Under set_no_partial_overlap it either shares each marked input's start or lies apart from it.
  • A quotient and a remainder in a constraint are now rounded down as TAIDL-TO rounds them, by any divisor other than zero. That holds over the attributes and over addresses alike.
  • An operand's start may now multiply two address attributes, where v1.15 refused it at generation.
  • A start may now also divide or take a remainder by an attribute or by a negative integer, which v1.15 refused too. A divisor of addresses is held at 1 or more.
  • An address attribute that no operand reads is now accepted.
  • A comparison whose arithmetic overflows 64 bits does not hold, and fails the whole constraint where it divides. So do a division by zero and a part of an address constraint that overflows 64 bits, and the instruction is not selected.
  • An address variable of a slice or a concatenate now takes its values from 0 up, as an instruction's and every offset do.
  • These are still refused at generation, with the message of v1.15:
    • a constraint that holds a state variable
    • literals alone that compute to a value that overflows 64 bits
    • a quotient or a remainder of an address by zero
  • A constraint with an integer literal outside the 64-bit range, or a divisor that is the literal 0, now fails as TAIDL v2.15 loads it.
  • ACT-Backend now pins TAIDL v2.15, as TAIDL-TO v2.11 does. TAIDL v2.15 refuses at load an integer literal outside the signed 64-bit range and a division by the literal 0.
  • The two examples compile attention.hlo to the same calls and output as in v1.15.