[llvm] r331518 - [Hexagon] Skip reserved physical registers when updating liveness

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Fri May 4 06:59:05 PDT 2018


Author: kparzysz
Date: Fri May  4 06:59:05 2018
New Revision: 331518

URL: http://llvm.org/viewvc/llvm-project?rev=331518&view=rev
Log:
[Hexagon] Skip reserved physical registers when updating liveness

Added:
    llvm/trunk/test/CodeGen/Hexagon/expand-condsets-phys-reg.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=331518&r1=331517&r2=331518&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonExpandCondsets.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonExpandCondsets.cpp Fri May  4 06:59:05 2018
@@ -547,7 +547,14 @@ void HexagonExpandCondsets::removeInstr(
 void HexagonExpandCondsets::updateLiveness(std::set<unsigned> &RegSet,
       bool Recalc, bool UpdateKills, bool UpdateDeads) {
   UpdateKills |= UpdateDeads;
-  for (auto R : RegSet) {
+  for (unsigned R : RegSet) {
+    if (!TargetRegisterInfo::isVirtualRegister(R)) {
+      assert(TargetRegisterInfo::isPhysicalRegister(R));
+      // There shouldn't be any physical registers as operands, except
+      // possibly reserved registers.
+      assert(MRI->isReserved(R));
+      continue;
+    }
     if (Recalc)
       recalculateLiveInterval(R);
     if (UpdateKills)

Added: llvm/trunk/test/CodeGen/Hexagon/expand-condsets-phys-reg.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/expand-condsets-phys-reg.mir?rev=331518&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/expand-condsets-phys-reg.mir (added)
+++ llvm/trunk/test/CodeGen/Hexagon/expand-condsets-phys-reg.mir Fri May  4 06:59:05 2018
@@ -0,0 +1,30 @@
+# RUN: llc -march=hexagon -run-pass expand-condsets %s -o - | FileCheck %s
+# REQUIRES: asserts
+
+# The physical register as an operand to C2_mux caused a crash.
+# Check that this compiles successfully and that the mux is expanded.
+
+# CHECK: %2:intregs = A2_tfrt %1, $r31
+# CHECK: %2:intregs = A2_tfrf killed %1, killed %0, implicit %2(tied-def 0)
+
+name: fred
+tracksRegLiveness: true
+body: |
+  bb.0:
+    successors: %bb.1, %bb.2
+    liveins: $r0
+
+    %0:intregs = A2_tfrsi 0           ;; Multiple defs to ensure IsSSA = false
+    %0:intregs = L2_loadri_io $r0, 0
+    %1:predregs = C2_cmplt %0, 10
+    %2:intregs = C2_mux %1, $r31, %0
+    %3:predregs = C2_cmpeqi %2, 0
+    J2_jumpt %3, %bb.1, implicit-def $pc
+    J2_jump %bb.2, implicit-def $pc
+
+  bb.1:
+    PS_jmpret $r31, implicit-def $pc
+
+  bb.2:
+    PS_jmpret $r31, implicit-def $pc
+...




More information about the llvm-commits mailing list