[AMDGPU] Prevent Machine Copy Propagation from replacing live copy with the dead one
authorAlexander Timofeev <Alexander.Timofeev@amd.com>
Fri, 10 Nov 2017 12:21:10 +0000 (12:21 +0000)
committerAlexander Timofeev <Alexander.Timofeev@amd.com>
Fri, 10 Nov 2017 12:21:10 +0000 (12:21 +0000)
Differential revision: https://reviews.llvm.org/D38754

llvm-svn: 317884

llvm/lib/CodeGen/MachineCopyPropagation.cpp
llvm/test/CodeGen/AMDGPU/dead_copy.mir [new file with mode: 0644]

index 1a39afe..4bcb4d5 100644 (file)
@@ -187,6 +187,8 @@ bool MachineCopyPropagation::eraseIfRedundant(MachineInstr &Copy, unsigned Src,
 
   // Check that the existing copy uses the correct sub registers.
   MachineInstr &PrevCopy = *CI->second;
+  if (PrevCopy.getOperand(0).isDead())
+    return false;
   if (!isNopCopy(PrevCopy, Src, Def, TRI))
     return false;
 
diff --git a/llvm/test/CodeGen/AMDGPU/dead_copy.mir b/llvm/test/CodeGen/AMDGPU/dead_copy.mir
new file mode 100644 (file)
index 0000000..d581b29
--- /dev/null
@@ -0,0 +1,27 @@
+# RUN: llc -o - %s -march=amdgcn -mcpu=fiji  -run-pass=machine-cp -verify-machineinstrs | FileCheck -check-prefix=GCN %s
+
+# GCN-LABEL: dead_copy
+# GCN:       bb.0
+# GCN-NOT:   dead %vgpr5 = COPY undef %vgpr11, implicit %exec
+# GCN:       %vgpr5 = COPY %vgpr11, implicit %exec
+
+---
+name: dead_copy
+
+body:    |
+
+  bb.0:
+    liveins: %vgpr11, %sgpr0, %sgpr1, %vgpr6, %vgpr7, %vgpr4
+
+    dead %vgpr5 = COPY undef %vgpr11, implicit %exec
+
+    %vgpr5 = COPY %vgpr11, implicit %exec
+
+    %sgpr14 = S_ADD_U32 %sgpr0, target-flags(amdgpu-gotprel) 1136, implicit-def %scc
+    %sgpr15 = S_ADDC_U32 %sgpr1, target-flags(amdgpu-gotprel32-lo) 0, implicit-def dead %scc, implicit %scc
+
+    %vgpr10 = COPY killed %sgpr14, implicit %exec
+    %vgpr11 = COPY killed %sgpr15, implicit %exec
+
+    FLAT_STORE_DWORDX4 %vgpr10_vgpr11, %vgpr4_vgpr5_vgpr6_vgpr7, 0, 0, 0, implicit %exec, implicit %flat_scr
+...