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