diff --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp --- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp +++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp @@ -576,6 +576,7 @@ 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 --- /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 +...