[RegisterCoalescer] fix dst subreg replacement during remat copy trick
authorAfanasyev Ivan <ivafanas@gmail.com>
Fri, 23 Sep 2022 18:52:29 +0000 (18:52 +0000)
committerQuentin Colombet <quentin.colombet@gmail.com>
Fri, 23 Sep 2022 18:52:29 +0000 (18:52 +0000)
commitd2e434c378423477321d98f8b0224760d24c877a
treeaef511953317e2b2f55dbf5fb7b838a35a452847
parent086234927a05860a5f02b60bce02e5d6be7f878a
[RegisterCoalescer] fix dst subreg replacement during remat copy trick

Instructions might use definition register as its "undef" operand. It
happens on architectures with predicated executon:

```
%0:subreg = instruction op_1, ..., op_N, undef %0:subreg, op_N+2, ...
```

RegisterCoalescer should take into account all remat instruction
operands during destination subregister fixup.

```
; remat result before fix:
%1 = instruction op_1, ..., op_N, undef %1:subreg, op_N+2, ...

; remat result after fix (correct):
%1 = instruction op_1, ..., op_N, undef %1, op_N+2, ...
```

Differential Revision: https://reviews.llvm.org/D125657
llvm/lib/CodeGen/RegisterCoalescer.cpp