[PATCH] D78248: [RegisterCoalescer] Extend a subrange if needed when filling range gap
Krzysztof Parzyszek via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 17 08:05:28 PDT 2020
kparzysz updated this revision to Diff 258327.
kparzysz added a comment.
Created a smaller testcase.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D78248/new/
https://reviews.llvm.org/D78248
Files:
llvm/lib/CodeGen/RegisterCoalescer.cpp
llvm/test/CodeGen/Hexagon/regalloc-coal-extend-short-subrange.mir
Index: llvm/test/CodeGen/Hexagon/regalloc-coal-extend-short-subrange.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/Hexagon/regalloc-coal-extend-short-subrange.mir
@@ -0,0 +1,45 @@
+# RUN: llc -march=hexagon -run-pass simple-register-coalescing -verify-coalescing %s -o - | FileCheck %s
+#
+# Check that this doesn't crash.
+# CHECK: ENDLOOP
+
+---
+name: foo
+tracksRegLiveness: true
+body: |
+ bb.0:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $r0, $r1, $r2, $v0, $v1, $v2, $v3
+
+ %0:hvxwr = COPY $v0
+ %1:intregs = COPY $r0
+ %2:predregs = C2_cmpgtui %1, 2
+ %3:intregs = COPY $r1
+ %4:intregs = COPY $r2
+ %5:hvxvr = COPY $v1
+ %6:hvxwr = V6_vcombine $v1, $v0
+ %7:hvxqr = IMPLICIT_DEF
+ J2_loop0r %bb.1, %3, implicit-def $lc0, implicit-def $sa0, implicit-def $usr
+ J2_jumpf %2, %bb.2, implicit-def $pc
+ J2_jump %bb.1, implicit-def $pc
+
+ bb.1:
+ successors: %bb.2(0x04000000), %bb.1(0x7c000000)
+
+ %8:hvxwr = COPY %0
+ %9:hvxvr = V6_vL32b_ai %4, 0
+ %10:hvxvr = V6_vL32b_ai %4, 128
+ %5:hvxvr = V6_vaddwq %7, %5, %9
+ %11:hvxqr = V6_vgtuw %10, %0.vsub_lo
+ %12:hvxvr = V6_vL32b_ai %4, 256
+ %13:hvxvr = V6_vL32b_ai %4, 384
+ %5:hvxvr = V6_vaddwq %11, %5, %13
+ %7:hvxqr = V6_vgtuw %6.vsub_hi, %13
+ %0:hvxwr = COPY %8
+ %0:hvxwr = V6_vmpyhv_acc %0, %12, %12
+ %6:hvxwr = COPY %8
+ ENDLOOP0 %bb.1, implicit-def $pc, implicit-def $lc0, implicit $sa0, implicit $lc0
+ J2_jump %bb.2, implicit-def $pc
+
+ bb.2:
+...
Index: llvm/lib/CodeGen/RegisterCoalescer.cpp
===================================================================
--- llvm/lib/CodeGen/RegisterCoalescer.cpp
+++ llvm/lib/CodeGen/RegisterCoalescer.cpp
@@ -675,6 +675,12 @@
S.removeSegment(*SS, true);
continue;
}
+ // The subrange may have ended before FillerStart. If so, extend it.
+ if (!S.getVNInfoAt(FillerStart)) {
+ SlotIndex BBStart =
+ LIS->getMBBStartIdx(LIS->getMBBFromIndex(FillerStart));
+ S.extendInBlock(BBStart, FillerStart);
+ }
VNInfo *SubBValNo = S.getVNInfoAt(CopyIdx);
S.addSegment(LiveInterval::Segment(FillerStart, FillerEnd, SubBValNo));
VNInfo *SubValSNo = S.getVNInfoAt(AValNo->def.getPrevSlot());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78248.258327.patch
Type: text/x-patch
Size: 2333 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200417/8e5408cb/attachment-0001.bin>
More information about the llvm-commits
mailing list