|
| 1 | +# RUN: not llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -vgpr-regalloc=basic -sgpr-regalloc=basic -start-before=regallocbasic,0 -stop-after=virtregrewriter,2 -verify-machineinstrs -o - %s 2> %t.basic.err | FileCheck -check-prefix=BASIC %s |
| 2 | +# RUN: not llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -start-before=greedy,0 -stop-after=virtregrewriter,2 -verify-machineinstrs -o - %s 2> %t.greedy.err | FileCheck -check-prefix=GREEDY %s |
| 3 | + |
| 4 | +# RUN: FileCheck -check-prefix=ERR -implicit-check-not=error %s < %t.basic.err |
| 5 | +# RUN: FileCheck -check-prefix=ERR -implicit-check-not=error %s < %t.greedy.err |
| 6 | + |
| 7 | +# This testcase must fail register allocation. It should also not |
| 8 | +# produce a verifier error after doing so. Previously, it would not |
| 9 | +# properly update the liveness for the dummy selected register. As a |
| 10 | +# result, VirtRegRewriter would incorrectly add kill flags which |
| 11 | +# combined with other uses of the physical register produced a |
| 12 | +# verifier error. |
| 13 | + |
| 14 | +# ERR: error: <unknown>:0:0: ran out of registers during register allocation |
| 15 | + |
| 16 | +# GREEDY: SI_SPILL_V256_SAVE undef $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 |
| 17 | +# GREEDY-NEXT: SI_SPILL_V512_SAVE undef $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19 |
| 18 | +# GREEDY-NEXT: SI_SPILL_V128_SAVE undef $vgpr0_vgpr1_vgpr2_vgpr3 |
| 19 | + |
| 20 | +# GREEDY: dead renamable $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19 = SI_SPILL_V512_RESTORE |
| 21 | +# GREEDY: dead renamable $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = SI_SPILL_V256_RESTORE |
| 22 | +# GREEDY: S_NOP 0, implicit undef renamable $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19, implicit undef renamable $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, implicit undef renamable $vgpr0_vgpr1_vgpr2_vgpr3 |
| 23 | +# GREEDY: S_NOP 0, implicit killed renamable $vgpr20_vgpr21 |
| 24 | + |
| 25 | + |
| 26 | +# BASIC: SI_SPILL_V128_SAVE undef $vgpr0_vgpr1_vgpr2_vgpr3 |
| 27 | +# BASIC: SI_SPILL_V256_SAVE killed $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23 |
| 28 | +# BASIC: SI_SPILL_V512_SAVE undef $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 |
| 29 | +# BASIC: SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.1, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.1, align 4, addrspace 5) |
| 30 | +# BASIC: dead renamable $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = SI_SPILL_V512_RESTORE |
| 31 | +# BASIC: renamable $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23 = SI_SPILL_V256_RESTORE |
| 32 | +# BASIC: dead renamable $vgpr0_vgpr1_vgpr2_vgpr3 = SI_SPILL_V128_RESTORE |
| 33 | +# BASIC: S_NOP 0, implicit undef renamable $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, implicit killed renamable $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23, implicit undef renamable $vgpr0_vgpr1_vgpr2_vgpr3 |
| 34 | +# BASIC: renamable $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE |
| 35 | + |
| 36 | +--- | |
| 37 | + define void @killed_reg_after_regalloc_failure() #0 { |
| 38 | + ret void |
| 39 | + } |
| 40 | + |
| 41 | + attributes #0 = { "amdgpu-waves-per-eu"="10,10" } |
| 42 | + |
| 43 | +... |
| 44 | +--- |
| 45 | +name: killed_reg_after_regalloc_failure |
| 46 | +tracksRegLiveness: true |
| 47 | +machineFunctionInfo: |
| 48 | + scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3' |
| 49 | + frameOffsetReg: '$sgpr33' |
| 50 | + stackPtrOffsetReg: '$sgpr32' |
| 51 | +body: | |
| 52 | + bb.0: |
| 53 | + S_NOP 0, implicit-def %0:vreg_512, implicit-def %1:vreg_256, implicit-def %2:vreg_128 |
| 54 | + S_NOP 0, implicit-def %3:vreg_64 |
| 55 | + S_NOP 0, implicit %0, implicit %1, implicit %2 |
| 56 | + S_NOP 0, implicit %3 |
| 57 | + S_ENDPGM 0 |
| 58 | +
|
| 59 | +... |
0 commit comments