[llvm] r336662 - [Hexagon] Add implicit uses even when untied explicit uses are present
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 10 05:57:49 PDT 2018
Author: kparzysz
Date: Tue Jul 10 05:57:49 2018
New Revision: 336662
URL: http://llvm.org/viewvc/llvm-project?rev=336662&view=rev
Log:
[Hexagon] Add implicit uses even when untied explicit uses are present
An explicit untied use is not sufficient to maintain liveness of a
register redefined in a predicated instruction. For example
%1 = COPY %0
...
%1 = A2_paddif %2, %1, 1
could become
$r1 = COPY $r0
...
$r1 = A2_paddif $p0, $r1, 1
and later
$r1 = COPY $r0 ;; this is not really dead!
...
$r1 = A2_paddif $p0, $r0, 1
Added:
llvm/trunk/test/CodeGen/Hexagon/expand-condsets-impuse2.mir
Modified:
llvm/trunk/lib/Target/Hexagon/HexagonExpandCondsets.cpp
Modified: llvm/trunk/lib/Target/Hexagon/HexagonExpandCondsets.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonExpandCondsets.cpp?rev=336662&r1=336661&r2=336662&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonExpandCondsets.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonExpandCondsets.cpp Tue Jul 10 05:57:49 2018
@@ -499,14 +499,18 @@ void HexagonExpandCondsets::updateDeadsI
if (!Op.isReg() || !DefRegs.count(Op))
continue;
if (Op.isDef()) {
- ImpUses.insert({Op, i});
+ // Tied defs will always have corresponding uses, so no extra
+ // implicit uses are needed.
+ if (!Op.isTied())
+ ImpUses.insert({Op, i});
} else {
// This function can be called for the same register with different
// lane masks. If the def in this instruction was for the whole
// register, we can get here more than once. Avoid adding multiple
// implicit uses (or adding an implicit use when an explicit one is
// present).
- ImpUses.erase(Op);
+ if (Op.isTied())
+ ImpUses.erase(Op);
}
}
if (ImpUses.empty())
Added: llvm/trunk/test/CodeGen/Hexagon/expand-condsets-impuse2.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/expand-condsets-impuse2.mir?rev=336662&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/expand-condsets-impuse2.mir (added)
+++ llvm/trunk/test/CodeGen/Hexagon/expand-condsets-impuse2.mir Tue Jul 10 05:57:49 2018
@@ -0,0 +1,24 @@
+# RUN: llc -march=hexagon -run-pass=expand-condsets %s -o - | FileCheck %s
+
+# Check that there is a tied implicit use despite having an explicit (but
+# untied) use:
+# CHECK: %[[R:[0-9]+]]:intregs = A2_paddif killed %{{[0-9]+}}, %[[R]], 1, implicit %[[R]](tied-def 0)
+
+name: f0
+tracksRegLiveness: true
+body: |
+ bb.0:
+ successors: %bb.1
+ liveins: $r0, $r1
+ %0:intregs = COPY $r0
+ %1:intregs = COPY $r1
+ %2:intregs = COPY $r0
+ %3:intregs = M2_mpyi %2, %1
+ %4:intregs = A2_sub %0, %3
+ %5:predregs = C2_cmpeqi %4, 0
+ %6:intregs = A2_addi %2, 1
+ %7:intregs = C2_mux %5, %2, %6
+
+ bb.1:
+
+...
More information about the llvm-commits
mailing list