xref: /llvm-project/llvm/test/CodeGen/AMDGPU/inlineasm-mismatched-size-error.ll (revision cc5eba1737146a727a61b5dbe16d8c2ac453981e)
13ba4092cSFabian Ritter; RUN: not llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=null %s 2>&1 | FileCheck -check-prefix=ERR %s
23ba4092cSFabian Ritter
33ba4092cSFabian Ritter; Diagnose register constraints that are not wide enough.
43ba4092cSFabian Ritter
53ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{v[8:15]}'
63ba4092cSFabian Ritterdefine <9 x i32> @inline_asm_9xi32_in_8v_def() {
73ba4092cSFabian Ritter  %asm = call <9 x i32> asm sideeffect "; def $0", "={v[8:15]}"()
83ba4092cSFabian Ritter  ret <9 x i32> %asm
93ba4092cSFabian Ritter}
103ba4092cSFabian Ritter
113ba4092cSFabian Ritter; ERR: error: couldn't allocate input reg for constraint '{v[8:15]}'
123ba4092cSFabian Ritterdefine void @inline_asm_9xi32_in_8v_use(<9 x i32> %val) {
133ba4092cSFabian Ritter  call void asm sideeffect "; use $0", "{v[8:15]}"(<9 x i32> %val)
143ba4092cSFabian Ritter  ret void
153ba4092cSFabian Ritter}
163ba4092cSFabian Ritter
173ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s[8:15]}'
183ba4092cSFabian Ritterdefine <9 x i32> @inline_asm_9xi32_in_8s_def() {
193ba4092cSFabian Ritter  %asm = call <9 x i32> asm sideeffect "; def $0", "={s[8:15]}"()
203ba4092cSFabian Ritter  ret <9 x i32> %asm
213ba4092cSFabian Ritter}
223ba4092cSFabian Ritter
233ba4092cSFabian Ritter
243ba4092cSFabian Ritter; Diagnose register constraints that are too wide.
253ba4092cSFabian Ritter
263ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{v[8:16]}'
273ba4092cSFabian Ritterdefine <8 x i32> @inline_asm_8xi32_in_9v_def() {
283ba4092cSFabian Ritter  %asm = call <8 x i32> asm sideeffect "; def $0", "={v[8:16]}"()
293ba4092cSFabian Ritter  ret <8 x i32> %asm
303ba4092cSFabian Ritter}
313ba4092cSFabian Ritter
323ba4092cSFabian Ritter; ERR: error: couldn't allocate input reg for constraint '{v[8:16]}'
333ba4092cSFabian Ritterdefine void @inline_asm_8xi32_in_9v_use(<8 x i32> %val) {
343ba4092cSFabian Ritter  call void asm sideeffect "; use $0", "{v[8:16]}"(<8 x i32> %val)
353ba4092cSFabian Ritter  ret void
363ba4092cSFabian Ritter}
373ba4092cSFabian Ritter
383ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s[8:16]}'
393ba4092cSFabian Ritterdefine <8 x i32> @inline_asm_8xi32_in_9s_def() {
403ba4092cSFabian Ritter  %asm = call <8 x i32> asm sideeffect "; def $0", "={s[8:16]}"()
413ba4092cSFabian Ritter  ret <8 x i32> %asm
423ba4092cSFabian Ritter}
433ba4092cSFabian Ritter
443ba4092cSFabian Ritter
453ba4092cSFabian Ritter; Diagnose mismatched scalars with register ranges
463ba4092cSFabian Ritter
473ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s[4:5]}'
483ba4092cSFabian Ritterdefine void @inline_asm_scalar_read_too_wide() {
493ba4092cSFabian Ritter  %asm = call i32 asm sideeffect "; def $0 ", "={s[4:5]}"()
503ba4092cSFabian Ritter  ret void
513ba4092cSFabian Ritter}
523ba4092cSFabian Ritter
533ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s[4:4]}'
543ba4092cSFabian Ritterdefine void @inline_asm_scalar_read_too_narrow() {
553ba4092cSFabian Ritter  %asm = call i64 asm sideeffect "; def $0 ", "={s[4:4]}"()
563ba4092cSFabian Ritter  ret void
573ba4092cSFabian Ritter}
583ba4092cSFabian Ritter
593ba4092cSFabian Ritter; Single registers for vector types that are too wide or too narrow should be
603ba4092cSFabian Ritter; diagnosed.
613ba4092cSFabian Ritter
623ba4092cSFabian Ritter; ERR: error: couldn't allocate input reg for constraint '{v8}'
633ba4092cSFabian Ritterdefine void @inline_asm_4xi32_in_v_use(<4 x i32> %val) {
643ba4092cSFabian Ritter  call void asm sideeffect "; use $0", "{v8}"(<4 x i32> %val)
653ba4092cSFabian Ritter  ret void
663ba4092cSFabian Ritter}
673ba4092cSFabian Ritter
683ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{v8}'
693ba4092cSFabian Ritterdefine <4 x i32> @inline_asm_4xi32_in_v_def() {
703ba4092cSFabian Ritter  %asm = call <4 x i32> asm sideeffect "; def $0", "={v8}"()
713ba4092cSFabian Ritter  ret <4 x i32> %asm
723ba4092cSFabian Ritter}
733ba4092cSFabian Ritter
743ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s8}'
753ba4092cSFabian Ritterdefine <4 x i32> @inline_asm_4xi32_in_s_def() {
763ba4092cSFabian Ritter  %asm = call <4 x i32> asm sideeffect "; def $0", "={s8}"()
773ba4092cSFabian Ritter  ret <4 x i32> %asm
783ba4092cSFabian Ritter}
793ba4092cSFabian Ritter
803ba4092cSFabian Ritter; ERR: error: couldn't allocate input reg for constraint '{v8}'
813ba4092cSFabian Ritter; ERR: error: couldn't allocate input reg for constraint 'v'
823ba4092cSFabian Ritterdefine void @inline_asm_2xi8_in_v_use(<2 x i8> %val) {
833ba4092cSFabian Ritter  call void asm sideeffect "; use $0", "{v8}"(<2 x i8> %val)
843ba4092cSFabian Ritter  call void asm sideeffect "; use $0", "v"(<2 x i8> %val)
853ba4092cSFabian Ritter  ret void
863ba4092cSFabian Ritter}
873ba4092cSFabian Ritter
883ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{v8}'
893ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint 'v'
903ba4092cSFabian Ritterdefine <2 x i8> @inline_asm_2xi8_in_v_def() {
913ba4092cSFabian Ritter  %phys = call <2 x i8> asm sideeffect "; def $0", "={v8}"()
923ba4092cSFabian Ritter  %virt = call <2 x i8> asm sideeffect "; def $0", "=v"()
933ba4092cSFabian Ritter  %r = and <2 x i8> %phys, %virt
943ba4092cSFabian Ritter  ret <2 x i8> %r
953ba4092cSFabian Ritter}
963ba4092cSFabian Ritter
973ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s8}'
983ba4092cSFabian Ritter; ERR: error: couldn't allocate output register for constraint 's'
993ba4092cSFabian Ritterdefine <2 x i8> @inline_asm_2xi8_in_s_def() {
1003ba4092cSFabian Ritter  %phys = call <2 x i8> asm sideeffect "; def $0", "={s8}"()
1013ba4092cSFabian Ritter  %virt = call <2 x i8> asm sideeffect "; def $0", "=s"()
1023ba4092cSFabian Ritter  %r = and <2 x i8> %phys, %virt
1033ba4092cSFabian Ritter  ret <2 x i8> %r
1043ba4092cSFabian Ritter}
105*cc5eba17SFabian Ritter
106*cc5eba17SFabian Ritter
107*cc5eba17SFabian Ritter; The register is wide enough, but it does not satisfy alignment constraints:
108*cc5eba17SFabian Ritter
109*cc5eba17SFabian Ritter; ERR: error: couldn't allocate input reg for constraint '{s[1:2]}'
110*cc5eba17SFabian Ritterdefine void @misaligned_sgpr_2xi32_in(<2 x i32> inreg %arg0) {
111*cc5eba17SFabian Ritter  call void asm sideeffect "; use $0", "{s[1:2]}"(<2 x i32> %arg0)
112*cc5eba17SFabian Ritter  ret void
113*cc5eba17SFabian Ritter}
114*cc5eba17SFabian Ritter
115*cc5eba17SFabian Ritter; ERR: error: couldn't allocate input reg for constraint '{s[23:24]}'
116*cc5eba17SFabian Ritterdefine void @misaligned_sgpr_2xi32_in_23(<2 x i32> inreg %arg0) {
117*cc5eba17SFabian Ritter  call void asm sideeffect "; use $0", "{s[23:24]}"(<2 x i32> %arg0)
118*cc5eba17SFabian Ritter  ret void
119*cc5eba17SFabian Ritter}
120*cc5eba17SFabian Ritter
121*cc5eba17SFabian Ritter; ERR: error: couldn't allocate input reg for constraint '{s[1:4]}'
122*cc5eba17SFabian Ritterdefine void @misaligned_sgpr_4xi32_in(<4 x i32> inreg %arg0) {
123*cc5eba17SFabian Ritter  call void asm sideeffect "; use $0", "{s[1:4]}"(<4 x i32> %arg0)
124*cc5eba17SFabian Ritter  ret void
125*cc5eba17SFabian Ritter}
126*cc5eba17SFabian Ritter
127*cc5eba17SFabian Ritter; ERR: error: couldn't allocate input reg for constraint '{s[2:5]}'
128*cc5eba17SFabian Ritterdefine void @misaligned_sgpr_4xi32_in_2(<4 x i32> inreg %arg0) {
129*cc5eba17SFabian Ritter  call void asm sideeffect "; use $0", "{s[2:5]}"(<4 x i32> %arg0)
130*cc5eba17SFabian Ritter  ret void
131*cc5eba17SFabian Ritter}
132*cc5eba17SFabian Ritter
133*cc5eba17SFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s[1:2]}'
134*cc5eba17SFabian Ritterdefine <2 x i32> @misaligned_sgpr_2xi32_out() {
135*cc5eba17SFabian Ritter  %asm = call <2 x i32> asm sideeffect "; def $0", "={s[1:2]}"()
136*cc5eba17SFabian Ritter  ret <2 x i32> %asm
137*cc5eba17SFabian Ritter}
138*cc5eba17SFabian Ritter
139*cc5eba17SFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s[23:24]}'
140*cc5eba17SFabian Ritterdefine <2 x i32> @misaligned_sgpr_2xi32_out_23() {
141*cc5eba17SFabian Ritter  %asm = call <2 x i32> asm sideeffect "; def $0", "={s[23:24]}"()
142*cc5eba17SFabian Ritter  ret <2 x i32> %asm
143*cc5eba17SFabian Ritter}
144*cc5eba17SFabian Ritter
145*cc5eba17SFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s[1:4]}'
146*cc5eba17SFabian Ritterdefine <4 x i32> @misaligned_sgpr_4xi32_out() {
147*cc5eba17SFabian Ritter  %asm = call <4 x i32> asm sideeffect "; def $0", "={s[1:4]}"()
148*cc5eba17SFabian Ritter  ret <4 x i32> %asm
149*cc5eba17SFabian Ritter}
150*cc5eba17SFabian Ritter
151*cc5eba17SFabian Ritter; ERR: error: couldn't allocate output register for constraint '{s[2:5]}'
152*cc5eba17SFabian Ritterdefine <4 x i32> @misaligned_sgpr_4xi32_out_2() {
153*cc5eba17SFabian Ritter  %asm = call <4 x i32> asm sideeffect "; def $0", "={s[2:5]}"()
154*cc5eba17SFabian Ritter  ret <4 x i32> %asm
155*cc5eba17SFabian Ritter}
156