
This pull request port `regallocfast` to new pass manager. It exposes the parameter `filter` to handle different register classes for AMDGPU. IIUC AMDGPU need to allocate different register classes separately so it need implement its own `--<reg-class>-regalloc`. Now users can use e.g. `-passe=regallocfast<filter=sgpr>` to allocate specific register class. The command line option `--regalloc-npm` is still in work progress, plan to reuse the syntax of passes, e.g. use `--regalloc-npm=regallocfast<filter=sgpr>,greedy<filter=vgpr>` to replace `--sgpr-regalloc` and `--vgpr-regalloc`.
46 lines
2.1 KiB
YAML
46 lines
2.1 KiB
YAML
# RUN: llc -mtriple=x86_64-- -run-pass=regallocfast -o - %s | FileCheck %s
|
|
# RUN: llc -mtriple=x86_64-- -passes=regallocfast -o - %s | FileCheck %s
|
|
|
|
# Check that fastregalloc does not displace register assigned to tied def when
|
|
# RegMask operand is present. STATEPOINT is an example of such instruction.
|
|
# Tied def/use must be assigned to the same register.
|
|
---
|
|
name: test_relocate
|
|
tracksRegLiveness: true
|
|
frameInfo:
|
|
adjustsStack: true
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $rdi
|
|
|
|
; CHECK: renamable [[REG:\$[a-z0-9]+]] = STATEPOINT 0, 0, 0, target-flags(x86-plt) 0, 2, 0, 2, 0, 2, 0, 2, 1, renamable [[REG]](tied-def 0)
|
|
|
|
%1:gr64 = COPY $rdi
|
|
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
|
%1:gr64 = STATEPOINT 0, 0, 0, target-flags(x86-plt) 0, 2, 0, 2, 0, 2, 0, 2, 1, %1(tied-def 0), 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp
|
|
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
|
$rax = COPY %1
|
|
RET 0, killed $rax
|
|
...
|
|
|
|
# Same as above but with multiple RegMask operands per instruction.
|
|
# These regmasks have no real meaning and chosen to allow only single register to be assignable ($rbp)
|
|
---
|
|
name: test_relocate_multi_regmasks
|
|
tracksRegLiveness: true
|
|
frameInfo:
|
|
adjustsStack: true
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $rdi
|
|
|
|
; CHECK: renamable $rbp = STATEPOINT 0, 0, 0, target-flags(x86-plt) 0, 2, 0, 2, 0, 2, 0, 2, 1, renamable $rbp(tied-def 0)
|
|
|
|
%1:gr64 = COPY $rdi
|
|
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
|
%1:gr64 = STATEPOINT 0, 0, 0, target-flags(x86-plt) 0, 2, 0, 2, 0, 2, 0, 2, 1, %1(tied-def 0), 2, 0, 2, 1, 0, 0, csr_64_rt_allregs, csr_64_cxx_tls_darwin_pe, implicit-def $rsp, implicit-def $ssp
|
|
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
|
$rax = COPY %1
|
|
RET 0, killed $rax
|
|
...
|