The most common situation where G_ASSERT_ZEXT appears for AMDGPU is a
copy from a physical register, which happens to use set the actual
register class on the virtual register. After copy coalescing, the
assert's source operand had a vreg with a set class. The verifier was
strictly rejecting cases where the set class/bank weren't an exact
match. Additionally, RegBankSelect was also expecting a register bank
to be set on the register, not a class.
This is much stricter than regular copies so relax this behavior. This
now allows these 2 cases:
- Source register has either class or bank, and the result does not
- Source register has a register class, and the result is a register with a matching bank.
This should avoid needing some kind of special handling to avoid
violating this constraint when folding copies.
maybe we should also test like