blob: 05f583e2e692f8838b096ac01154d331bfe3b9cf [file] [edit]
# RUN: llc -mtriple=aarch64 -mattr=+sve -start-before=greedy -stop-after=virtregrewriter -debug-only=regalloc %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=DBG
# REQUIRES: asserts
# Check that the register allocator gets hints to reuse registers of one of it's operands.
---
name: prioritize_movprfx_hints
tracksRegLiveness: true
isSSA: false
noVRegs: false
body: |
bb.0.entry:
liveins: $z0, $z1, $z2, $z3, $p0
; DBG: Machine code for function prioritize_movprfx_hints
;
; DBG: selectOrSplit ZPR:%4
; DBG-NEXT: hints: $z0 $z1{{$}}
;
; DBG: selectOrSplit ZPR:%5
; DBG-NEXT: hints: $z2 $z3{{$}}
;
; DBG: [%0 -> $z3] ZPR
; DBG: [%1 -> $z2] ZPR
; DBG: [%2 -> $z1] ZPR
; DBG: [%3 -> $z0] ZPR
; DBG: [%4 -> $z0] ZPR
; DBG: [%5 -> $z2] ZPR
; DBG: [%6 -> $z0] ZPR
%0:zpr = COPY $z3
%1:zpr = COPY $z2
%2:zpr = COPY $z1
%3:zpr = COPY $z0
%4:zpr = SDIV_ZPZZ_D_UNDEF $p0, %3:zpr, %2:zpr
%5:zpr = MUL_ZPZZ_D_UNDEF $p0, %1:zpr, %0:zpr
%6:zpr = MUL_ZPZZ_D_UNDEF $p0, %5:zpr, %4:zpr
$z0 = COPY %6:zpr
RET_ReallyLR implicit $z0
...
# Check that the register allocator prioritises hints that are set by the register
# allocator itself (i.e. to use z4 for the result register).
---
name: prioritize_regalloc_hints
isSSA: false
noVRegs: false
body: |
bb.0.entry:
%0:zpr = FDUP_ZI_S 0, implicit $vg
%1:zpr = FDUP_ZI_S 16, implicit $vg
%2:zpr = FDUP_ZI_S 32, implicit $vg
%3:ppr_3b = PTRUE_S 31, implicit $vg
; DBG: Machine code for function prioritize_regalloc_hints
;
; DBG: selectOrSplit ZPR:%4
; DBG-NEXT: hints: $z4{{$}}
;
; DBG: [%0 -> $z0] ZPR
; DBG: [%1 -> $z1] ZPR
; DBG: [%2 -> $z2] ZPR
; DBG: [%3 -> $p0] PPR_3b
; DBG: [%4 -> $z4] ZPR
%4:zpr = FMLA_ZPZZZ_S_UNDEF %3, %0, %1, %2
$z4 = COPY %4
RET_ReallyLR implicit $z4
...