[PATCH] D23172: IfConversion: Add implicit uses for redefined regs with live subregisters
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 28 12:31:55 PDT 2016
kparzysz retitled this revision from "IfConversion: Add implicit uses for live subregisters" to "IfConversion: Add implicit uses for redefined regs with live subregisters".
kparzysz updated the summary for this revision.
kparzysz updated this revision to Diff 72879.
kparzysz added a comment.
Applied suggested changes.
Repository:
rL LLVM
https://reviews.llvm.org/D23172
Files:
lib/CodeGen/IfConversion.cpp
test/CodeGen/Hexagon/ifcvt-live-subreg.mir
Index: test/CodeGen/Hexagon/ifcvt-live-subreg.mir
===================================================================
--- /dev/null
+++ test/CodeGen/Hexagon/ifcvt-live-subreg.mir
@@ -0,0 +1,50 @@
+# RUN: llc -march=hexagon -run-pass if-converter -o - %s | FileCheck %s
+# Check that an implicit use is generated for a predicated instruction
+# when a subregister of the redefined register is live.
+
+# CHECK-LABEL: name: foo
+
+# Verify the predicated block:
+# CHECK-LABEL: bb.0:
+# CHECK: liveins: %r0, %r1, %p0, %d8
+# CHECK: %d8 = A2_combinew killed %r0, killed %r1
+# CHECK: %d8 = L2_ploadrdf_io %p0, %r29, 0, implicit %d8
+# CHECK: J2_jumprf %p0, killed %r31, implicit-def %pc, implicit-def %pc, implicit killed %d8
+
+--- |
+ define void @foo() {
+ ret void
+ }
+...
+
+
+---
+name: foo
+alignment: 4
+tracksRegLiveness: true
+liveins:
+ - { reg: '%r0' }
+ - { reg: '%r1' }
+ - { reg: '%p0' }
+ - { reg: '%d8' }
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: %r0, %r1, %p0, %d8
+ %d8 = A2_combinew killed %r0, killed %r1
+ J2_jumpf killed %p0, %bb.2, implicit-def %pc
+
+ bb.1:
+ liveins: %d0, %r17
+ %r0 = A2_tfrsi 0
+ %r1 = A2_tfrsi 0
+ A2_nop ; non-predicable
+ J2_jumpr killed %r31, implicit-def dead %pc, implicit killed %d0
+
+ bb.2:
+ ; Predicate this block.
+ %d8 = L2_loadrd_io %r29, 0
+ J2_jumpr killed %r31, implicit-def dead %pc, implicit killed %d8
+
+...
+
Index: lib/CodeGen/IfConversion.cpp
===================================================================
--- lib/CodeGen/IfConversion.cpp
+++ lib/CodeGen/IfConversion.cpp
@@ -1453,6 +1453,17 @@
}
if (LiveBeforeMI.count(Reg))
MIB.addReg(Reg, RegState::Implicit);
+ else {
+ bool HasLiveSubReg = false;
+ for (MCSubRegIterator S(Reg, TRI); S.isValid(); ++S) {
+ if (!LiveBeforeMI.count(*S))
+ continue;
+ HasLiveSubReg = true;
+ break;
+ }
+ if (HasLiveSubReg)
+ MIB.addReg(Reg, RegState::Implicit);
+ }
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23172.72879.patch
Type: text/x-patch
Size: 2055 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160928/05731af3/attachment-0001.bin>
More information about the llvm-commits
mailing list