[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