tree 39ef3649eb54e5d33dfcb92d5de5a3a0095317d7
parent 5edf12738441d54239a5043e727b4dac709728c7
author Dominik Steenken <dost@de.ibm.com> 1743442206 +0200
committer GitHub <noreply@github.com> 1743442206 +0200
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsFcBAABCAAQBQJn6tEeCRC1aQ7uu5UhlAAA4BsQADXNfhNFOEFqzhG8UyKvNhPQ
 YVvBgVTue638sgOYhpcTBKjmxdcSCvlNw91QorJpL+g6HTQhPbde/8XmfCkbsS7A
 1LEaDccpPgKXxN9omAxO2N+B7zuPxOaff24XdJbWK/wQ7RtQGclo5BZNGgdyh66u
 sUX3ngW6RVJauNyskY0F25vXPqH3TmvK5b22zfGIZ4ucWQ0ja33tOGmeyP62znC+
 +Yu63NvNZ8gL2fPI4ucoFdwT33YI1e2Laajd6WhKp3dDbw2vZHoZ/uQEbX7asKNi
 wcJHrvJkJjLTdqi//Tao6+JrPWZPDYCLqCC4w5x1vFSPed4FpRjlviRdR0Ha+k58
 TQGxmPEWbTnFGqk3mvqxMYqr+PSb3t4NmPifS7w+AI4QmyuHkXUTMsj7mJ+3EgrW
 qdLUeRp3OufoCuheIUfy9XqGqH/hgdXCeBwkdf/8Ev0r9atZ1Pn1f0GFWt2BYjBH
 V3EnuO59Etdz1LWSyeN4AsLUh+EPpXYjNmHQSldHRjzrhHxc7VLDJjw5AaC2lnIk
 BrLY8/DHyBZ6Thb3JIG2hMtIYN7CZN5YnUX2IQuzBPw8yLBpGPo/bteqAxp9OLAW
 fPGWLvJ9U6h/8PEGCQsmBXhbnlXRZFBPqC87IgbBFAMIR4LASPWtl1UyRJRaHtO+
 eEI9Vlpm+i+tQyHNjpeu
 =sOTb
 -----END PGP SIGNATURE-----
 

[SystemZ, DebugInfo] Instrument SystemZ backend passes for Instr-Ref DebugInfo (#133061)

This PR instruments the optimization passes in the SystemZ backend with
calls to `MachineFunction::substituteDebugValuesForInst` where
instruction substitutions are made to instructions that may compute
tracked values.

Tests are also added for each of the substitutions that were inserted.
Details on the individual passes follow.

### systemz-copy-physregs
When a copy targets an access register, we redirect the copy via an
auxiliary register. This leads to the final result being written by a
newly inserted SAR instruction, rather than the original MI, so we need
to update the debug value tracking to account for this.

### systemz-long-branch
This pass relaxes relative branch instructions based on the actual
locations of blocks. Only one of the branch instructions qualifies for
debug value tracking: BRCT, i.e. branch-relative-on-count, which
subtracts 1 from a register and branches if the result is not zero. This
is relaxed into an add-immediate and a conditional branch, so any
`debug-instr-number` present must move to the add-immediate instruction.

### systemz-post-rewrite
This pass replaces `LOCRMux` and `SELRMux` pseudoinstructions with
either the real versions of those instructions, or with branching
programs that implement the intent of the Pseudo. In all these cases,
any `debug-instr-number` attached to the pseudo needs to be reallocated
to the appropriate instruction in the result, either LOCR, SELR, or a
COPY.

### systemz-elim-compare
Similar to systemz-long-branch, for this pass, only few substitutions
are necessary, since it mainly deals with conditional branch
instructions. The only exceptiona are again branch-relative-on-count, as
it modifies a counter as part of the instruction, as well as any of the
load instructions that are affected.