1*eefed1dbSMatt Arsenault# RUN: not llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs=0 -start-before=greedy,1 -stop-after=virtregrewriter,1 %s -o /dev/null 2>&1 | FileCheck -check-prefix=ERR %s 2*eefed1dbSMatt Arsenault# RUN: not --crash llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs -start-before=greedy,1 -stop-after=virtregrewriter,1 %s -o /dev/null 2>&1 | FileCheck -check-prefixes=ERR,VERIFIER %s 3*eefed1dbSMatt Arsenault 4*eefed1dbSMatt Arsenault# FIXME: We should not produce a verifier error after erroring 5*eefed1dbSMatt Arsenault 6*eefed1dbSMatt Arsenault# ERR: error: inline assembly requires more registers than available 7*eefed1dbSMatt Arsenault# VERIFIER: *** Bad machine code: Using an undefined physical register *** 8*eefed1dbSMatt Arsenault 9*eefed1dbSMatt Arsenault# This testcase cannot be compiled with the enforced register 10*eefed1dbSMatt Arsenault# budget. Previously, tryLastChanceRecoloring would assert here. It 11*eefed1dbSMatt Arsenault# was attempting to recolor a superregister with an overlapping 12*eefed1dbSMatt Arsenault# subregister over the same range. 13*eefed1dbSMatt Arsenault 14*eefed1dbSMatt Arsenault--- | 15*eefed1dbSMatt Arsenault define void @foo() #0 { 16*eefed1dbSMatt Arsenault ret void 17*eefed1dbSMatt Arsenault } 18*eefed1dbSMatt Arsenault 19*eefed1dbSMatt Arsenault attributes #0 = { "amdgpu-waves-per-eu"="8,8" } 20*eefed1dbSMatt Arsenault 21*eefed1dbSMatt Arsenault... 22*eefed1dbSMatt Arsenault--- 23*eefed1dbSMatt Arsenaultname: foo 24*eefed1dbSMatt ArsenaulttracksRegLiveness: true 25*eefed1dbSMatt Arsenaultregisters: 26*eefed1dbSMatt Arsenault - { id: 0, class: vgpr_32 } 27*eefed1dbSMatt Arsenault - { id: 1, class: vgpr_32 } 28*eefed1dbSMatt Arsenault - { id: 2, class: vreg_512 } 29*eefed1dbSMatt Arsenault - { id: 3, class: vreg_256 } 30*eefed1dbSMatt Arsenault - { id: 4, class: vreg_128 } 31*eefed1dbSMatt Arsenault - { id: 5, class: vreg_96 } 32*eefed1dbSMatt Arsenault - { id: 6, class: vreg_96 } 33*eefed1dbSMatt Arsenault - { id: 7, class: vreg_512 } 34*eefed1dbSMatt Arsenault - { id: 8, class: vreg_256 } 35*eefed1dbSMatt Arsenault - { id: 9, class: vreg_128 } 36*eefed1dbSMatt Arsenault - { id: 10, class: vreg_96 } 37*eefed1dbSMatt Arsenault - { id: 11, class: vreg_96 } 38*eefed1dbSMatt Arsenault - { id: 12, class: sreg_64 } 39*eefed1dbSMatt Arsenault - { id: 13, class: sgpr_64 } 40*eefed1dbSMatt Arsenault - { id: 14, class: vgpr_32 } 41*eefed1dbSMatt ArsenaultmachineFunctionInfo: 42*eefed1dbSMatt Arsenault scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3' 43*eefed1dbSMatt Arsenault frameOffsetReg: '$sgpr33' 44*eefed1dbSMatt Arsenault stackPtrOffsetReg: '$sgpr32' 45*eefed1dbSMatt Arsenaultbody: | 46*eefed1dbSMatt Arsenault bb.0: 47*eefed1dbSMatt Arsenault 48*eefed1dbSMatt Arsenault INLINEASM &"; def $0", 1 /* sideeffect attdialect */, 10 /* regdef */, implicit-def $agpr0 49*eefed1dbSMatt Arsenault %14:vgpr_32 = COPY killed $agpr0 50*eefed1dbSMatt Arsenault INLINEASM &"; def $0 $1 $2 $3 $4", 1 /* sideeffect attdialect */, 11534346 /* regdef:VReg_512 */, def %7, 10158090 /* regdef:VReg_256 */, def %8, 4784138 /* regdef:VReg_128 */, def %9, 3670026 /* regdef:VReg_96 */, def %10, 3670026 /* regdef:VReg_96 */, def %11 51*eefed1dbSMatt Arsenault INLINEASM &"; clobber", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead early-clobber $agpr0_agpr1_agpr2_agpr3_agpr4_agpr5_agpr6_agpr7_agpr8_agpr9_agpr10_agpr11_agpr12_agpr13_agpr14_agpr15_agpr16_agpr17_agpr18_agpr19_agpr20_agpr21_agpr22_agpr23_agpr24_agpr25_agpr26_agpr27_agpr28_agpr29_agpr30_agpr31, 12 /* clobber */, implicit-def dead early-clobber $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 52*eefed1dbSMatt Arsenault INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 11534345 /* reguse:VReg_512 */, %7 53*eefed1dbSMatt Arsenault INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 10158089 /* reguse:VReg_256 */, %8 54*eefed1dbSMatt Arsenault INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 4784137 /* reguse:VReg_128 */, %9 55*eefed1dbSMatt Arsenault INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 3670025 /* reguse:VReg_96 */, %10 56*eefed1dbSMatt Arsenault INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 3670025 /* reguse:VReg_96 */, %11 57*eefed1dbSMatt Arsenault $agpr1 = COPY %14 58*eefed1dbSMatt Arsenault INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 9 /* reguse */, killed $agpr1 59*eefed1dbSMatt Arsenault SI_RETURN 60*eefed1dbSMatt Arsenault 61*eefed1dbSMatt Arsenault... 62