[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
Tue Oct 10 23:48:13 PDT 2017
uabelho updated this revision to Diff 118547.
uabelho retitled this revision from "[RegisterCoalescer] Don't set read-undef if there is a previous def" to "[RegisterCoalescer] Don't set read-undef in pruneValues, only clear".
uabelho edited the summary of this revision.
uabelho added a comment.
Updated according to Matthias's suggestions.
Changed the code change, and simplified test case. Updated commit message.
https://reviews.llvm.org/D38616
Files:
lib/CodeGen/RegisterCoalescer.cpp
test/CodeGen/MIR/X86/simple-register-allocation-read-undef.mir
Index: test/CodeGen/MIR/X86/simple-register-allocation-read-undef.mir
===================================================================
--- /dev/null
+++ 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: lib/CodeGen/RegisterCoalescer.cpp
===================================================================
--- lib/CodeGen/RegisterCoalescer.cpp
+++ 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.118547.patch
Type: text/x-patch
Size: 1628 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171011/06a78ced/attachment.bin>
More information about the llvm-commits
mailing list