mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
46e43049cf
Implement shouldCoalesce() to help regalloc avoid running out of GR128 registers. If a COPY involving a subreg of a GR128 is coalesced, the live range of the GR128 virtual register will be extended. If this happens where there are enough phys-reg clobbers present, regalloc will run out of registers (if there is not a single GR128 allocatable register available). This patch tries to allow coalescing only when it can prove that this will be safe by checking the (local) interval in question. Review: Ulrich Weigand, Quentin Colombet https://reviews.llvm.org/D37899 https://bugs.llvm.org/show_bug.cgi?id=34610 llvm-svn: 314516
19 lines
858 B
LLVM
19 lines
858 B
LLVM
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 -O3 -o /dev/null
|
|
;
|
|
; Test that regalloc does not run out of registers
|
|
|
|
; This test will include a GR128 virtual reg.
|
|
define void @test0(i64 %dividend, i64 %divisor) {
|
|
%rem = urem i64 %dividend, %divisor
|
|
call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6},{r7},{r8},{r9},{r10},{r11},{r12},{r13},{r14}"(i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 %rem)
|
|
ret void
|
|
}
|
|
|
|
; This test will include an ADDR128 virtual reg.
|
|
define i64 @test1(i64 %dividend, i64 %divisor) {
|
|
%rem = urem i64 %dividend, %divisor
|
|
call void asm sideeffect "", "{r2},{r3},{r4},{r5},{r6},{r7},{r8},{r9},{r10},{r11},{r12},{r13},{r14}"(i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 %rem)
|
|
%ret = add i64 %rem, 1
|
|
ret i64 %ret
|
|
}
|