[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