[PATCH] D44911: [MachineCopyPropagation] Handle COPY with overlapping source/dest.

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 29 17:59:04 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL328851: [MachineCopyPropagation] Handle COPY with overlapping source/dest. (authored by efriedma, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D44911?vs=139857&id=140374#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D44911

Files:
  llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp
  llvm/trunk/test/CodeGen/AArch64/machine-dead-copy.mir


Index: llvm/trunk/test/CodeGen/AArch64/machine-dead-copy.mir
===================================================================
--- llvm/trunk/test/CodeGen/AArch64/machine-dead-copy.mir
+++ llvm/trunk/test/CodeGen/AArch64/machine-dead-copy.mir
@@ -6,6 +6,8 @@
   define i32 @copyprop2(i32 %a, i32 %b) { ret i32 %a }
   define i32 @copyprop3(i32 %a, i32 %b) { ret i32 %a }
   define i32 @copyprop4(i32 %a, i32 %b) { ret i32 %a }
+  define i32 @copyprop5(i32 %a, i32 %b) { ret i32 %a }
+  define i32 @copyprop6(i32 %a, i32 %b) { ret i32 %a }
   declare i32 @foo(i32)
 ...
 ---
@@ -65,3 +67,33 @@
     RET_ReallyLR implicit $w0
 ...
 
+# Don't try to erase any COPY which overlaps itself.
+# CHECK-LABEL: name: copyprop5
+# CHECK: bb.0:
+# CHECK: COPY killed $q26_q27_q28_q29
+# CHECK: COPY killed $q28_q29_q30_q31
+name: copyprop5
+body: |
+  bb.0:
+    liveins: $q26_q27_q28_q29
+    $q28_q29_q30_q31 = COPY killed $q26_q27_q28_q29
+    $q26_q27_q28_q29 = COPY killed $q28_q29_q30_q31
+    BL @foo, csr_aarch64_aapcs, implicit killed $q26_q27_q28_q29
+    RET_ReallyLR
+...
+
+# Don't try to analyze any COPY which overlaps itself.
+# CHECK-LABEL: name: copyprop6
+# CHECK: bb.0:
+# CHECK: COPY killed $q26_q27_q28_q29
+# CHECK: $q30 = COPY $q28
+name: copyprop6
+body: |
+  bb.0:
+    liveins: $q26_q27_q28_q29
+    $q28_q29_q30_q31 = COPY killed $q26_q27_q28_q29
+    $q30 = COPY $q28
+    BL @foo, csr_aarch64_aapcs, implicit killed $q28_q29_q30_q31
+    RET_ReallyLR
+...
+
Index: llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp
+++ llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp
@@ -399,7 +399,9 @@
     MachineInstr *MI = &*I;
     ++I;
 
-    if (MI->isCopy()) {
+    // Analyze copies (which don't overlap themselves).
+    if (MI->isCopy() && !TRI->regsOverlap(MI->getOperand(0).getReg(),
+                                          MI->getOperand(1).getReg())) {
       unsigned Def = MI->getOperand(0).getReg();
       unsigned Src = MI->getOperand(1).getReg();
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44911.140374.patch
Type: text/x-patch
Size: 2101 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180330/d7dc42c6/attachment.bin>


More information about the llvm-commits mailing list