You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[AArch64] Define high bits of FPR and GPR registers.
This is a step towards enabling subreg liveness tracking for AArch64, which
requires that registers are fully covered by their subregisters, as
covered here llvm#109797.
There are several changes in this patch:
* AArch64RegisterInfo.td and tests: Define the high bits like B0_HI,
H0_HI, S0_HI, D0_HI, Q0_HI. Because the bits must be defined by some
register class, this added a register class which meant that we had
to update 'magic numbers' in several tests.
The use of ComposedSubRegIndex helped 'compress' the number
of bits required for the lanemask. The correctness of the masks
is tested by an explicit unit tests.
* LoadStoreOptimizer: previously 'HasDisjunctSubRegs' was only true for
register tuples, but with this change to describe the high bits, a
register like 'D0' will also have 'HasDisjunctSubRegs' set to true
(because it's fullly covered by S0 and S0_HI). The fix here is to
explicitly test if the register class is one of the known D/Q/Z
tuples.
* TableGen: The handling of the isArtificial flag was entirely broken.
Skipping out too early from some of the loops led to incorrect
internal representation of the (sub)register(index) hierarchy, and
thus resulted in incorrect TableGen info.
0 commit comments