[llvm] r315908 - [AMDGPU] Prevent Machine Copy Propagation from replacing live copy with the dead one

Alexander Timofeev via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 16 07:35:29 PDT 2017


Author: alex-t
Date: Mon Oct 16 07:35:29 2017
New Revision: 315908

URL: http://llvm.org/viewvc/llvm-project?rev=315908&view=rev
Log:
[AMDGPU] Prevent Machine Copy Propagation from replacing live copy with the dead one

Differential revision: https://reviews.llvm.org/D38754

Added:
    llvm/trunk/test/CodeGen/AMDGPU/dead_copy.mir
Modified:
    llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp

Modified: llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp?rev=315908&r1=315907&r2=315908&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp Mon Oct 16 07:35:29 2017
@@ -275,18 +275,20 @@ void MachineCopyPropagation::CopyPropaga
         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;
     }

Added: llvm/trunk/test/CodeGen/AMDGPU/dead_copy.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/dead_copy.mir?rev=315908&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/dead_copy.mir (added)
+++ llvm/trunk/test/CodeGen/AMDGPU/dead_copy.mir Mon Oct 16 07:35:29 2017
@@ -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
+...




More information about the llvm-commits mailing list