[MachineCopyPropagation] Handle propagation of undef copies

When propagating undefined copies the undef flag must also be
propagated.

Reviewed By: foad

Differential Revision: https://reviews.llvm.org/D111219
This commit is contained in:
Carl Ritson 2021-10-07 19:36:10 +09:00
parent 322e13b91a
commit b5d6ad20e1
2 changed files with 23 additions and 0 deletions

View File

@ -576,6 +576,7 @@ void MachineCopyPropagation::forwardUses(MachineInstr &MI) {
MOUse.setReg(CopySrcReg);
if (!CopySrc.isRenamable())
MOUse.setIsRenamable(false);
MOUse.setIsUndef(CopySrc.isUndef());
LLVM_DEBUG(dbgs() << "MCP: After replacement: " << MI << "\n");

View File

@ -0,0 +1,22 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -o - %s -march=amdgcn -mcpu=gfx1010 -run-pass=machine-cp -verify-machineinstrs | FileCheck %s
---
name: undef_copy_propagation
tracksRegLiveness: true
body: |
bb.0:
; CHECK-LABEL: name: undef_copy_propagation
; CHECK: renamable $vgpr0 = COPY undef renamable $sgpr42, implicit $exec
; CHECK-NEXT: renamable $vgpr1 = COPY undef $sgpr42
; CHECK-NEXT: renamable $vgpr2 = COPY undef $sgpr42
; CHECK-NEXT: renamable $vgpr3 = COPY undef $sgpr42
; CHECK-NEXT: EXP_DONE 0, killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, -1, -1, 15, implicit $exec
renamable $vgpr0 = COPY undef renamable $sgpr42, implicit $exec
renamable $vgpr1 = COPY renamable $vgpr0
renamable $vgpr2 = COPY renamable $vgpr0
renamable $vgpr3 = COPY renamable $vgpr0
EXP_DONE 0, killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, -1, -1, 15, implicit $exec
...