[PATCH] D38616: [RegisterCoalescer] Don't set read-undef in pruneValues, only clear

Mikael Holmén via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 11 23:21:35 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL315564: [RegisterCoalescer] Don't set read-undef in pruneValues, only clear (authored by uabelho).

Changed prior to commit:
  https://reviews.llvm.org/D38616?vs=118547&id=118743#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D38616

Files:
  llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
  llvm/trunk/test/CodeGen/MIR/X86/simple-register-allocation-read-undef.mir


Index: llvm/trunk/test/CodeGen/MIR/X86/simple-register-allocation-read-undef.mir
===================================================================
--- llvm/trunk/test/CodeGen/MIR/X86/simple-register-allocation-read-undef.mir
+++ llvm/trunk/test/CodeGen/MIR/X86/simple-register-allocation-read-undef.mir
@@ -0,0 +1,30 @@
+# RUN: llc -mtriple=x86_64-- %s -o - -run-pass=simple-register-coalescing | FileCheck %s
+---
+name: f
+body: |
+  bb.0:
+    JB_1 %bb.2, undef implicit killed %eflags
+    JMP_1 %bb.1
+
+  bb.1:
+    %0 : gr64 = IMPLICIT_DEF
+    NOOP implicit-def undef %1.sub_32bit : gr64
+    NOOP implicit-def %1.sub_16bit : gr64
+    JMP_1 %bb.3
+
+  bb.2:
+    NOOP implicit-def %0
+    %1 = COPY %0
+
+  bb.3:
+    NOOP implicit killed %0
+    NOOP implicit killed %1
+...
+
+# We should have a setting of both sub_32bit and sub_16bit. The first one
+# should be undef and not dead, and the second should not be undef.
+
+# CHECK-NOT:  dead
+# CHECK:      NOOP implicit-def undef %1.sub_32bit
+# CHECK-NOT:  undef
+# CHECK-NEXT: NOOP implicit-def %1.sub_16bit
Index: llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
+++ llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
@@ -2685,8 +2685,8 @@
           for (MachineOperand &MO :
                Indexes->getInstructionFromIndex(Def)->operands()) {
             if (MO.isReg() && MO.isDef() && MO.getReg() == Reg) {
-              if (MO.getSubReg() != 0)
-                MO.setIsUndef(EraseImpDef);
+              if (MO.getSubReg() != 0 && MO.isUndef() && !EraseImpDef)
+                MO.setIsUndef(false);
               MO.setIsDead(false);
             }
           }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38616.118743.patch
Type: text/x-patch
Size: 1747 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171012/f5a5011a/attachment.bin>


More information about the llvm-commits mailing list