From b5d6ad20e182318b2048a923eac56a198250ed0a Mon Sep 17 00:00:00 2001 From: Carl Ritson Date: Thu, 7 Oct 2021 19:36:10 +0900 Subject: [PATCH] [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 --- llvm/lib/CodeGen/MachineCopyPropagation.cpp | 1 + .../test/CodeGen/AMDGPU/undef-copy-propagation.mir | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir diff --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp index 2d9ada5..e3fbd88 100644 --- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp +++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp @@ -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"); diff --git a/llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir b/llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir new file mode 100644 index 0000000..af255e3 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir @@ -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 +... -- 2.7.4