From 3828242c7e6527aaacff32f0c42b0e0fd37a20a6 Mon Sep 17 00:00:00 2001 From: Alexander Timofeev Date: Mon, 16 Oct 2017 14:35:29 +0000 Subject: [AMDGPU] Prevent Machine Copy Propagation from replacing live copy with the dead one Differential revision: https://reviews.llvm.org/D38754 llvm-svn: 315908 --- llvm/lib/CodeGen/MachineCopyPropagation.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'llvm/lib/CodeGen/MachineCopyPropagation.cpp') diff --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp index 4655b5ba704..030db4366e9 100644 --- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp +++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp @@ -275,18 +275,20 @@ void MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) { ClobberRegister(Reg); } - // Remember Def is defined by the copy. - for (MCSubRegIterator SR(Def, TRI, /*IncludeSelf=*/true); SR.isValid(); - ++SR) { - CopyMap[*SR] = MI; - AvailCopyMap[*SR] = MI; - } + if (!MI->getOperand(0).isDead() && !MI->getOperand(1).isUndef()) { + // Remember Def is defined by the copy. + for (MCSubRegIterator SR(Def, TRI, /*IncludeSelf=*/true); SR.isValid(); + ++SR) { + CopyMap[*SR] = MI; + AvailCopyMap[*SR] = MI; + } - // Remember source that's copied to Def. Once it's clobbered, then - // it's no longer available for copy propagation. - RegList &DestList = SrcMap[Src]; - if (!is_contained(DestList, Def)) - DestList.push_back(Def); + // Remember source that's copied to Def. Once it's clobbered, then + // it's no longer available for copy propagation. + RegList &DestList = SrcMap[Src]; + if (!is_contained(DestList, Def)) + DestList.push_back(Def); + } continue; } -- cgit v1.2.3