1697c1883SKrzysztof Drewniak; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2697c1883SKrzysztof Drewniak; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefix=SDAG %s 3*5a81a559SDavid Green; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -global-isel=1 -global-isel-abort=2 < %s | FileCheck -check-prefix=GISEL %s 4697c1883SKrzysztof Drewniak 5697c1883SKrzysztof Drewniak; Note: if you're adding tests here, also add them to 6697c1883SKrzysztof Drewniak; lower-buffer-fat-pointers-contents-legalization.ll to verify the IR produced by 7697c1883SKrzysztof Drewniak; the lowering. 8697c1883SKrzysztof Drewniak 9697c1883SKrzysztof Drewniak;;; Legal types. These are natively supported, no casts should be performed. 10697c1883SKrzysztof Drewniak 11697c1883SKrzysztof Drewniakdefine i8 @load_i8(ptr addrspace(8) inreg %buf) { 12697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i8: 13697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 14697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 15697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 16697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 17697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 18697c1883SKrzysztof Drewniak; 19697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i8: 20697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 21697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 22697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 23697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 24697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 25697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 26697c1883SKrzysztof Drewniak %ret = load i8, ptr addrspace(7) %p 27697c1883SKrzysztof Drewniak ret i8 %ret 28697c1883SKrzysztof Drewniak} 29697c1883SKrzysztof Drewniak 30697c1883SKrzysztof Drewniakdefine void @store_i8(i8 %data, ptr addrspace(8) inreg %buf) { 31697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i8: 32697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 33697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 34697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 35697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 36697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 37697c1883SKrzysztof Drewniak; 38697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i8: 39697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 40697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 41697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 42697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 43697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 44697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 45697c1883SKrzysztof Drewniak store i8 %data, ptr addrspace(7) %p 46697c1883SKrzysztof Drewniak ret void 47697c1883SKrzysztof Drewniak} 48697c1883SKrzysztof Drewniak 49697c1883SKrzysztof Drewniakdefine i16 @load_i16(ptr addrspace(8) inreg %buf) { 50697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i16: 51697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 52697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 53697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0 54697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 55697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 56697c1883SKrzysztof Drewniak; 57697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i16: 58697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 59697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 60697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0 61697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 62697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 63697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 64697c1883SKrzysztof Drewniak %ret = load i16, ptr addrspace(7) %p 65697c1883SKrzysztof Drewniak ret i16 %ret 66697c1883SKrzysztof Drewniak} 67697c1883SKrzysztof Drewniak 68697c1883SKrzysztof Drewniakdefine void @store_i16(i16 %data, ptr addrspace(8) inreg %buf) { 69697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i16: 70697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 71697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 72697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 73697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 74697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 75697c1883SKrzysztof Drewniak; 76697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i16: 77697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 78697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 79697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 80697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 81697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 82697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 83697c1883SKrzysztof Drewniak store i16 %data, ptr addrspace(7) %p 84697c1883SKrzysztof Drewniak ret void 85697c1883SKrzysztof Drewniak} 86697c1883SKrzysztof Drewniak 87697c1883SKrzysztof Drewniakdefine i32 @load_i32(ptr addrspace(8) inreg %buf) { 88697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i32: 89697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 90697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 91697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 92697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 93697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 94697c1883SKrzysztof Drewniak; 95697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i32: 96697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 97697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 98697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 99697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 100697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 101697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 102697c1883SKrzysztof Drewniak %ret = load i32, ptr addrspace(7) %p 103697c1883SKrzysztof Drewniak ret i32 %ret 104697c1883SKrzysztof Drewniak} 105697c1883SKrzysztof Drewniak 106697c1883SKrzysztof Drewniakdefine void @store_i32(i32 %data, ptr addrspace(8) inreg %buf) { 107697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i32: 108697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 109697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 110697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 111697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 112697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 113697c1883SKrzysztof Drewniak; 114697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i32: 115697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 116697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 117697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 118697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 119697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 120697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 121697c1883SKrzysztof Drewniak store i32 %data, ptr addrspace(7) %p 122697c1883SKrzysztof Drewniak ret void 123697c1883SKrzysztof Drewniak} 124697c1883SKrzysztof Drewniak 125697c1883SKrzysztof Drewniakdefine i64 @load_i64(ptr addrspace(8) inreg %buf) { 126697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i64: 127697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 128697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 129697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 130697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 131697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 132697c1883SKrzysztof Drewniak; 133697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i64: 134697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 135697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 136697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 137697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 138697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 139697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 140697c1883SKrzysztof Drewniak %ret = load i64, ptr addrspace(7) %p 141697c1883SKrzysztof Drewniak ret i64 %ret 142697c1883SKrzysztof Drewniak} 143697c1883SKrzysztof Drewniak 144697c1883SKrzysztof Drewniakdefine void @store_i64(i64 %data, ptr addrspace(8) inreg %buf) { 145697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i64: 146697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 147697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 148697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 149697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 150697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 151697c1883SKrzysztof Drewniak; 152697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i64: 153697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 154697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 155697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 156697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 157697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 158697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 159697c1883SKrzysztof Drewniak store i64 %data, ptr addrspace(7) %p 160697c1883SKrzysztof Drewniak ret void 161697c1883SKrzysztof Drewniak} 162697c1883SKrzysztof Drewniak 163697c1883SKrzysztof Drewniakdefine i128 @load_i128(ptr addrspace(8) inreg %buf) { 164697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i128: 165697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 166697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 167697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 168697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 169697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 170697c1883SKrzysztof Drewniak; 171697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i128: 172697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 173697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 174697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 175697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 176697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 177697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 178697c1883SKrzysztof Drewniak %ret = load i128, ptr addrspace(7) %p 179697c1883SKrzysztof Drewniak ret i128 %ret 180697c1883SKrzysztof Drewniak} 181697c1883SKrzysztof Drewniak 182697c1883SKrzysztof Drewniakdefine void @store_i128(i128 %data, ptr addrspace(8) inreg %buf) { 183697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i128: 184697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 185697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 186697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 187697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 188697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 189697c1883SKrzysztof Drewniak; 190697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i128: 191697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 192697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 193697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 194697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 195697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 196697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 197697c1883SKrzysztof Drewniak store i128 %data, ptr addrspace(7) %p 198697c1883SKrzysztof Drewniak ret void 199697c1883SKrzysztof Drewniak} 200697c1883SKrzysztof Drewniak 201697c1883SKrzysztof Drewniakdefine <1 x i32> @load_v1i32(ptr addrspace(8) inreg %buf) { 202697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v1i32: 203697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 204697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 205697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 206697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 207697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 208697c1883SKrzysztof Drewniak; 209697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v1i32: 210697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 211697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 212697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 213697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 214697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 215697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 216697c1883SKrzysztof Drewniak %ret = load <1 x i32>, ptr addrspace(7) %p 217697c1883SKrzysztof Drewniak ret <1 x i32> %ret 218697c1883SKrzysztof Drewniak} 219697c1883SKrzysztof Drewniak 220697c1883SKrzysztof Drewniakdefine void @store_v1i32(<1 x i32> %data, ptr addrspace(8) inreg %buf) { 221697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v1i32: 222697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 223697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 224697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 225697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 226697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 227697c1883SKrzysztof Drewniak; 228697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v1i32: 229697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 230697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 231697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 232697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 233697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 234697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 235697c1883SKrzysztof Drewniak store <1 x i32> %data, ptr addrspace(7) %p 236697c1883SKrzysztof Drewniak ret void 237697c1883SKrzysztof Drewniak} 238697c1883SKrzysztof Drewniak 239697c1883SKrzysztof Drewniakdefine <2 x i32> @load_v2i32(ptr addrspace(8) inreg %buf) { 240697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i32: 241697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 242697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 243697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 244697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 245697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 246697c1883SKrzysztof Drewniak; 247697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i32: 248697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 249697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 250697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 251697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 252697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 253697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 254697c1883SKrzysztof Drewniak %ret = load <2 x i32>, ptr addrspace(7) %p 255697c1883SKrzysztof Drewniak ret <2 x i32> %ret 256697c1883SKrzysztof Drewniak} 257697c1883SKrzysztof Drewniak 258697c1883SKrzysztof Drewniakdefine void @store_v2i32(<2 x i32> %data, ptr addrspace(8) inreg %buf) { 259697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i32: 260697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 261697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 262697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 263697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 264697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 265697c1883SKrzysztof Drewniak; 266697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i32: 267697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 268697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 269697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 270697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 271697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 272697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 273697c1883SKrzysztof Drewniak store <2 x i32> %data, ptr addrspace(7) %p 274697c1883SKrzysztof Drewniak ret void 275697c1883SKrzysztof Drewniak} 276697c1883SKrzysztof Drewniak 277697c1883SKrzysztof Drewniakdefine <3 x i32> @load_v3i32(ptr addrspace(8) inreg %buf) { 278697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3i32: 279697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 280697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 281697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 282697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 283697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 284697c1883SKrzysztof Drewniak; 285697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3i32: 286697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 287697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 288697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 289697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 290697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 291697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 292697c1883SKrzysztof Drewniak %ret = load <3 x i32>, ptr addrspace(7) %p 293697c1883SKrzysztof Drewniak ret <3 x i32> %ret 294697c1883SKrzysztof Drewniak} 295697c1883SKrzysztof Drewniak 296697c1883SKrzysztof Drewniakdefine void @store_v3i32(<3 x i32> %data, ptr addrspace(8) inreg %buf) { 297697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3i32: 298697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 299697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 300697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 301697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 302697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 303697c1883SKrzysztof Drewniak; 304697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3i32: 305697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 306697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 307697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 308697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 309697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 310697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 311697c1883SKrzysztof Drewniak store <3 x i32> %data, ptr addrspace(7) %p 312697c1883SKrzysztof Drewniak ret void 313697c1883SKrzysztof Drewniak} 314697c1883SKrzysztof Drewniak 315697c1883SKrzysztof Drewniakdefine <4 x i32> @load_v4i32(ptr addrspace(8) inreg %buf) { 316697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4i32: 317697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 318697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 319697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 320697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 321697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 322697c1883SKrzysztof Drewniak; 323697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4i32: 324697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 325697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 326697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 327697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 328697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 329697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 330697c1883SKrzysztof Drewniak %ret = load <4 x i32>, ptr addrspace(7) %p 331697c1883SKrzysztof Drewniak ret <4 x i32> %ret 332697c1883SKrzysztof Drewniak} 333697c1883SKrzysztof Drewniak 334697c1883SKrzysztof Drewniakdefine void @store_v4i32(<4 x i32> %data, ptr addrspace(8) inreg %buf) { 335697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4i32: 336697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 337697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 338697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 339697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 340697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 341697c1883SKrzysztof Drewniak; 342697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4i32: 343697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 344697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 345697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 346697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 347697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 348697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 349697c1883SKrzysztof Drewniak store <4 x i32> %data, ptr addrspace(7) %p 350697c1883SKrzysztof Drewniak ret void 351697c1883SKrzysztof Drewniak} 352697c1883SKrzysztof Drewniak 353697c1883SKrzysztof Drewniakdefine <2 x i16> @load_v2i16(ptr addrspace(8) inreg %buf) { 354697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i16: 355697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 356697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 357697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 358697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 359697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 360697c1883SKrzysztof Drewniak; 361697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i16: 362697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 363697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 364697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 365697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 366697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 367697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 368697c1883SKrzysztof Drewniak %ret = load <2 x i16>, ptr addrspace(7) %p 369697c1883SKrzysztof Drewniak ret <2 x i16> %ret 370697c1883SKrzysztof Drewniak} 371697c1883SKrzysztof Drewniak 372697c1883SKrzysztof Drewniakdefine void @store_v2i16(<2 x i16> %data, ptr addrspace(8) inreg %buf) { 373697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i16: 374697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 375697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 376697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 377697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 378697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 379697c1883SKrzysztof Drewniak; 380697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i16: 381697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 382697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 383697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 384697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 385697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 386697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 387697c1883SKrzysztof Drewniak store <2 x i16> %data, ptr addrspace(7) %p 388697c1883SKrzysztof Drewniak ret void 389697c1883SKrzysztof Drewniak} 390697c1883SKrzysztof Drewniak 391697c1883SKrzysztof Drewniakdefine <4 x i16> @load_v4i16(ptr addrspace(8) inreg %buf) { 392697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4i16: 393697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 394697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 395697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 396697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 397697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 398697c1883SKrzysztof Drewniak; 399697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4i16: 400697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 401697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 402697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 403697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 404697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 405697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 406697c1883SKrzysztof Drewniak %ret = load <4 x i16>, ptr addrspace(7) %p 407697c1883SKrzysztof Drewniak ret <4 x i16> %ret 408697c1883SKrzysztof Drewniak} 409697c1883SKrzysztof Drewniak 410697c1883SKrzysztof Drewniakdefine void @store_v4i16(<4 x i16> %data, ptr addrspace(8) inreg %buf) { 411697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4i16: 412697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 413697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 414697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 415697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 416697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 417697c1883SKrzysztof Drewniak; 418697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4i16: 419697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 420697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 421697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 422697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 423697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 424697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 425697c1883SKrzysztof Drewniak store <4 x i16> %data, ptr addrspace(7) %p 426697c1883SKrzysztof Drewniak ret void 427697c1883SKrzysztof Drewniak} 428697c1883SKrzysztof Drewniak 429697c1883SKrzysztof Drewniakdefine <8 x i16> @load_v8i16(ptr addrspace(8) inreg %buf) { 430697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8i16: 431697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 432697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 433697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 434697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 435697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 436697c1883SKrzysztof Drewniak; 437697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8i16: 438697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 439697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 440697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 441697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 442697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 443697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 444697c1883SKrzysztof Drewniak %ret = load <8 x i16>, ptr addrspace(7) %p 445697c1883SKrzysztof Drewniak ret <8 x i16> %ret 446697c1883SKrzysztof Drewniak} 447697c1883SKrzysztof Drewniak 448697c1883SKrzysztof Drewniakdefine void @store_v8i16(<8 x i16> %data, ptr addrspace(8) inreg %buf) { 449697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8i16: 450697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 451697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 452697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 453697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 454697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 455697c1883SKrzysztof Drewniak; 456697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8i16: 457697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 458697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 459697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 460697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 461697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 462697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 463697c1883SKrzysztof Drewniak store <8 x i16> %data, ptr addrspace(7) %p 464697c1883SKrzysztof Drewniak ret void 465697c1883SKrzysztof Drewniak} 466697c1883SKrzysztof Drewniak 467697c1883SKrzysztof Drewniakdefine <2 x i64> @load_v2i64(ptr addrspace(8) inreg %buf) { 468697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i64: 469697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 470697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 471697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 472697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 473697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 474697c1883SKrzysztof Drewniak; 475697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i64: 476697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 477697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 478697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 479697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 480697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 481697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 482697c1883SKrzysztof Drewniak %ret = load <2 x i64>, ptr addrspace(7) %p 483697c1883SKrzysztof Drewniak ret <2 x i64> %ret 484697c1883SKrzysztof Drewniak} 485697c1883SKrzysztof Drewniak 486697c1883SKrzysztof Drewniakdefine void @store_v2i64(<2 x i64> %data, ptr addrspace(8) inreg %buf) { 487697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i64: 488697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 489697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 490697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 491697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 492697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 493697c1883SKrzysztof Drewniak; 494697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i64: 495697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 496697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 497697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 498697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 499697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 500697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 501697c1883SKrzysztof Drewniak store <2 x i64> %data, ptr addrspace(7) %p 502697c1883SKrzysztof Drewniak ret void 503697c1883SKrzysztof Drewniak} 504697c1883SKrzysztof Drewniak 505697c1883SKrzysztof Drewniakdefine half @load_f16(ptr addrspace(8) inreg %buf) { 506697c1883SKrzysztof Drewniak; SDAG-LABEL: load_f16: 507697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 508697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 509697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0 510697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 511697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 512697c1883SKrzysztof Drewniak; 513697c1883SKrzysztof Drewniak; GISEL-LABEL: load_f16: 514697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 515697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 516697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0 517697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 518697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 519697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 520697c1883SKrzysztof Drewniak %ret = load half, ptr addrspace(7) %p 521697c1883SKrzysztof Drewniak ret half %ret 522697c1883SKrzysztof Drewniak} 523697c1883SKrzysztof Drewniak 524697c1883SKrzysztof Drewniakdefine void @store_f16(half %data, ptr addrspace(8) inreg %buf) { 525697c1883SKrzysztof Drewniak; SDAG-LABEL: store_f16: 526697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 527697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 528697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 529697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 530697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 531697c1883SKrzysztof Drewniak; 532697c1883SKrzysztof Drewniak; GISEL-LABEL: store_f16: 533697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 534697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 535697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 536697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 537697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 538697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 539697c1883SKrzysztof Drewniak store half %data, ptr addrspace(7) %p 540697c1883SKrzysztof Drewniak ret void 541697c1883SKrzysztof Drewniak} 542697c1883SKrzysztof Drewniak 543697c1883SKrzysztof Drewniakdefine bfloat @load_bf16(ptr addrspace(8) inreg %buf) { 544697c1883SKrzysztof Drewniak; SDAG-LABEL: load_bf16: 545697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 546697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 547697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0 548697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 549697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 550697c1883SKrzysztof Drewniak; 551697c1883SKrzysztof Drewniak; GISEL-LABEL: load_bf16: 552697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 553697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 554697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0 555697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 556697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 557697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 558697c1883SKrzysztof Drewniak %ret = load bfloat, ptr addrspace(7) %p 559697c1883SKrzysztof Drewniak ret bfloat %ret 560697c1883SKrzysztof Drewniak} 561697c1883SKrzysztof Drewniak 562697c1883SKrzysztof Drewniakdefine void @store_bf16(bfloat %data, ptr addrspace(8) inreg %buf) { 563697c1883SKrzysztof Drewniak; SDAG-LABEL: store_bf16: 564697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 565697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 566697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 567697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 568697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 569697c1883SKrzysztof Drewniak; 570697c1883SKrzysztof Drewniak; GISEL-LABEL: store_bf16: 571697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 572697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 573697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 574697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 575697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 576697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 577697c1883SKrzysztof Drewniak store bfloat %data, ptr addrspace(7) %p 578697c1883SKrzysztof Drewniak ret void 579697c1883SKrzysztof Drewniak} 580697c1883SKrzysztof Drewniak 581697c1883SKrzysztof Drewniakdefine <2 x half> @load_v2f16(ptr addrspace(8) inreg %buf) { 582697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2f16: 583697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 584697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 585697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 586697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 587697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 588697c1883SKrzysztof Drewniak; 589697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2f16: 590697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 591697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 592697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 593697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 594697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 595697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 596697c1883SKrzysztof Drewniak %ret = load <2 x half>, ptr addrspace(7) %p 597697c1883SKrzysztof Drewniak ret <2 x half> %ret 598697c1883SKrzysztof Drewniak} 599697c1883SKrzysztof Drewniak 600697c1883SKrzysztof Drewniakdefine void @store_v2f16(<2 x half> %data, ptr addrspace(8) inreg %buf) { 601697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2f16: 602697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 603697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 604697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 605697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 606697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 607697c1883SKrzysztof Drewniak; 608697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2f16: 609697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 610697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 611697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 612697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 613697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 614697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 615697c1883SKrzysztof Drewniak store <2 x half> %data, ptr addrspace(7) %p 616697c1883SKrzysztof Drewniak ret void 617697c1883SKrzysztof Drewniak} 618697c1883SKrzysztof Drewniak 619697c1883SKrzysztof Drewniakdefine <4 x bfloat> @load_v4bf16(ptr addrspace(8) inreg %buf) { 620697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4bf16: 621697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 622697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 623697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 624697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 625697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 626697c1883SKrzysztof Drewniak; 627697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4bf16: 628697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 629697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 630697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 631697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 632697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 633697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 634697c1883SKrzysztof Drewniak %ret = load <4 x bfloat>, ptr addrspace(7) %p 635697c1883SKrzysztof Drewniak ret <4 x bfloat> %ret 636697c1883SKrzysztof Drewniak} 637697c1883SKrzysztof Drewniak 638697c1883SKrzysztof Drewniakdefine void @store_v4bf16(<4 x bfloat> %data, ptr addrspace(8) inreg %buf) { 639697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4bf16: 640697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 641697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 642697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 643697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 644697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 645697c1883SKrzysztof Drewniak; 646697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4bf16: 647697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 648697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 649697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 650697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 651697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 652697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 653697c1883SKrzysztof Drewniak store <4 x bfloat> %data, ptr addrspace(7) %p 654697c1883SKrzysztof Drewniak ret void 655697c1883SKrzysztof Drewniak} 656697c1883SKrzysztof Drewniak 657697c1883SKrzysztof Drewniakdefine <8 x half> @load_v8f16(ptr addrspace(8) inreg %buf) { 658697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8f16: 659697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 660697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 661697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 662697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 663697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 664697c1883SKrzysztof Drewniak; 665697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8f16: 666697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 667697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 668697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 669697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 670697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 671697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 672697c1883SKrzysztof Drewniak %ret = load <8 x half>, ptr addrspace(7) %p 673697c1883SKrzysztof Drewniak ret <8 x half> %ret 674697c1883SKrzysztof Drewniak} 675697c1883SKrzysztof Drewniak 676697c1883SKrzysztof Drewniakdefine void @store_v8f16(<8 x half> %data, ptr addrspace(8) inreg %buf) { 677697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8f16: 678697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 679697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 680697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 681697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 682697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 683697c1883SKrzysztof Drewniak; 684697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8f16: 685697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 686697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 687697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 688697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 689697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 690697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 691697c1883SKrzysztof Drewniak store <8 x half> %data, ptr addrspace(7) %p 692697c1883SKrzysztof Drewniak ret void 693697c1883SKrzysztof Drewniak} 694697c1883SKrzysztof Drewniak 695697c1883SKrzysztof Drewniakdefine float @load_f32(ptr addrspace(8) inreg %buf) { 696697c1883SKrzysztof Drewniak; SDAG-LABEL: load_f32: 697697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 698697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 699697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 700697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 701697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 702697c1883SKrzysztof Drewniak; 703697c1883SKrzysztof Drewniak; GISEL-LABEL: load_f32: 704697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 705697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 706697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 707697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 708697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 709697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 710697c1883SKrzysztof Drewniak %ret = load float, ptr addrspace(7) %p 711697c1883SKrzysztof Drewniak ret float %ret 712697c1883SKrzysztof Drewniak} 713697c1883SKrzysztof Drewniak 714697c1883SKrzysztof Drewniakdefine void @store_f32(float %data, ptr addrspace(8) inreg %buf) { 715697c1883SKrzysztof Drewniak; SDAG-LABEL: store_f32: 716697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 717697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 718697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 719697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 720697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 721697c1883SKrzysztof Drewniak; 722697c1883SKrzysztof Drewniak; GISEL-LABEL: store_f32: 723697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 724697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 725697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 726697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 727697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 728697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 729697c1883SKrzysztof Drewniak store float %data, ptr addrspace(7) %p 730697c1883SKrzysztof Drewniak ret void 731697c1883SKrzysztof Drewniak} 732697c1883SKrzysztof Drewniak 733697c1883SKrzysztof Drewniakdefine <2 x float> @load_v2f32(ptr addrspace(8) inreg %buf) { 734697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2f32: 735697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 736697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 737697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 738697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 739697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 740697c1883SKrzysztof Drewniak; 741697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2f32: 742697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 743697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 744697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 745697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 746697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 747697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 748697c1883SKrzysztof Drewniak %ret = load <2 x float>, ptr addrspace(7) %p 749697c1883SKrzysztof Drewniak ret <2 x float> %ret 750697c1883SKrzysztof Drewniak} 751697c1883SKrzysztof Drewniak 752697c1883SKrzysztof Drewniakdefine void @store_v2f32(<2 x float> %data, ptr addrspace(8) inreg %buf) { 753697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2f32: 754697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 755697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 756697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 757697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 758697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 759697c1883SKrzysztof Drewniak; 760697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2f32: 761697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 762697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 763697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 764697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 765697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 766697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 767697c1883SKrzysztof Drewniak store <2 x float> %data, ptr addrspace(7) %p 768697c1883SKrzysztof Drewniak ret void 769697c1883SKrzysztof Drewniak} 770697c1883SKrzysztof Drewniak 771697c1883SKrzysztof Drewniakdefine <3 x float> @load_v3f32(ptr addrspace(8) inreg %buf) { 772697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3f32: 773697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 774697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 775697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 776697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 777697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 778697c1883SKrzysztof Drewniak; 779697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3f32: 780697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 781697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 782697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 783697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 784697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 785697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 786697c1883SKrzysztof Drewniak %ret = load <3 x float>, ptr addrspace(7) %p 787697c1883SKrzysztof Drewniak ret <3 x float> %ret 788697c1883SKrzysztof Drewniak} 789697c1883SKrzysztof Drewniak 790697c1883SKrzysztof Drewniakdefine void @store_v3f32(<3 x float> %data, ptr addrspace(8) inreg %buf) { 791697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3f32: 792697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 793697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 794697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 795697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 796697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 797697c1883SKrzysztof Drewniak; 798697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3f32: 799697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 800697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 801697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 802697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 803697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 804697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 805697c1883SKrzysztof Drewniak store <3 x float> %data, ptr addrspace(7) %p 806697c1883SKrzysztof Drewniak ret void 807697c1883SKrzysztof Drewniak} 808697c1883SKrzysztof Drewniak 809697c1883SKrzysztof Drewniakdefine <4 x float> @load_v4f32(ptr addrspace(8) inreg %buf) { 810697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4f32: 811697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 812697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 813697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 814697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 815697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 816697c1883SKrzysztof Drewniak; 817697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4f32: 818697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 819697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 820697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 821697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 822697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 823697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 824697c1883SKrzysztof Drewniak %ret = load <4 x float>, ptr addrspace(7) %p 825697c1883SKrzysztof Drewniak ret <4 x float> %ret 826697c1883SKrzysztof Drewniak} 827697c1883SKrzysztof Drewniak 828697c1883SKrzysztof Drewniakdefine void @store_v4f32(<4 x float> %data, ptr addrspace(8) inreg %buf) { 829697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4f32: 830697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 831697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 832697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 833697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 834697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 835697c1883SKrzysztof Drewniak; 836697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4f32: 837697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 838697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 839697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 840697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 841697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 842697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 843697c1883SKrzysztof Drewniak store <4 x float> %data, ptr addrspace(7) %p 844697c1883SKrzysztof Drewniak ret void 845697c1883SKrzysztof Drewniak} 846697c1883SKrzysztof Drewniak 847697c1883SKrzysztof Drewniakdefine ptr addrspace(0) @load_p0(ptr addrspace(8) inreg %buf) { 848697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p0: 849697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 850697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 851697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 852697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 853697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 854697c1883SKrzysztof Drewniak; 855697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p0: 856697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 857697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 858697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 859697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 860697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 861697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 862697c1883SKrzysztof Drewniak %ret = load ptr addrspace(0), ptr addrspace(7) %p 863697c1883SKrzysztof Drewniak ret ptr addrspace(0) %ret 864697c1883SKrzysztof Drewniak} 865697c1883SKrzysztof Drewniak 866697c1883SKrzysztof Drewniakdefine void @store_p0(ptr addrspace(0) %data, ptr addrspace(8) inreg %buf) { 867697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p0: 868697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 869697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 870697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 871697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 872697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 873697c1883SKrzysztof Drewniak; 874697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p0: 875697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 876697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 877697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 878697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 879697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 880697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 881697c1883SKrzysztof Drewniak store ptr addrspace(0) %data, ptr addrspace(7) %p 882697c1883SKrzysztof Drewniak ret void 883697c1883SKrzysztof Drewniak} 884697c1883SKrzysztof Drewniak 885697c1883SKrzysztof Drewniakdefine ptr addrspace(1) @load_p1(ptr addrspace(8) inreg %buf) { 886697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p1: 887697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 888697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 889697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 890697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 891697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 892697c1883SKrzysztof Drewniak; 893697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p1: 894697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 895697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 896697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 897697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 898697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 899697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 900697c1883SKrzysztof Drewniak %ret = load ptr addrspace(1), ptr addrspace(7) %p 901697c1883SKrzysztof Drewniak ret ptr addrspace(1) %ret 902697c1883SKrzysztof Drewniak} 903697c1883SKrzysztof Drewniak 904697c1883SKrzysztof Drewniakdefine void @store_p1(ptr addrspace(1) %data, ptr addrspace(8) inreg %buf) { 905697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p1: 906697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 907697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 908697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 909697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 910697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 911697c1883SKrzysztof Drewniak; 912697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p1: 913697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 914697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 915697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 916697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 917697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 918697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 919697c1883SKrzysztof Drewniak store ptr addrspace(1) %data, ptr addrspace(7) %p 920697c1883SKrzysztof Drewniak ret void 921697c1883SKrzysztof Drewniak} 922697c1883SKrzysztof Drewniak 923697c1883SKrzysztof Drewniakdefine ptr addrspace(2) @load_p2(ptr addrspace(8) inreg %buf) { 924697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p2: 925697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 926697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 927697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 928697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 929697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 930697c1883SKrzysztof Drewniak; 931697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p2: 932697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 933697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 934697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 935697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 936697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 937697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 938697c1883SKrzysztof Drewniak %ret = load ptr addrspace(2), ptr addrspace(7) %p 939697c1883SKrzysztof Drewniak ret ptr addrspace(2) %ret 940697c1883SKrzysztof Drewniak} 941697c1883SKrzysztof Drewniak 942697c1883SKrzysztof Drewniakdefine void @store_p2(ptr addrspace(2) %data, ptr addrspace(8) inreg %buf) { 943697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p2: 944697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 945697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 946697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 947697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 948697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 949697c1883SKrzysztof Drewniak; 950697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p2: 951697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 952697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 953697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 954697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 955697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 956697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 957697c1883SKrzysztof Drewniak store ptr addrspace(2) %data, ptr addrspace(7) %p 958697c1883SKrzysztof Drewniak ret void 959697c1883SKrzysztof Drewniak} 960697c1883SKrzysztof Drewniak 961697c1883SKrzysztof Drewniakdefine ptr addrspace(3) @load_p3(ptr addrspace(8) inreg %buf) { 962697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p3: 963697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 964697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 965697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 966697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 967697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 968697c1883SKrzysztof Drewniak; 969697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p3: 970697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 971697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 972697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 973697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 974697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 975697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 976697c1883SKrzysztof Drewniak %ret = load ptr addrspace(3), ptr addrspace(7) %p 977697c1883SKrzysztof Drewniak ret ptr addrspace(3) %ret 978697c1883SKrzysztof Drewniak} 979697c1883SKrzysztof Drewniak 980697c1883SKrzysztof Drewniakdefine void @store_p3(ptr addrspace(3) %data, ptr addrspace(8) inreg %buf) { 981697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p3: 982697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 983697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 984697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 985697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 986697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 987697c1883SKrzysztof Drewniak; 988697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p3: 989697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 990697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 991697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 992697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 993697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 994697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 995697c1883SKrzysztof Drewniak store ptr addrspace(3) %data, ptr addrspace(7) %p 996697c1883SKrzysztof Drewniak ret void 997697c1883SKrzysztof Drewniak} 998697c1883SKrzysztof Drewniak 999697c1883SKrzysztof Drewniakdefine ptr addrspace(4) @load_p4(ptr addrspace(8) inreg %buf) { 1000697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p4: 1001697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1002697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1003697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 1004697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1005697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1006697c1883SKrzysztof Drewniak; 1007697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p4: 1008697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1009697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1010697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 1011697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1012697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1013697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1014697c1883SKrzysztof Drewniak %ret = load ptr addrspace(4), ptr addrspace(7) %p 1015697c1883SKrzysztof Drewniak ret ptr addrspace(4) %ret 1016697c1883SKrzysztof Drewniak} 1017697c1883SKrzysztof Drewniak 1018697c1883SKrzysztof Drewniakdefine void @store_p4(ptr addrspace(4) %data, ptr addrspace(8) inreg %buf) { 1019697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p4: 1020697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1021697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1022697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 1023697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1024697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1025697c1883SKrzysztof Drewniak; 1026697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p4: 1027697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1028697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1029697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 1030697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1031697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1032697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1033697c1883SKrzysztof Drewniak store ptr addrspace(4) %data, ptr addrspace(7) %p 1034697c1883SKrzysztof Drewniak ret void 1035697c1883SKrzysztof Drewniak} 1036697c1883SKrzysztof Drewniak 1037697c1883SKrzysztof Drewniakdefine ptr addrspace(5) @load_p5(ptr addrspace(8) inreg %buf) { 1038697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p5: 1039697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1040697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1041697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 1042697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1043697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1044697c1883SKrzysztof Drewniak; 1045697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p5: 1046697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1047697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1048697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 1049697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1050697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1051697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1052697c1883SKrzysztof Drewniak %ret = load ptr addrspace(5), ptr addrspace(7) %p 1053697c1883SKrzysztof Drewniak ret ptr addrspace(5) %ret 1054697c1883SKrzysztof Drewniak} 1055697c1883SKrzysztof Drewniak 1056697c1883SKrzysztof Drewniakdefine void @store_p5(ptr addrspace(5) %data, ptr addrspace(8) inreg %buf) { 1057697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p5: 1058697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1059697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1060697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 1061697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1062697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1063697c1883SKrzysztof Drewniak; 1064697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p5: 1065697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1066697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1067697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 1068697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1069697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1070697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1071697c1883SKrzysztof Drewniak store ptr addrspace(5) %data, ptr addrspace(7) %p 1072697c1883SKrzysztof Drewniak ret void 1073697c1883SKrzysztof Drewniak} 1074697c1883SKrzysztof Drewniak 1075697c1883SKrzysztof Drewniakdefine ptr addrspace(6) @load_p6(ptr addrspace(8) inreg %buf) { 1076697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p6: 1077697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1078697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1079697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 1080697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1081697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1082697c1883SKrzysztof Drewniak; 1083697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p6: 1084697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1085697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1086697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 1087697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1088697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1089697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1090697c1883SKrzysztof Drewniak %ret = load ptr addrspace(6), ptr addrspace(7) %p 1091697c1883SKrzysztof Drewniak ret ptr addrspace(6) %ret 1092697c1883SKrzysztof Drewniak} 1093697c1883SKrzysztof Drewniak 1094697c1883SKrzysztof Drewniakdefine void @store_p6(ptr addrspace(6) %data, ptr addrspace(8) inreg %buf) { 1095697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p6: 1096697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1097697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1098697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 1099697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1100697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1101697c1883SKrzysztof Drewniak; 1102697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p6: 1103697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1104697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1105697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 1106697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1107697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1108697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1109697c1883SKrzysztof Drewniak store ptr addrspace(6) %data, ptr addrspace(7) %p 1110697c1883SKrzysztof Drewniak ret void 1111697c1883SKrzysztof Drewniak} 1112697c1883SKrzysztof Drewniak 1113697c1883SKrzysztof Drewniakdefine ptr addrspace(8) @load_p8(ptr addrspace(8) inreg %buf) { 1114697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p8: 1115697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1116697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1117697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1118697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1119697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1120697c1883SKrzysztof Drewniak; 1121697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p8: 1122697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1123697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1124697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1125697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1126697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1127697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1128697c1883SKrzysztof Drewniak %ret = load ptr addrspace(8), ptr addrspace(7) %p 1129697c1883SKrzysztof Drewniak ret ptr addrspace(8) %ret 1130697c1883SKrzysztof Drewniak} 1131697c1883SKrzysztof Drewniak 1132697c1883SKrzysztof Drewniakdefine void @store_p8(ptr addrspace(8) %data, ptr addrspace(8) inreg %buf) { 1133697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p8: 1134697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1135697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1136697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1137697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1138697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1139697c1883SKrzysztof Drewniak; 1140697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p8: 1141697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1142697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1143697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1144697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1145697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1146697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1147697c1883SKrzysztof Drewniak store ptr addrspace(8) %data, ptr addrspace(7) %p 1148697c1883SKrzysztof Drewniak ret void 1149697c1883SKrzysztof Drewniak} 1150697c1883SKrzysztof Drewniak 1151697c1883SKrzysztof Drewniakdefine <2 x ptr addrspace(1)> @load_v2p1(ptr addrspace(8) inreg %buf) { 1152697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2p1: 1153697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1154697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1155697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1156697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1157697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1158697c1883SKrzysztof Drewniak; 1159697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2p1: 1160697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1161697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1162697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1163697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1164697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1165697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1166697c1883SKrzysztof Drewniak %ret = load <2 x ptr addrspace(1)>, ptr addrspace(7) %p 1167697c1883SKrzysztof Drewniak ret <2 x ptr addrspace(1)> %ret 1168697c1883SKrzysztof Drewniak} 1169697c1883SKrzysztof Drewniak 1170697c1883SKrzysztof Drewniakdefine void @store_v2p1(<2 x ptr addrspace(1)> %data, ptr addrspace(8) inreg %buf) { 1171697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2p1: 1172697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1173697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1174697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1175697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1176697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1177697c1883SKrzysztof Drewniak; 1178697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2p1: 1179697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1180697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1181697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1182697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1183697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1184697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1185697c1883SKrzysztof Drewniak store <2 x ptr addrspace(1)> %data, ptr addrspace(7) %p 1186697c1883SKrzysztof Drewniak ret void 1187697c1883SKrzysztof Drewniak} 1188697c1883SKrzysztof Drewniak 1189697c1883SKrzysztof Drewniakdefine <2 x ptr addrspace(5)> @load_v2p5(ptr addrspace(8) inreg %buf) { 1190697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2p5: 1191697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1192697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1193697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 1194697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1195697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1196697c1883SKrzysztof Drewniak; 1197697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2p5: 1198697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1199697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1200697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 1201697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1202697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1203697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1204697c1883SKrzysztof Drewniak %ret = load <2 x ptr addrspace(5)>, ptr addrspace(7) %p 1205697c1883SKrzysztof Drewniak ret <2 x ptr addrspace(5)> %ret 1206697c1883SKrzysztof Drewniak} 1207697c1883SKrzysztof Drewniak 1208697c1883SKrzysztof Drewniakdefine void @store_v2p5(<2 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) { 1209697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2p5: 1210697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1211697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1212697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 1213697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1214697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1215697c1883SKrzysztof Drewniak; 1216697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2p5: 1217697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1218697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1219697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 1220697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1221697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1222697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1223697c1883SKrzysztof Drewniak store <2 x ptr addrspace(5)> %data, ptr addrspace(7) %p 1224697c1883SKrzysztof Drewniak ret void 1225697c1883SKrzysztof Drewniak} 1226697c1883SKrzysztof Drewniak 1227697c1883SKrzysztof Drewniakdefine <3 x ptr addrspace(5)> @load_v3p5(ptr addrspace(8) inreg %buf) { 1228697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3p5: 1229697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1230697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1231697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 1232697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1233697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1234697c1883SKrzysztof Drewniak; 1235697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3p5: 1236697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1237697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1238697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 1239697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1240697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1241697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1242697c1883SKrzysztof Drewniak %ret = load <3 x ptr addrspace(5)>, ptr addrspace(7) %p 1243697c1883SKrzysztof Drewniak ret <3 x ptr addrspace(5)> %ret 1244697c1883SKrzysztof Drewniak} 1245697c1883SKrzysztof Drewniak 1246697c1883SKrzysztof Drewniakdefine void @store_v3p5(<3 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) { 1247697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3p5: 1248697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1249697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1250697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 1251697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1252697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1253697c1883SKrzysztof Drewniak; 1254697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3p5: 1255697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1256697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1257697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 1258697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1259697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1260697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1261697c1883SKrzysztof Drewniak store <3 x ptr addrspace(5)> %data, ptr addrspace(7) %p 1262697c1883SKrzysztof Drewniak ret void 1263697c1883SKrzysztof Drewniak} 1264697c1883SKrzysztof Drewniak 1265697c1883SKrzysztof Drewniakdefine <4 x ptr addrspace(5)> @load_v4p5(ptr addrspace(8) inreg %buf) { 1266697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4p5: 1267697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1268697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1269697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1270697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1271697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1272697c1883SKrzysztof Drewniak; 1273697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4p5: 1274697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1275697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1276697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1277697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1278697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1279697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1280697c1883SKrzysztof Drewniak %ret = load <4 x ptr addrspace(5)>, ptr addrspace(7) %p 1281697c1883SKrzysztof Drewniak ret <4 x ptr addrspace(5)> %ret 1282697c1883SKrzysztof Drewniak} 1283697c1883SKrzysztof Drewniak 1284697c1883SKrzysztof Drewniakdefine void @store_v4p5(<4 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) { 1285697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4p5: 1286697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1287697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1288697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1289697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1290697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1291697c1883SKrzysztof Drewniak; 1292697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4p5: 1293697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1294697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1295697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1296697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1297697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1298697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1299697c1883SKrzysztof Drewniak store <4 x ptr addrspace(5)> %data, ptr addrspace(7) %p 1300697c1883SKrzysztof Drewniak ret void 1301697c1883SKrzysztof Drewniak} 1302697c1883SKrzysztof Drewniak 1303697c1883SKrzysztof Drewniak;;; 3 words in a short type. These need to be bitcast to <3 x i32> to be supported. 1304697c1883SKrzysztof Drewniak 1305697c1883SKrzysztof Drewniakdefine <6 x half> @load_v6f16(ptr addrspace(8) inreg %buf) { 1306697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6f16: 1307697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1308697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1309697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 1310697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1311697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1312697c1883SKrzysztof Drewniak; 1313697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6f16: 1314697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1315697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1316697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 1317697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1318697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1319697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1320697c1883SKrzysztof Drewniak %ret = load <6 x half>, ptr addrspace(7) %p 1321697c1883SKrzysztof Drewniak ret <6 x half> %ret 1322697c1883SKrzysztof Drewniak} 1323697c1883SKrzysztof Drewniak 1324697c1883SKrzysztof Drewniakdefine void @store_v6f16(<6 x half> %data, ptr addrspace(8) inreg %buf) { 1325697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6f16: 1326697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1327697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1328697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 1329697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1330697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1331697c1883SKrzysztof Drewniak; 1332697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6f16: 1333697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1334697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1335697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 1336697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1337697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1338697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1339697c1883SKrzysztof Drewniak store <6 x half> %data, ptr addrspace(7) %p 1340697c1883SKrzysztof Drewniak ret void 1341697c1883SKrzysztof Drewniak} 1342697c1883SKrzysztof Drewniak 1343697c1883SKrzysztof Drewniak;;; Long types (32 bit elements). Must be split into multiple operations. 1344697c1883SKrzysztof Drewniak 1345697c1883SKrzysztof Drewniakdefine <5 x float> @load_v5f32(ptr addrspace(8) inreg %buf) { 1346697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v5f32: 1347697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1348697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1349697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1350697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v4, off, s[16:19], 0 offset:16 1351697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1352697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1353697c1883SKrzysztof Drewniak; 1354697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v5f32: 1355697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1356697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1357697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1358697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v4, off, s[16:19], 0 offset:16 1359697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1360697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1361697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1362697c1883SKrzysztof Drewniak %ret = load <5 x float>, ptr addrspace(7) %p 1363697c1883SKrzysztof Drewniak ret <5 x float> %ret 1364697c1883SKrzysztof Drewniak} 1365697c1883SKrzysztof Drewniak 1366697c1883SKrzysztof Drewniakdefine void @store_v5f32(<5 x float> %data, ptr addrspace(8) inreg %buf) { 1367697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v5f32: 1368697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1369697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1370697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1371697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v4, off, s[16:19], 0 offset:16 1372697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1373697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1374697c1883SKrzysztof Drewniak; 1375697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v5f32: 1376697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1377697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1378697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1379697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v4, off, s[16:19], 0 offset:16 1380697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1381697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1382697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1383697c1883SKrzysztof Drewniak store <5 x float> %data, ptr addrspace(7) %p 1384697c1883SKrzysztof Drewniak ret void 1385697c1883SKrzysztof Drewniak} 1386697c1883SKrzysztof Drewniak 1387697c1883SKrzysztof Drewniakdefine <6 x float> @load_v6f32(ptr addrspace(8) inreg %buf) { 1388697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6f32: 1389697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1390697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1391697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1392697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16 1393697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1394697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1395697c1883SKrzysztof Drewniak; 1396697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6f32: 1397697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1398697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1399697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1400697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16 1401697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1402697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1403697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1404697c1883SKrzysztof Drewniak %ret = load <6 x float>, ptr addrspace(7) %p 1405697c1883SKrzysztof Drewniak ret <6 x float> %ret 1406697c1883SKrzysztof Drewniak} 1407697c1883SKrzysztof Drewniak 1408697c1883SKrzysztof Drewniakdefine void @store_v6f32(<6 x float> %data, ptr addrspace(8) inreg %buf) { 1409697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6f32: 1410697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1411697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1412697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1413697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16 1414697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1415697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1416697c1883SKrzysztof Drewniak; 1417697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6f32: 1418697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1419697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1420697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1421697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16 1422697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1423697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1424697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1425697c1883SKrzysztof Drewniak store <6 x float> %data, ptr addrspace(7) %p 1426697c1883SKrzysztof Drewniak ret void 1427697c1883SKrzysztof Drewniak} 1428697c1883SKrzysztof Drewniak 1429697c1883SKrzysztof Drewniakdefine <7 x float> @load_v7f32(ptr addrspace(8) inreg %buf) { 1430697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v7f32: 1431697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1432697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1433697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1434697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[4:6], off, s[16:19], 0 offset:16 1435697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1436697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1437697c1883SKrzysztof Drewniak; 1438697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v7f32: 1439697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1440697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1441697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1442697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[4:6], off, s[16:19], 0 offset:16 1443697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1444697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1445697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1446697c1883SKrzysztof Drewniak %ret = load <7 x float>, ptr addrspace(7) %p 1447697c1883SKrzysztof Drewniak ret <7 x float> %ret 1448697c1883SKrzysztof Drewniak} 1449697c1883SKrzysztof Drewniak 1450697c1883SKrzysztof Drewniakdefine void @store_v7f32(<7 x float> %data, ptr addrspace(8) inreg %buf) { 1451697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v7f32: 1452697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1453697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1454697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1455697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[4:6], off, s[16:19], 0 offset:16 1456697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1457697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1458697c1883SKrzysztof Drewniak; 1459697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v7f32: 1460697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1461697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1462697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1463697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[4:6], off, s[16:19], 0 offset:16 1464697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1465697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1466697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1467697c1883SKrzysztof Drewniak store <7 x float> %data, ptr addrspace(7) %p 1468697c1883SKrzysztof Drewniak ret void 1469697c1883SKrzysztof Drewniak} 1470697c1883SKrzysztof Drewniak 1471697c1883SKrzysztof Drewniakdefine <8 x float> @load_v8f32(ptr addrspace(8) inreg %buf) { 1472697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8f32: 1473697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1474697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1475697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1476697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1477697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1478697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1479697c1883SKrzysztof Drewniak; 1480697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8f32: 1481697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1482697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1483697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1484697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1485697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1486697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1487697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1488697c1883SKrzysztof Drewniak %ret = load <8 x float>, ptr addrspace(7) %p 1489697c1883SKrzysztof Drewniak ret <8 x float> %ret 1490697c1883SKrzysztof Drewniak} 1491697c1883SKrzysztof Drewniak 1492697c1883SKrzysztof Drewniakdefine void @store_v8f32(<8 x float> %data, ptr addrspace(8) inreg %buf) { 1493697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8f32: 1494697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1495697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1496697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1497697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1498697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1499697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1500697c1883SKrzysztof Drewniak; 1501697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8f32: 1502697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1503697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1504697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1505697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1506697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1507697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1508697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1509697c1883SKrzysztof Drewniak store <8 x float> %data, ptr addrspace(7) %p 1510697c1883SKrzysztof Drewniak ret void 1511697c1883SKrzysztof Drewniak} 1512697c1883SKrzysztof Drewniak 1513697c1883SKrzysztof Drewniakdefine <10 x float> @load_v10f32(ptr addrspace(8) inreg %buf) { 1514697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v10f32: 1515697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1516697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1517697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1518697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1519697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[8:9], off, s[16:19], 0 offset:32 1520697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1521697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1522697c1883SKrzysztof Drewniak; 1523697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v10f32: 1524697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1525697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1526697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1527697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1528697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[8:9], off, s[16:19], 0 offset:32 1529697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1530697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1531697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1532697c1883SKrzysztof Drewniak %ret = load <10 x float>, ptr addrspace(7) %p 1533697c1883SKrzysztof Drewniak ret <10 x float> %ret 1534697c1883SKrzysztof Drewniak} 1535697c1883SKrzysztof Drewniak 1536697c1883SKrzysztof Drewniakdefine void @store_v10f32(<10 x float> %data, ptr addrspace(8) inreg %buf) { 1537697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v10f32: 1538697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1539697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1540697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1541697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1542697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[8:9], off, s[16:19], 0 offset:32 1543697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1544697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1545697c1883SKrzysztof Drewniak; 1546697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v10f32: 1547697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1548697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1549697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1550697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1551697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[8:9], off, s[16:19], 0 offset:32 1552697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1553697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1554697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1555697c1883SKrzysztof Drewniak store <10 x float> %data, ptr addrspace(7) %p 1556697c1883SKrzysztof Drewniak ret void 1557697c1883SKrzysztof Drewniak} 1558697c1883SKrzysztof Drewniak 1559697c1883SKrzysztof Drewniakdefine <6 x i32> @load_v6i32(ptr addrspace(8) inreg %buf) { 1560697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6i32: 1561697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1562697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1563697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1564697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16 1565697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1566697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1567697c1883SKrzysztof Drewniak; 1568697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6i32: 1569697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1570697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1571697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1572697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16 1573697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1574697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1575697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1576697c1883SKrzysztof Drewniak %ret = load <6 x i32>, ptr addrspace(7) %p 1577697c1883SKrzysztof Drewniak ret <6 x i32> %ret 1578697c1883SKrzysztof Drewniak} 1579697c1883SKrzysztof Drewniak 1580697c1883SKrzysztof Drewniakdefine void @store_v6i32(<6 x i32> %data, ptr addrspace(8) inreg %buf) { 1581697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6i32: 1582697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1583697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1584697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1585697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16 1586697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1587697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1588697c1883SKrzysztof Drewniak; 1589697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6i32: 1590697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1591697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1592697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1593697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16 1594697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1595697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1596697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1597697c1883SKrzysztof Drewniak store <6 x i32> %data, ptr addrspace(7) %p 1598697c1883SKrzysztof Drewniak ret void 1599697c1883SKrzysztof Drewniak} 1600697c1883SKrzysztof Drewniak 1601697c1883SKrzysztof Drewniakdefine <4 x ptr addrspace(1)> @load_v4p1(ptr addrspace(8) inreg %buf) { 1602697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4p1: 1603697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1604697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1605697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1606697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1607697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1608697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1609697c1883SKrzysztof Drewniak; 1610697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4p1: 1611697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1612697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1613697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1614697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1615697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1616697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1617697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1618697c1883SKrzysztof Drewniak %ret = load <4 x ptr addrspace(1)>, ptr addrspace(7) %p 1619697c1883SKrzysztof Drewniak ret <4 x ptr addrspace(1)> %ret 1620697c1883SKrzysztof Drewniak} 1621697c1883SKrzysztof Drewniak 1622697c1883SKrzysztof Drewniakdefine void @store_v4p1(<4 x ptr addrspace(1)> %data, ptr addrspace(8) inreg %buf) { 1623697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4p1: 1624697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1625697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1626697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1627697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1628697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1629697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1630697c1883SKrzysztof Drewniak; 1631697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4p1: 1632697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1633697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1634697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1635697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 1636697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1637697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1638697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1639697c1883SKrzysztof Drewniak store <4 x ptr addrspace(1)> %data, ptr addrspace(7) %p 1640697c1883SKrzysztof Drewniak ret void 1641697c1883SKrzysztof Drewniak} 1642697c1883SKrzysztof Drewniak 1643697c1883SKrzysztof Drewniak;;; Uneven types with 16-bit elements. Require splitting into multiple operations. 1644697c1883SKrzysztof Drewniak 1645697c1883SKrzysztof Drewniakdefine <1 x i16> @load_v1i16(ptr addrspace(8) inreg %buf) { 1646697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v1i16: 1647697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1648697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1649697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0 1650697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1651697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1652697c1883SKrzysztof Drewniak; 1653697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v1i16: 1654697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1655697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1656697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0 1657697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1658697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1659697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1660697c1883SKrzysztof Drewniak %ret = load <1 x i16>, ptr addrspace(7) %p 1661697c1883SKrzysztof Drewniak ret <1 x i16> %ret 1662697c1883SKrzysztof Drewniak} 1663697c1883SKrzysztof Drewniak 1664697c1883SKrzysztof Drewniakdefine void @store_v1i16(<1 x i16> %data, ptr addrspace(8) inreg %buf) { 1665697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v1i16: 1666697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1667697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1668697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 1669697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1670697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1671697c1883SKrzysztof Drewniak; 1672697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v1i16: 1673697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1674697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1675697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 1676697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1677697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1678697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1679697c1883SKrzysztof Drewniak store <1 x i16> %data, ptr addrspace(7) %p 1680697c1883SKrzysztof Drewniak ret void 1681697c1883SKrzysztof Drewniak} 1682697c1883SKrzysztof Drewniak 1683697c1883SKrzysztof Drewniakdefine <3 x i16> @load_v3i16(ptr addrspace(8) inreg %buf) { 1684697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3i16: 1685697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1686697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1687697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 1688697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v1, off, s[16:19], 0 offset:4 1689697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1690697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1691697c1883SKrzysztof Drewniak; 1692697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3i16: 1693697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1694697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1695697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 1696697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v1, off, s[16:19], 0 offset:4 1697697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1698697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1699697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1700697c1883SKrzysztof Drewniak %ret = load <3 x i16>, ptr addrspace(7) %p 1701697c1883SKrzysztof Drewniak ret <3 x i16> %ret 1702697c1883SKrzysztof Drewniak} 1703697c1883SKrzysztof Drewniak 1704697c1883SKrzysztof Drewniakdefine void @store_v3i16(<3 x i16> %data, ptr addrspace(8) inreg %buf) { 1705697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3i16: 1706697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1707697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1708697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 1709697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v1, off, s[16:19], 0 offset:4 1710697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1711697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1712697c1883SKrzysztof Drewniak; 1713697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3i16: 1714697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1715697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1716697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 1717697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v1, off, s[16:19], 0 offset:4 1718697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1719697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1720697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1721697c1883SKrzysztof Drewniak store <3 x i16> %data, ptr addrspace(7) %p 1722697c1883SKrzysztof Drewniak ret void 1723697c1883SKrzysztof Drewniak} 1724697c1883SKrzysztof Drewniak 1725697c1883SKrzysztof Drewniakdefine <5 x i16> @load_v5i16(ptr addrspace(8) inreg %buf) { 1726697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v5i16: 1727697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1728697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1729697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 1730697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v2, off, s[16:19], 0 offset:8 1731697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1732697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1733697c1883SKrzysztof Drewniak; 1734697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v5i16: 1735697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1736697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1737697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 1738697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v2, off, s[16:19], 0 offset:8 1739697c1883SKrzysztof Drewniak; GISEL-NEXT: s_mov_b32 s4, 0xffff 1740697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 1741697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v0, s4, v0, v0 1742697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v1, s4, v1, v1 1743697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1744697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1745697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1746697c1883SKrzysztof Drewniak %ret = load <5 x i16>, ptr addrspace(7) %p 1747697c1883SKrzysztof Drewniak ret <5 x i16> %ret 1748697c1883SKrzysztof Drewniak} 1749697c1883SKrzysztof Drewniak 1750697c1883SKrzysztof Drewniakdefine void @store_v5i16(<5 x i16> %data, ptr addrspace(8) inreg %buf) { 1751697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v5i16: 1752697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1753697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1754697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 1755697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v2, off, s[16:19], 0 offset:8 1756697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1757697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1758697c1883SKrzysztof Drewniak; 1759697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v5i16: 1760697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1761697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1762697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 1763697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v2, off, s[16:19], 0 offset:8 1764697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1765697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1766697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1767697c1883SKrzysztof Drewniak store <5 x i16> %data, ptr addrspace(7) %p 1768697c1883SKrzysztof Drewniak ret void 1769697c1883SKrzysztof Drewniak} 1770697c1883SKrzysztof Drewniak 1771697c1883SKrzysztof Drewniakdefine <6 x i16> @load_v6i16(ptr addrspace(8) inreg %buf) { 1772697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6i16: 1773697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1774697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1775697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 1776697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1777697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1778697c1883SKrzysztof Drewniak; 1779697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6i16: 1780697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1781697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1782697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 1783697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1784697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1785697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1786697c1883SKrzysztof Drewniak %ret = load <6 x i16>, ptr addrspace(7) %p 1787697c1883SKrzysztof Drewniak ret <6 x i16> %ret 1788697c1883SKrzysztof Drewniak} 1789697c1883SKrzysztof Drewniak 1790697c1883SKrzysztof Drewniakdefine void @store_v6i16(<6 x i16> %data, ptr addrspace(8) inreg %buf) { 1791697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6i16: 1792697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1793697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1794697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 1795697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1796697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1797697c1883SKrzysztof Drewniak; 1798697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6i16: 1799697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1800697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1801697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 1802697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1803697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1804697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1805697c1883SKrzysztof Drewniak store <6 x i16> %data, ptr addrspace(7) %p 1806697c1883SKrzysztof Drewniak ret void 1807697c1883SKrzysztof Drewniak} 1808697c1883SKrzysztof Drewniak 1809697c1883SKrzysztof Drewniakdefine <7 x i16> @load_v7i16(ptr addrspace(8) inreg %buf) { 1810697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v7i16: 1811697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1812697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1813697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 1814697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v3, off, s[16:19], 0 offset:12 1815697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1816697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1817697c1883SKrzysztof Drewniak; 1818697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v7i16: 1819697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1820697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1821697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 1822697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v3, off, s[16:19], 0 offset:12 1823697c1883SKrzysztof Drewniak; GISEL-NEXT: s_mov_b32 s4, 0xffff 1824697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 1825697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v0, s4, v0, v0 1826697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v1, s4, v1, v1 1827697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v2, s4, v2, v2 1828697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1829697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1830697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1831697c1883SKrzysztof Drewniak %ret = load <7 x i16>, ptr addrspace(7) %p 1832697c1883SKrzysztof Drewniak ret <7 x i16> %ret 1833697c1883SKrzysztof Drewniak} 1834697c1883SKrzysztof Drewniak 1835697c1883SKrzysztof Drewniakdefine void @store_v7i16(<7 x i16> %data, ptr addrspace(8) inreg %buf) { 1836697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v7i16: 1837697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1838697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1839697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 1840697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v3, off, s[16:19], 0 offset:12 1841697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1842697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1843697c1883SKrzysztof Drewniak; 1844697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v7i16: 1845697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1846697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1847697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 1848697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v3, off, s[16:19], 0 offset:12 1849697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1850697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1851697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1852697c1883SKrzysztof Drewniak store <7 x i16> %data, ptr addrspace(7) %p 1853697c1883SKrzysztof Drewniak ret void 1854697c1883SKrzysztof Drewniak} 1855697c1883SKrzysztof Drewniak 1856697c1883SKrzysztof Drewniakdefine <9 x i16> @load_v9i16(ptr addrspace(8) inreg %buf) { 1857697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v9i16: 1858697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1859697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1860697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1861697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:16 1862697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1863697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1864697c1883SKrzysztof Drewniak; 1865697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v9i16: 1866697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1867697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1868697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 1869697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:16 1870697c1883SKrzysztof Drewniak; GISEL-NEXT: s_mov_b32 s4, 0xffff 1871697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 1872697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v0, s4, v0, v0 1873697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v1, s4, v1, v1 1874697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v2, s4, v2, v2 1875697c1883SKrzysztof Drewniak; GISEL-NEXT: v_bfi_b32 v3, s4, v3, v3 1876697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1877697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1878697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1879697c1883SKrzysztof Drewniak %ret = load <9 x i16>, ptr addrspace(7) %p 1880697c1883SKrzysztof Drewniak ret <9 x i16> %ret 1881697c1883SKrzysztof Drewniak} 1882697c1883SKrzysztof Drewniak 1883697c1883SKrzysztof Drewniakdefine void @store_v9i16(<9 x i16> %data, ptr addrspace(8) inreg %buf) { 1884697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v9i16: 1885697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1886697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1887697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1888697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v4, off, s[16:19], 0 offset:16 1889697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1890697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1891697c1883SKrzysztof Drewniak; 1892697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v9i16: 1893697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1894697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1895697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 1896697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v4, off, s[16:19], 0 offset:16 1897697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1898697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1899697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1900697c1883SKrzysztof Drewniak store <9 x i16> %data, ptr addrspace(7) %p 1901697c1883SKrzysztof Drewniak ret void 1902697c1883SKrzysztof Drewniak} 1903697c1883SKrzysztof Drewniak 1904697c1883SKrzysztof Drewniak;;; Byte vectors. Need to be 1905697c1883SKrzysztof Drewniak;;; - Split into multiple operations 1906697c1883SKrzysztof Drewniak;;; - Bitcast if they have a natively supported width 1907697c1883SKrzysztof Drewniak 1908697c1883SKrzysztof Drewniakdefine <1 x i8> @load_v1i8(ptr addrspace(8) inreg %buf) { 1909697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v1i8: 1910697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1911697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1912697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 1913697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1914697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1915697c1883SKrzysztof Drewniak; 1916697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v1i8: 1917697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1918697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1919697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 1920697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1921697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1922697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1923697c1883SKrzysztof Drewniak %ret = load <1 x i8>, ptr addrspace(7) %p 1924697c1883SKrzysztof Drewniak ret <1 x i8> %ret 1925697c1883SKrzysztof Drewniak} 1926697c1883SKrzysztof Drewniak 1927697c1883SKrzysztof Drewniakdefine void @store_v1i8(<1 x i8> %data, ptr addrspace(8) inreg %buf) { 1928697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v1i8: 1929697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1930697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1931697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 1932697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1933697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1934697c1883SKrzysztof Drewniak; 1935697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v1i8: 1936697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1937697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1938697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 1939697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1940697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1941697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1942697c1883SKrzysztof Drewniak store <1 x i8> %data, ptr addrspace(7) %p 1943697c1883SKrzysztof Drewniak ret void 1944697c1883SKrzysztof Drewniak} 1945697c1883SKrzysztof Drewniak 1946697c1883SKrzysztof Drewniakdefine <2 x i8> @load_v2i8(ptr addrspace(8) inreg %buf) { 1947697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i8: 1948697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1949697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1950697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0 1951697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1952697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0 1953697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1954697c1883SKrzysztof Drewniak; 1955697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i8: 1956697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1957697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1958697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0 1959697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1960697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0 1961697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1962697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1963697c1883SKrzysztof Drewniak %ret = load <2 x i8>, ptr addrspace(7) %p 1964697c1883SKrzysztof Drewniak ret <2 x i8> %ret 1965697c1883SKrzysztof Drewniak} 1966697c1883SKrzysztof Drewniak 1967697c1883SKrzysztof Drewniakdefine void @store_v2i8(<2 x i8> %data, ptr addrspace(8) inreg %buf) { 1968697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i8: 1969697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1970697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1971697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 1972697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1973697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 1974697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 1975697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 1976697c1883SKrzysztof Drewniak; 1977697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i8: 1978697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 1979697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1980697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1 1981697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1 1982697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1983697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 1984697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 1985697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 1986697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 1987697c1883SKrzysztof Drewniak store <2 x i8> %data, ptr addrspace(7) %p 1988697c1883SKrzysztof Drewniak ret void 1989697c1883SKrzysztof Drewniak} 1990697c1883SKrzysztof Drewniak 1991697c1883SKrzysztof Drewniakdefine <3 x i8> @load_v3i8(ptr addrspace(8) inreg %buf) { 1992697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3i8: 1993697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 1994697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1995697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0 1996697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v2, off, s[16:19], 0 offset:2 1997697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(1) 1998697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0 1999697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2000697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2001697c1883SKrzysztof Drewniak; 2002697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3i8: 2003697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2004697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2005697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0 2006697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v2, off, s[16:19], 0 offset:2 2007697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 2008697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0 2009697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2010697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2011697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2012697c1883SKrzysztof Drewniak %ret = load <3 x i8>, ptr addrspace(7) %p 2013697c1883SKrzysztof Drewniak ret <3 x i8> %ret 2014697c1883SKrzysztof Drewniak} 2015697c1883SKrzysztof Drewniak 2016697c1883SKrzysztof Drewniakdefine void @store_v3i8(<3 x i8> %data, ptr addrspace(8) inreg %buf) { 2017697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3i8: 2018697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2019697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2020697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2021697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2022697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 2023697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v2, off, s[16:19], 0 offset:2 2024697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2025697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2026697c1883SKrzysztof Drewniak; 2027697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3i8: 2028697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2029697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2030697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1 2031697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2032697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2033697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 2034697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v2, off, s[16:19], 0 offset:2 2035697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2036697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2037697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2038697c1883SKrzysztof Drewniak store <3 x i8> %data, ptr addrspace(7) %p 2039697c1883SKrzysztof Drewniak ret void 2040697c1883SKrzysztof Drewniak} 2041697c1883SKrzysztof Drewniak 2042697c1883SKrzysztof Drewniakdefine <4 x i8> @load_v4i8(ptr addrspace(8) inreg %buf) { 2043697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4i8: 2044697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2045697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2046697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 2047697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2048697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2049697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0 2050697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2051697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2052697c1883SKrzysztof Drewniak; 2053697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4i8: 2054697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2055697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2056697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 2057697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2058697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0 2059697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2060697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2061697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2062697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2063697c1883SKrzysztof Drewniak %ret = load <4 x i8>, ptr addrspace(7) %p 2064697c1883SKrzysztof Drewniak ret <4 x i8> %ret 2065697c1883SKrzysztof Drewniak} 2066697c1883SKrzysztof Drewniak 2067697c1883SKrzysztof Drewniakdefine void @store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) { 2068697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4i8: 2069697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2070697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2071697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2072697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2073697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 2074697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2075697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2076697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 2077697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2078697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2079697c1883SKrzysztof Drewniak; 2080697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4i8: 2081697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2082697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2083697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v5, 8 2084697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v4, 0xff 2085697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2086697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, v4, v1 2087697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2 2088697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3 2089697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 2090697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 2091697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 2092697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 2093697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2094697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2095697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2096697c1883SKrzysztof Drewniak store <4 x i8> %data, ptr addrspace(7) %p 2097697c1883SKrzysztof Drewniak ret void 2098697c1883SKrzysztof Drewniak} 2099697c1883SKrzysztof Drewniak 2100697c1883SKrzysztof Drewniakdefine <5 x i8> @load_v5i8(ptr addrspace(8) inreg %buf) { 2101697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v5i8: 2102697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2103697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2104697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 2105697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v4, off, s[16:19], 0 offset:4 2106697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(1) 2107697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0 2108697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2109697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2110697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2111697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2112697c1883SKrzysztof Drewniak; 2113697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v5i8: 2114697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2115697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2116697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 2117697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v4, off, s[16:19], 0 offset:4 2118697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 2119697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0 2120697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2121697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2122697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2123697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2124697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2125697c1883SKrzysztof Drewniak %ret = load <5 x i8>, ptr addrspace(7) %p 2126697c1883SKrzysztof Drewniak ret <5 x i8> %ret 2127697c1883SKrzysztof Drewniak} 2128697c1883SKrzysztof Drewniak 2129697c1883SKrzysztof Drewniakdefine void @store_v5i8(<5 x i8> %data, ptr addrspace(8) inreg %buf) { 2130697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v5i8: 2131697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2132697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2133697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2134697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2135697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 2136697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2137697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2138697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 2139697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v4, off, s[16:19], 0 offset:4 2140697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2141697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2142697c1883SKrzysztof Drewniak; 2143697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v5i8: 2144697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2145697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2146697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v6, 8 2147697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v5, 0xff 2148697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v6, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2149697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, v5, v1 2150697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2 2151697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3 2152697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 2153697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 2154697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 2155697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 2156697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v4, off, s[16:19], 0 offset:4 2157697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2158697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2159697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2160697c1883SKrzysztof Drewniak store <5 x i8> %data, ptr addrspace(7) %p 2161697c1883SKrzysztof Drewniak ret void 2162697c1883SKrzysztof Drewniak} 2163697c1883SKrzysztof Drewniak 2164697c1883SKrzysztof Drewniakdefine <6 x i8> @load_v6i8(ptr addrspace(8) inreg %buf) { 2165697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6i8: 2166697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2167697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2168697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v6, off, s[16:19], 0 offset:4 2169697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 2170697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(1) 2171697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v1, 0xffff, v6 2172697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2173697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v7, 8, v0 2174697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[0:1] 2175697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2176697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1 2177697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v4, v6 2178697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v1, v7 2179697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2180697c1883SKrzysztof Drewniak; 2181697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6i8: 2182697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2183697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2184697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 2185697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:4 2186697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 2187697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2188697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0 2189697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2190697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2191697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v4 2192697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2193697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2194697c1883SKrzysztof Drewniak %ret = load <6 x i8>, ptr addrspace(7) %p 2195697c1883SKrzysztof Drewniak ret <6 x i8> %ret 2196697c1883SKrzysztof Drewniak} 2197697c1883SKrzysztof Drewniak 2198697c1883SKrzysztof Drewniakdefine void @store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) { 2199697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6i8: 2200697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2201697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2202697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2203697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2204697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 2205697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2206697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5 2207697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2208697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2209697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 2210697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v4, off, s[16:19], 0 offset:4 2211697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2212697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2213697c1883SKrzysztof Drewniak; 2214697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6i8: 2215697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2216697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2217697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1 2218697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2219697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2220697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v3 2221697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2222697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2223697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v5 2224697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0 2225697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v2, 8, v2 2226697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0 2227697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2228697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 2229697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v2, off, s[16:19], 0 offset:4 2230697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2231697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2232697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2233697c1883SKrzysztof Drewniak store <6 x i8> %data, ptr addrspace(7) %p 2234697c1883SKrzysztof Drewniak ret void 2235697c1883SKrzysztof Drewniak} 2236697c1883SKrzysztof Drewniak 2237697c1883SKrzysztof Drewniakdefine <7 x i8> @load_v7i8(ptr addrspace(8) inreg %buf) { 2238697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v7i8: 2239697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2240697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2241697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 2242697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:4 2243697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v6, off, s[16:19], 0 offset:6 2244697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(2) 2245697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0 2246697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2247697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2248697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(1) 2249697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v4 2250697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2251697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2252697c1883SKrzysztof Drewniak; 2253697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v7i8: 2254697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2255697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2256697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 2257697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:4 2258697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v6, off, s[16:19], 0 offset:6 2259697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(2) 2260697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0 2261697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2262697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2263697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 2264697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v4 2265697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2266697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2267697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2268697c1883SKrzysztof Drewniak %ret = load <7 x i8>, ptr addrspace(7) %p 2269697c1883SKrzysztof Drewniak ret <7 x i8> %ret 2270697c1883SKrzysztof Drewniak} 2271697c1883SKrzysztof Drewniak 2272697c1883SKrzysztof Drewniakdefine void @store_v7i8(<7 x i8> %data, ptr addrspace(8) inreg %buf) { 2273697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v7i8: 2274697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2275697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2276697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2277697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2278697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 2279697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2280697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2281697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 2282697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v0, 8, v5 2283697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2284697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 offset:4 2285697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v6, off, s[16:19], 0 offset:6 2286697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2287697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2288697c1883SKrzysztof Drewniak; 2289697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v7i8: 2290697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2291697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2292697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v8, 8 2293697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v7, 0xff 2294697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v8, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2295697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, v7, v1 2296697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2 2297697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3 2298697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 2299697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 2300697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 2301697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 2302697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0xff, v5 2303697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v0, 8, v0 2304697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2305697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 offset:4 2306697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v6, off, s[16:19], 0 offset:6 2307697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2308697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2309697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2310697c1883SKrzysztof Drewniak store <7 x i8> %data, ptr addrspace(7) %p 2311697c1883SKrzysztof Drewniak ret void 2312697c1883SKrzysztof Drewniak} 2313697c1883SKrzysztof Drewniak 2314697c1883SKrzysztof Drewniakdefine <8 x i8> @load_v8i8(ptr addrspace(8) inreg %buf) { 2315697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8i8: 2316697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2317697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2318697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 2319697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2320697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[0:1] 2321697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v8, 8, v0 2322697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2323697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1 2324697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v6, 16, v1 2325697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v7, 24, v1 2326697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v4, v1 2327697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v1, v8 2328697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2329697c1883SKrzysztof Drewniak; 2330697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8i8: 2331697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2332697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2333697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 2334697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2335697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v8, 8, v0 2336697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 2337697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2338697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v1 2339697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v6, 16, v1 2340697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v7, 24, v1 2341697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v4, v1 2342697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v1, v8 2343697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2344697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2345697c1883SKrzysztof Drewniak %ret = load <8 x i8>, ptr addrspace(7) %p 2346697c1883SKrzysztof Drewniak ret <8 x i8> %ret 2347697c1883SKrzysztof Drewniak} 2348697c1883SKrzysztof Drewniak 2349697c1883SKrzysztof Drewniakdefine void @store_v8i8(<8 x i8> %data, ptr addrspace(8) inreg %buf) { 2350697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8i8: 2351697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2352697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2353697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5 2354697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2355697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2356697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v7 2357697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2358697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 2359697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2360697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2361697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2362697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v3, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2363697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[3:4], off, s[16:19], 0 2364697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2365697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2366697c1883SKrzysztof Drewniak; 2367697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8i8: 2368697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2369697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2370697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v9, 8 2371697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v8, 0xff 2372697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2373697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, v8, v1 2374697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2 2375697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3 2376697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 2377697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 2378697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 2379697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v9, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2380697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v6 2381697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v7 2382697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v1, v4, v8, v1 2383697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 16, v2 2384697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3 2385697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v1, v1, v2, v3 2386697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 2387697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2388697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2389697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2390697c1883SKrzysztof Drewniak store <8 x i8> %data, ptr addrspace(7) %p 2391697c1883SKrzysztof Drewniak ret void 2392697c1883SKrzysztof Drewniak} 2393697c1883SKrzysztof Drewniak 2394697c1883SKrzysztof Drewniakdefine <12 x i8> @load_v12i8(ptr addrspace(8) inreg %buf) { 2395697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v12i8: 2396697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2397697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2398697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 2399697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2400697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v8, v2 2401697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v9, 8, v2 2402697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[0:1] 2403697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v14, 8, v0 2404697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v13, 16, v0 2405697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9] 2406697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1 2407697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v6, 16, v1 2408697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v7, 24, v1 2409697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v10, 16, v2 2410697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v4, v1 2411697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v1, v14 2412697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v2, v13 2413697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2414697c1883SKrzysztof Drewniak; 2415697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v12i8: 2416697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2417697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2418697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 2419697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2420697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v13, 8, v0 2421697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v12, 16, v0 2422697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2423697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v1 2424697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v6, 16, v1 2425697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v7, 24, v1 2426697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v9, 8, v2 2427697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v10, 16, v2 2428697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v11, 24, v2 2429697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v4, v1 2430697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v8, v2 2431697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v1, v13 2432697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v2, v12 2433697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2434697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2435697c1883SKrzysztof Drewniak %ret = load <12 x i8>, ptr addrspace(7) %p 2436697c1883SKrzysztof Drewniak ret <12 x i8> %ret 2437697c1883SKrzysztof Drewniak} 2438697c1883SKrzysztof Drewniak 2439697c1883SKrzysztof Drewniakdefine void @store_v12i8(<12 x i8> %data, ptr addrspace(8) inreg %buf) { 2440697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v12i8: 2441697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2442697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2443697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v9 2444697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5 2445697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2446697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2447697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v11 2448697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2449697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v7 2450697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2451697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 2452697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2453697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2454697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2455697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2456697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v7, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2457697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v6, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2458697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[6:8], off, s[16:19], 0 2459697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2460697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2461697c1883SKrzysztof Drewniak; 2462697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v12i8: 2463697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2464697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2465697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v13, 8 2466697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v12, 0xff 2467697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v13, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2468697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, v12, v1 2469697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2 2470697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3 2471697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 2472697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 2473697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 2474697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v13, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2475697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v6 2476697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v7 2477697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v1, v4, v12, v1 2478697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 16, v2 2479697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3 2480697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v1, v1, v2, v3 2481697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v2, v13, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2482697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v10 2483697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v11 2484697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v2, v8, v12, v2 2485697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v3, 16, v3 2486697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v4, 24, v4 2487697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v2, v2, v3, v4 2488697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 2489697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2490697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2491697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2492697c1883SKrzysztof Drewniak store <12 x i8> %data, ptr addrspace(7) %p 2493697c1883SKrzysztof Drewniak ret void 2494697c1883SKrzysztof Drewniak} 2495697c1883SKrzysztof Drewniak 2496697c1883SKrzysztof Drewniakdefine <16 x i8> @load_v16i8(ptr addrspace(8) inreg %buf) { 2497697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v16i8: 2498697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2499697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2500697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 2501697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2502697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b64 v[18:19], 24, v[0:1] 2503697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b64 v[11:12], 24, v[2:3] 2504697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v17, 8, v0 2505697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v16, 16, v0 2506697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1 2507697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v6, 16, v1 2508697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v7, 24, v1 2509697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v9, 8, v2 2510697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v10, 16, v2 2511697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v13, 8, v3 2512697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v14, 16, v3 2513697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v15, 24, v3 2514697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v4, v1 2515697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v8, v2 2516697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v12, v3 2517697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v1, v17 2518697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v2, v16 2519697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v3, v18 2520697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2521697c1883SKrzysztof Drewniak; 2522697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v16i8: 2523697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2524697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2525697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 2526697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2527697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v16, 8, v0 2528697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v17, 16, v0 2529697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v18, 24, v0 2530697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v1 2531697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v6, 16, v1 2532697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v7, 24, v1 2533697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v9, 8, v2 2534697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v10, 16, v2 2535697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v11, 24, v2 2536697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v13, 8, v3 2537697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v14, 16, v3 2538697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v15, 24, v3 2539697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v4, v1 2540697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v8, v2 2541697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v12, v3 2542697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v1, v16 2543697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v2, v17 2544697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v3, v18 2545697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2546697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2547697c1883SKrzysztof Drewniak %ret = load <16 x i8>, ptr addrspace(7) %p 2548697c1883SKrzysztof Drewniak ret <16 x i8> %ret 2549697c1883SKrzysztof Drewniak} 2550697c1883SKrzysztof Drewniak 2551697c1883SKrzysztof Drewniakdefine void @store_v16i8(<16 x i8> %data, ptr addrspace(8) inreg %buf) { 2552697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v16i8: 2553697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2554697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2555697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v13, 8, v13 2556697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v9 2557697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5 2558697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 2559697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2560697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v13, 8, v15 2561697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2562697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v11 2563697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2564697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v7 2565697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2566697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 2567697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2568697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2569697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2570697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2571697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2572697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v11, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2573697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v10, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2574697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v9, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2575697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[9:12], off, s[16:19], 0 2576697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2577697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2578697c1883SKrzysztof Drewniak; 2579697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v16i8: 2580697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2581697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2582697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v17, 8 2583697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v16, 0xff 2584697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v17, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2585697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, v16, v1 2586697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2 2587697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3 2588697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 2589697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 2590697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 2591697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v17, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2592697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v6 2593697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v7 2594697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v1, v4, v16, v1 2595697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 16, v2 2596697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3 2597697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v1, v1, v2, v3 2598697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v2, v17, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2599697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v10 2600697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v11 2601697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v2, v8, v16, v2 2602697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v3, 16, v3 2603697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v4, 24, v4 2604697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v2, v2, v3, v4 2605697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v3, v17, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2606697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v14 2607697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v15 2608697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v3, v12, v16, v3 2609697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v4 2610697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v5, 24, v5 2611697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v3, v3, v4, v5 2612697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 2613697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2614697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2615697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2616697c1883SKrzysztof Drewniak store <16 x i8> %data, ptr addrspace(7) %p 2617697c1883SKrzysztof Drewniak ret void 2618697c1883SKrzysztof Drewniak} 2619697c1883SKrzysztof Drewniak 2620697c1883SKrzysztof Drewniakdefine <32 x i8> @load_v32i8(ptr addrspace(8) inreg %buf) { 2621697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v32i8: 2622697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2623697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26246206f544SLucas Ramirez; SDAG-NEXT: buffer_load_dwordx4 v[36:39], off, s[16:19], 0 26256206f544SLucas Ramirez; SDAG-NEXT: buffer_load_dwordx4 v[32:35], off, s[16:19], 0 offset:16 2626697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(1) 26276206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[36:37] 26286206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b64 v[11:12], 24, v[38:39] 2629697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 26306206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b64 v[19:20], 24, v[32:33] 26316206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b64 v[27:28], 24, v[34:35] 26326206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v36 26336206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v36 26346206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v37 26356206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v6, 16, v37 26366206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v7, 24, v37 26376206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v9, 8, v38 26386206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v10, 16, v38 26396206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v13, 8, v39 26406206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v14, 16, v39 26416206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v15, 24, v39 26426206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v17, 8, v32 26436206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v18, 16, v32 26446206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v21, 8, v33 26456206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v22, 16, v33 26466206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v23, 24, v33 26476206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v25, 8, v34 26486206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v26, 16, v34 26496206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v29, 8, v35 26506206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v30, 16, v35 26516206f544SLucas Ramirez; SDAG-NEXT: v_lshrrev_b32_e32 v31, 24, v35 26526206f544SLucas Ramirez; SDAG-NEXT: v_mov_b32_e32 v0, v36 26536206f544SLucas Ramirez; SDAG-NEXT: v_mov_b32_e32 v4, v37 26546206f544SLucas Ramirez; SDAG-NEXT: v_mov_b32_e32 v8, v38 26556206f544SLucas Ramirez; SDAG-NEXT: v_mov_b32_e32 v12, v39 26566206f544SLucas Ramirez; SDAG-NEXT: v_mov_b32_e32 v16, v32 26576206f544SLucas Ramirez; SDAG-NEXT: v_mov_b32_e32 v20, v33 26586206f544SLucas Ramirez; SDAG-NEXT: v_mov_b32_e32 v24, v34 26596206f544SLucas Ramirez; SDAG-NEXT: v_mov_b32_e32 v28, v35 2660697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2661697c1883SKrzysztof Drewniak; 2662697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v32i8: 2663697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2664697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2665697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 2666697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[16:19], off, s[16:19], 0 offset:16 2667697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 2668697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v35, 8, v0 2669697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v36, 16, v0 2670697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v37, 24, v0 2671697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2672697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v32, 8, v16 2673697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v33, 16, v16 2674697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v34, 24, v16 2675697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v1 2676697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v6, 16, v1 2677697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v7, 24, v1 2678697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v9, 8, v2 2679697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v10, 16, v2 2680697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v11, 24, v2 2681697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v13, 8, v3 2682697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v14, 16, v3 2683697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v15, 24, v3 2684697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v21, 8, v17 2685697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v22, 16, v17 2686697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v23, 24, v17 2687697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v25, 8, v18 2688697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v26, 16, v18 2689697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v27, 24, v18 2690697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v29, 8, v19 2691697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v30, 16, v19 2692697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v31, 24, v19 2693697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v4, v1 2694697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v8, v2 2695697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v12, v3 2696697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v20, v17 2697697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v24, v18 2698697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v28, v19 2699697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v1, v35 2700697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v2, v36 2701697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v3, v37 2702697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v17, v32 2703697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v18, v33 2704697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v19, v34 2705697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2706697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2707697c1883SKrzysztof Drewniak %ret = load <32 x i8>, ptr addrspace(7) %p 2708697c1883SKrzysztof Drewniak ret <32 x i8> %ret 2709697c1883SKrzysztof Drewniak} 2710697c1883SKrzysztof Drewniak 2711697c1883SKrzysztof Drewniakdefine void @store_v32i8(<32 x i8> %data, ptr addrspace(8) inreg %buf) { 2712697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v32i8: 2713697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2714697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 27156206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v9 27166206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27176206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v11 27186206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27196206f544SLucas Ramirez; SDAG-NEXT: buffer_load_ubyte v10, off, s[0:3], s32 2720697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v13, 8, v13 2721697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2722697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v13, 8, v15 2723697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5 27246206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v7, 8, v7 2725697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 27266206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v3, 8, v3 27276206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2728697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27296206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v5, v6, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2730697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27316206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v6, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2732697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v3, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2733697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v2, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2734697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2735697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 27366206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v11, 8, v29 27376206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v14, 8, v25 27386206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v15, 8, v27 27396206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v21, 8, v21 27406206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v23, 8, v23 27416206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v17, 8, v17 27426206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v19, 8, v19 2743697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 27446206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v7, v28, v11 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27456206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v11, v24, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27466206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v14, v26, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27476206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v15, v20, v21 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27486206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v20, v22, v23 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27496206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v16, v16, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27506206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v17, v18, v19 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 27516206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v5, v11, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 27526206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v4, v15, v20 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 27536206f544SLucas Ramirez; SDAG-NEXT: v_or_b32_sdwa v3, v16, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2754697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(1) 27556206f544SLucas Ramirez; SDAG-NEXT: v_lshlrev_b16_e32 v0, 8, v10 2756697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v30, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2757697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v6, v7, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 2758697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[3:6], off, s[16:19], 0 offset:16 2759697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2760697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2761697c1883SKrzysztof Drewniak; 2762697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v32i8: 2763697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2764697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2765697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v31, 8 2766697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v31, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2767697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v32, 0xff 2768697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, v32, v1 2769697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v31, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2770697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v7 2771697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v7, off, s[0:3], s32 2772697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v1, v4, v32, v1 2773697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v2 2774697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v3 2775697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v6 2776697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 16, v2 2777697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3 2778697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v4 2779697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v5, 24, v5 2780697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v2, v3 2781697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v1, v1, v4, v5 2782697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v2, v31, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2783697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v10 2784697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v11 2785697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v2, v8, v32, v2 2786697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v3, 16, v3 2787697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v4, 24, v4 2788697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v2, v2, v3, v4 2789697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v3, v31, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2790697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v14 2791697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v15 2792697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v3, v12, v32, v3 2793697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v4 2794697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v5, 24, v5 2795697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v3, v3, v4, v5 2796697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v4, v31, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2797697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v18 2798697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v6, 0xff, v19 2799697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v4, v16, v32, v4 2800697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v5, 16, v5 2801697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v6, 24, v6 2802697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v8, v31, v21 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2803697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v4, v4, v5, v6 2804697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v22 2805697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v6, 0xff, v23 2806697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v8, v20, v32, v8 2807697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v5, 16, v5 2808697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v6, 24, v6 2809697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v5, v8, v5, v6 2810697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v6, v31, v25 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2811697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v8, 0xff, v26 2812697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v9, 0xff, v27 2813697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v6, v24, v32, v6 2814697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v8, 16, v8 2815697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v9, 24, v9 2816697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v6, v6, v8, v9 2817697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v8, v31, v29 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 2818697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v9, 0xff, v30 2819697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v8, v28, v32, v8 2820697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v9, 16, v9 2821697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2822697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v7, 24, v7 2823697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v7, v8, v9, v7 2824697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 2825697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 2826697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2827697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2828697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2829697c1883SKrzysztof Drewniak store <32 x i8> %data, ptr addrspace(7) %p 2830697c1883SKrzysztof Drewniak ret void 2831697c1883SKrzysztof Drewniak} 2832697c1883SKrzysztof Drewniak 2833697c1883SKrzysztof Drewniak;;; Arrays. Need to become vectors. 2834697c1883SKrzysztof Drewniak 2835697c1883SKrzysztof Drewniakdefine [1 x i32] @load_a1i32(ptr addrspace(8) inreg %buf) { 2836697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a1i32: 2837697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2838697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2839697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 2840697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2841697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2842697c1883SKrzysztof Drewniak; 2843697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a1i32: 2844697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2845697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2846697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 2847697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2848697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2849697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2850697c1883SKrzysztof Drewniak %ret = load [1 x i32], ptr addrspace(7) %p 2851697c1883SKrzysztof Drewniak ret [1 x i32] %ret 2852697c1883SKrzysztof Drewniak} 2853697c1883SKrzysztof Drewniak 2854697c1883SKrzysztof Drewniakdefine void @store_a1i32([1 x i32] %data, ptr addrspace(8) inreg %buf) { 2855697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a1i32: 2856697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2857697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2858697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 2859697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2860697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2861697c1883SKrzysztof Drewniak; 2862697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a1i32: 2863697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2864697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2865697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 2866697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2867697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2868697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2869697c1883SKrzysztof Drewniak store [1 x i32] %data, ptr addrspace(7) %p 2870697c1883SKrzysztof Drewniak ret void 2871697c1883SKrzysztof Drewniak} 2872697c1883SKrzysztof Drewniak 2873697c1883SKrzysztof Drewniakdefine [2 x i32] @load_a2i32(ptr addrspace(8) inreg %buf) { 2874697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2i32: 2875697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2876697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2877697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 2878697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2879697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2880697c1883SKrzysztof Drewniak; 2881697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2i32: 2882697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2883697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2884697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 2885697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2886697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2887697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2888697c1883SKrzysztof Drewniak %ret = load [2 x i32], ptr addrspace(7) %p 2889697c1883SKrzysztof Drewniak ret [2 x i32] %ret 2890697c1883SKrzysztof Drewniak} 2891697c1883SKrzysztof Drewniak 2892697c1883SKrzysztof Drewniakdefine void @store_a2i32([2 x i32] %data, ptr addrspace(8) inreg %buf) { 2893697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2i32: 2894697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2895697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2896697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 2897697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2898697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2899697c1883SKrzysztof Drewniak; 2900697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2i32: 2901697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2902697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2903697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 2904697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2905697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2906697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2907697c1883SKrzysztof Drewniak store [2 x i32] %data, ptr addrspace(7) %p 2908697c1883SKrzysztof Drewniak ret void 2909697c1883SKrzysztof Drewniak} 2910697c1883SKrzysztof Drewniak 2911697c1883SKrzysztof Drewniakdefine [2 x half] @load_a2f16(ptr addrspace(8) inreg %buf) { 2912697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2f16: 2913697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2914697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2915697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 2916697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2917697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v0 2918697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2919697c1883SKrzysztof Drewniak; 2920697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2f16: 2921697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2922697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2923697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 2924697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2925697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v0 2926697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2927697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2928697c1883SKrzysztof Drewniak %ret = load [2 x half], ptr addrspace(7) %p 2929697c1883SKrzysztof Drewniak ret [2 x half] %ret 2930697c1883SKrzysztof Drewniak} 2931697c1883SKrzysztof Drewniak 2932697c1883SKrzysztof Drewniakdefine void @store_a2f16([2 x half] %data, ptr addrspace(8) inreg %buf) { 2933697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2f16: 2934697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2935697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2936697c1883SKrzysztof Drewniak; SDAG-NEXT: s_mov_b32 s4, 0x5040100 2937697c1883SKrzysztof Drewniak; SDAG-NEXT: v_perm_b32 v0, v1, v0, s4 2938697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 2939697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2940697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2941697c1883SKrzysztof Drewniak; 2942697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2f16: 2943697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2944697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2945697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0 2946697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0 2947697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 2948697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2949697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2950697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2951697c1883SKrzysztof Drewniak store [2 x half] %data, ptr addrspace(7) %p 2952697c1883SKrzysztof Drewniak ret void 2953697c1883SKrzysztof Drewniak} 2954697c1883SKrzysztof Drewniak 2955697c1883SKrzysztof Drewniakdefine [2 x ptr addrspace(1)] @load_a2p1(ptr addrspace(8) inreg %buf) { 2956697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2p1: 2957697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2958697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2959697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 2960697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2961697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2962697c1883SKrzysztof Drewniak; 2963697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2p1: 2964697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2965697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2966697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 2967697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2968697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2969697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2970697c1883SKrzysztof Drewniak %ret = load [2 x ptr addrspace(1)], ptr addrspace(7) %p 2971697c1883SKrzysztof Drewniak ret [2 x ptr addrspace(1)] %ret 2972697c1883SKrzysztof Drewniak} 2973697c1883SKrzysztof Drewniak 2974697c1883SKrzysztof Drewniakdefine void @store_a2p1([2 x ptr addrspace(1)] %data, ptr addrspace(8) inreg %buf) { 2975697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2p1: 2976697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2977697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2978697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 2979697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 2980697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 2981697c1883SKrzysztof Drewniak; 2982697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2p1: 2983697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 2984697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2985697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 2986697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 2987697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 2988697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 2989697c1883SKrzysztof Drewniak store [2 x ptr addrspace(1)] %data, ptr addrspace(7) %p 2990697c1883SKrzysztof Drewniak ret void 2991697c1883SKrzysztof Drewniak} 2992697c1883SKrzysztof Drewniak 2993697c1883SKrzysztof Drewniak;;; Scalars of atypical width. Need to be cast to vectors and split. 2994697c1883SKrzysztof Drewniak 2995697c1883SKrzysztof Drewniakdefine i40 @load_i40(ptr addrspace(8) inreg %buf) { 2996697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i40: 2997697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 2998697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2999697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 3000697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v1, off, s[16:19], 0 offset:4 3001697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3002697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3003697c1883SKrzysztof Drewniak; 3004697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i40: 3005697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3006697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3007697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 3008697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v1, off, s[16:19], 0 offset:4 3009697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v2, 0xff 3010697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 3011697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 8, v0 3012697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v4, 24, v0 3013697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v3 3014697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD 3015697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v4, 8, v4 3016697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v3, 8, v3 3017697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_e32 v2, v2, v4 3018697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3019697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xffff, v2 3020697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0 3021697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshl_or_b32 v0, v2, 16, v0 3022697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3023697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3024697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3025697c1883SKrzysztof Drewniak %ret = load i40, ptr addrspace(7) %p 3026697c1883SKrzysztof Drewniak ret i40 %ret 3027697c1883SKrzysztof Drewniak} 3028697c1883SKrzysztof Drewniak 3029697c1883SKrzysztof Drewniakdefine void @store_i40(i40 %data, ptr addrspace(8) inreg %buf) { 3030697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i40: 3031697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3032697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3033697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 3034697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v1, off, s[16:19], 0 offset:4 3035697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3036697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3037697c1883SKrzysztof Drewniak; 3038697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i40: 3039697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3040697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3041697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 3042697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v1, off, s[16:19], 0 offset:4 3043697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3044697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3045697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3046697c1883SKrzysztof Drewniak store i40 %data, ptr addrspace(7) %p 3047697c1883SKrzysztof Drewniak ret void 3048697c1883SKrzysztof Drewniak} 3049697c1883SKrzysztof Drewniak 3050697c1883SKrzysztof Drewniakdefine i96 @load_i96(ptr addrspace(8) inreg %buf) { 3051697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i96: 3052697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3053697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3054697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 3055697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3056697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3057697c1883SKrzysztof Drewniak; 3058697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i96: 3059697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3060697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3061697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 3062697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3063697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3064697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3065697c1883SKrzysztof Drewniak %ret = load i96, ptr addrspace(7) %p 3066697c1883SKrzysztof Drewniak ret i96 %ret 3067697c1883SKrzysztof Drewniak} 3068697c1883SKrzysztof Drewniak 3069697c1883SKrzysztof Drewniakdefine void @store_i96(i96 %data, ptr addrspace(8) inreg %buf) { 3070697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i96: 3071697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3072697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3073697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 3074697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3075697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3076697c1883SKrzysztof Drewniak; 3077697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i96: 3078697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3079697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3080697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 3081697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3082697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3083697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3084697c1883SKrzysztof Drewniak store i96 %data, ptr addrspace(7) %p 3085697c1883SKrzysztof Drewniak ret void 3086697c1883SKrzysztof Drewniak} 3087697c1883SKrzysztof Drewniak 3088697c1883SKrzysztof Drewniakdefine i160 @load_i160(ptr addrspace(8) inreg %buf) { 3089697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i160: 3090697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3091697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3092697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3093697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v4, off, s[16:19], 0 offset:16 3094697c1883SKrzysztof Drewniak; SDAG-NEXT: s_mov_b32 s4, s33 3095697c1883SKrzysztof Drewniak; SDAG-NEXT: s_add_i32 s33, s32, 0x7c0 3096697c1883SKrzysztof Drewniak; SDAG-NEXT: s_and_b32 s33, s33, 0xfffff800 309711b04019SAaditya; SDAG-NEXT: s_mov_b32 s5, s34 309811b04019SAaditya; SDAG-NEXT: s_mov_b32 s34, s32 3099697c1883SKrzysztof Drewniak; SDAG-NEXT: s_addk_i32 s32, 0x1800 310011b04019SAaditya; SDAG-NEXT: s_mov_b32 s32, s34 310111b04019SAaditya; SDAG-NEXT: s_mov_b32 s34, s5 3102697c1883SKrzysztof Drewniak; SDAG-NEXT: s_mov_b32 s33, s4 3103697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3104697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3105697c1883SKrzysztof Drewniak; 3106697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i160: 3107697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3108697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3109697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3110697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v4, off, s[16:19], 0 offset:16 3111697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3112697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3113697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3114697c1883SKrzysztof Drewniak %ret = load i160, ptr addrspace(7) %p 3115697c1883SKrzysztof Drewniak ret i160 %ret 3116697c1883SKrzysztof Drewniak} 3117697c1883SKrzysztof Drewniak 3118697c1883SKrzysztof Drewniakdefine void @store_i160(i160 %data, ptr addrspace(8) inreg %buf) { 3119697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i160: 3120697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3121697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3122697c1883SKrzysztof Drewniak; SDAG-NEXT: s_mov_b32 s4, s33 3123697c1883SKrzysztof Drewniak; SDAG-NEXT: s_add_i32 s33, s32, 0x7c0 3124697c1883SKrzysztof Drewniak; SDAG-NEXT: s_and_b32 s33, s33, 0xfffff800 312511b04019SAaditya; SDAG-NEXT: s_mov_b32 s5, s34 312611b04019SAaditya; SDAG-NEXT: s_mov_b32 s34, s32 3127697c1883SKrzysztof Drewniak; SDAG-NEXT: s_addk_i32 s32, 0x1000 3128697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3129697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v4, off, s[16:19], 0 offset:16 313011b04019SAaditya; SDAG-NEXT: s_mov_b32 s32, s34 313111b04019SAaditya; SDAG-NEXT: s_mov_b32 s34, s5 3132697c1883SKrzysztof Drewniak; SDAG-NEXT: s_mov_b32 s33, s4 3133697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3134697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3135697c1883SKrzysztof Drewniak; 3136697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i160: 3137697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3138697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3139697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3140697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v4, off, s[16:19], 0 offset:16 3141697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3142697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3143697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3144697c1883SKrzysztof Drewniak store i160 %data, ptr addrspace(7) %p 3145697c1883SKrzysztof Drewniak ret void 3146697c1883SKrzysztof Drewniak} 3147697c1883SKrzysztof Drewniak 3148697c1883SKrzysztof Drewniakdefine i256 @load_i256(ptr addrspace(8) inreg %buf) { 3149697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i256: 3150697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3151697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3152697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3153697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16 3154697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3155697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3156697c1883SKrzysztof Drewniak; 3157697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i256: 3158697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3159697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3160697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3161697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16 3162697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3163697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3164697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3165697c1883SKrzysztof Drewniak %ret = load i256, ptr addrspace(7) %p 3166697c1883SKrzysztof Drewniak ret i256 %ret 3167697c1883SKrzysztof Drewniak} 3168697c1883SKrzysztof Drewniak 3169697c1883SKrzysztof Drewniakdefine void @store_i256(i256 %data, ptr addrspace(8) inreg %buf) { 3170697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i256: 3171697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3172697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3173697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3174697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 3175697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3176697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3177697c1883SKrzysztof Drewniak; 3178697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i256: 3179697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3180697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3181697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3182697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16 3183697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3184697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3185697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3186697c1883SKrzysztof Drewniak store i256 %data, ptr addrspace(7) %p 3187697c1883SKrzysztof Drewniak ret void 3188697c1883SKrzysztof Drewniak} 3189697c1883SKrzysztof Drewniak 3190697c1883SKrzysztof Drewniak;;; Non-byte-sized scalars. Require zero-extension. 3191697c1883SKrzysztof Drewniak 3192697c1883SKrzysztof Drewniakdefine i7 @load_i7(ptr addrspace(8) inreg %buf) { 3193697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i7: 3194697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3195697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3196697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 3197697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3198697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3199697c1883SKrzysztof Drewniak; 3200697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i7: 3201697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3202697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3203697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 3204697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3205697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3206697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3207697c1883SKrzysztof Drewniak %ret = load i7, ptr addrspace(7) %p 3208697c1883SKrzysztof Drewniak ret i7 %ret 3209697c1883SKrzysztof Drewniak} 3210697c1883SKrzysztof Drewniak 3211697c1883SKrzysztof Drewniakdefine void @store_i7(i7 %data, ptr addrspace(8) inreg %buf) { 3212697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i7: 3213697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3214697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3215697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v0 3216697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 3217697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3218697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3219697c1883SKrzysztof Drewniak; 3220697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i7: 3221697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3222697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3223697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v0 3224697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 3225697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3226697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3227697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3228697c1883SKrzysztof Drewniak store i7 %data, ptr addrspace(7) %p 3229697c1883SKrzysztof Drewniak ret void 3230697c1883SKrzysztof Drewniak} 3231697c1883SKrzysztof Drewniak 3232697c1883SKrzysztof Drewniakdefine i4 @load_i4(ptr addrspace(8) inreg %buf) { 3233697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i4: 3234697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3235697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3236697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 3237697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3238697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3239697c1883SKrzysztof Drewniak; 3240697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i4: 3241697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3242697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3243697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 3244697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3245697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3246697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3247697c1883SKrzysztof Drewniak %ret = load i4, ptr addrspace(7) %p 3248697c1883SKrzysztof Drewniak ret i4 %ret 3249697c1883SKrzysztof Drewniak} 3250697c1883SKrzysztof Drewniak 3251697c1883SKrzysztof Drewniakdefine void @store_i4(i4 %data, ptr addrspace(8) inreg %buf) { 3252697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i4: 3253697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3254697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3255697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 15, v0 3256697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 3257697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3258697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3259697c1883SKrzysztof Drewniak; 3260697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i4: 3261697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3262697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3263697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 15, v0 3264697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 3265697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3266697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3267697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3268697c1883SKrzysztof Drewniak store i4 %data, ptr addrspace(7) %p 3269697c1883SKrzysztof Drewniak ret void 3270697c1883SKrzysztof Drewniak} 3271697c1883SKrzysztof Drewniak 3272697c1883SKrzysztof Drewniak 3273697c1883SKrzysztof Drewniak;;; Byte-sized vectors of i4. Require casts. 3274697c1883SKrzysztof Drewniak 3275697c1883SKrzysztof Drewniakdefine <2 x i4> @load_v2i4(ptr addrspace(8) inreg %buf) { 3276697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i4: 3277697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3278697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3279697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 3280697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3281697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[0:3], s32 3282697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v1, off, s[0:3], s32 3283697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3284697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 15, v1 3285697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b16_e32 v1, 4, v1 3286697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3287697c1883SKrzysztof Drewniak; 3288697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i4: 3289697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3290697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3291697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 3292697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3293697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 4, v0 3294697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3295697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3296697c1883SKrzysztof Drewniak %ret = load <2 x i4>, ptr addrspace(7) %p 3297697c1883SKrzysztof Drewniak ret <2 x i4> %ret 3298697c1883SKrzysztof Drewniak} 3299697c1883SKrzysztof Drewniak 3300697c1883SKrzysztof Drewniakdefine void @store_v2i4(<2 x i4> %data, ptr addrspace(8) inreg %buf) { 3301697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i4: 3302697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3303697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3304697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 4, v1 3305697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 15, v0 3306697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_e32 v0, v0, v1 3307697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[0:3], s32 3308697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v0, off, s[0:3], s32 3309697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3310697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 3311697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3312697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3313697c1883SKrzysztof Drewniak; 3314697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i4: 3315697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3316697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3317697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 15, v1 3318697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 15, v0 3319697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 4, v1 3320697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_e32 v0, v0, v1 3321697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 3322697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3323697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3324697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3325697c1883SKrzysztof Drewniak store <2 x i4> %data, ptr addrspace(7) %p 3326697c1883SKrzysztof Drewniak ret void 3327697c1883SKrzysztof Drewniak} 3328697c1883SKrzysztof Drewniak 3329697c1883SKrzysztof Drewniakdefine <4 x i4> @load_v4i4(ptr addrspace(8) inreg %buf) { 3330697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4i4: 3331697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3332697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3333697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0 3334697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v2, 15 3335697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3336697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[0:3], s32 3337697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v1, off, s[0:3], s32 3338697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3339697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b16_e32 v4, 4, v1 3340697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 15, v1 3341697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b16_e32 v3, 12, v1 3342697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD 3343697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v1, 15, v4 3344697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3345697c1883SKrzysztof Drewniak; 3346697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4i4: 3347697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3348697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3349697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0 3350697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3351697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 4, v0 3352697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 8, v0 3353697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 12, v0 3354697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3355697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3356697c1883SKrzysztof Drewniak %ret = load <4 x i4>, ptr addrspace(7) %p 3357697c1883SKrzysztof Drewniak ret <4 x i4> %ret 3358697c1883SKrzysztof Drewniak} 3359697c1883SKrzysztof Drewniak 3360697c1883SKrzysztof Drewniakdefine void @store_v4i4(<4 x i4> %data, ptr addrspace(8) inreg %buf) { 3361697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4i4: 3362697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3363697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3364697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v1, 15, v1 3365697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 15, v0 3366697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 4, v1 3367697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_e32 v0, v0, v1 3368697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v1, 15 3369697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_sdwa v1, v2, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 3370697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_e32 v0, v0, v1 3371697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 12, v3 3372697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_e32 v0, v0, v1 3373697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 3374697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3375697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3376697c1883SKrzysztof Drewniak; 3377697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4i4: 3378697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3379697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3380697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 15, v1 3381697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 15, v0 3382697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 4, v1 3383697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_e32 v0, v0, v1 3384697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v1, 15 3385697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_sdwa v1, v2, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 3386697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_e32 v0, v0, v1 3387697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 15, v3 3388697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 12, v1 3389697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_e32 v0, v0, v1 3390697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 3391697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3392697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3393697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3394697c1883SKrzysztof Drewniak store <4 x i4> %data, ptr addrspace(7) %p 3395697c1883SKrzysztof Drewniak ret void 3396697c1883SKrzysztof Drewniak} 3397697c1883SKrzysztof Drewniak 3398697c1883SKrzysztof Drewniakdefine <8 x i4> @load_v8i4(ptr addrspace(8) inreg %buf) { 3399697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8i4: 3400697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3401697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3402697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v7, off, s[16:19], 0 3403697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3404697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 15, v7 3405697c1883SKrzysztof Drewniak; SDAG-NEXT: v_bfe_u32 v1, v7, 4, 4 3406697c1883SKrzysztof Drewniak; SDAG-NEXT: v_bfe_u32 v2, v7, 8, 4 3407697c1883SKrzysztof Drewniak; SDAG-NEXT: v_bfe_u32 v3, v7, 12, 4 3408697c1883SKrzysztof Drewniak; SDAG-NEXT: v_bfe_u32 v4, v7, 16, 4 3409697c1883SKrzysztof Drewniak; SDAG-NEXT: v_bfe_u32 v5, v7, 20, 4 3410697c1883SKrzysztof Drewniak; SDAG-NEXT: v_bfe_u32 v6, v7, 24, 4 3411697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v7, 28, v7 3412697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3413697c1883SKrzysztof Drewniak; 3414697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8i4: 3415697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3416697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3417697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 3418697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3419697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 4, v0 3420697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 8, v0 3421697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 12, v0 3422697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v4, 16, v0 3423697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v5, 20, v0 3424697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v6, 24, v0 3425697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v7, 28, v0 3426697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3427697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3428697c1883SKrzysztof Drewniak %ret = load <8 x i4>, ptr addrspace(7) %p 3429697c1883SKrzysztof Drewniak ret <8 x i4> %ret 3430697c1883SKrzysztof Drewniak} 3431697c1883SKrzysztof Drewniak 3432697c1883SKrzysztof Drewniakdefine void @store_v8i4(<8 x i4> %data, ptr addrspace(8) inreg %buf) { 3433697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8i4: 3434697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3435697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3436697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v1, 15, v1 3437697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b32_e32 v1, 4, v1 3438697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_or_b32 v0, v0, 15, v1 3439697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v1, 15, v3 3440697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v2, 15, v2 3441697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b32_e32 v1, 12, v1 3442697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2 3443697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or3_b32 v0, v0, v2, v1 3444697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v1, 15, v5 3445697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v2, 15 3446697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b32_e32 v1, 20, v1 3447697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_sdwa v3, v4, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 3448697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or3_b32 v0, v0, v3, v1 3449697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b32_e32 v1, 28, v7 3450697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_sdwa v2, v6, v2 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 3451697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or3_b32 v0, v0, v2, v1 3452697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 3453697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3454697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3455697c1883SKrzysztof Drewniak; 3456697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8i4: 3457697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3458697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3459697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 15, v1 3460697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 4, v1 3461697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, 15, v1 3462697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 15, v2 3463697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 15, v3 3464697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 8, v1 3465697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 12, v2 3466697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 3467697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v1, 15 3468697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v3, 15, v5 3469697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_sdwa v2, v4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 3470697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v3, 20, v3 3471697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v2, v3 3472697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 15, v7 3473697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_sdwa v1, v6, v1 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 3474697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 28, v2 3475697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 3476697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 3477697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3478697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3479697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3480697c1883SKrzysztof Drewniak store <8 x i4> %data, ptr addrspace(7) %p 3481697c1883SKrzysztof Drewniak ret void 3482697c1883SKrzysztof Drewniak} 3483697c1883SKrzysztof Drewniak 3484697c1883SKrzysztof Drewniak;;; Vectors of non-byte-sized integers. 3485697c1883SKrzysztof Drewniak 3486697c1883SKrzysztof Drewniakdefine <2 x i6> @load_v2i6(ptr addrspace(8) inreg %buf) { 3487697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i6: 3488697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3489697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3490697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v1, off, s[16:19], 0 3491697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3492697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 63, v1 3493697c1883SKrzysztof Drewniak; SDAG-NEXT: v_bfe_u32 v1, v1, 6, 6 3494697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3495697c1883SKrzysztof Drewniak; 3496697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i6: 3497697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3498697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3499697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0 3500697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3501697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b16_e32 v1, 6, v0 3502697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3503697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3504697c1883SKrzysztof Drewniak %ret = load <2 x i6>, ptr addrspace(7) %p 3505697c1883SKrzysztof Drewniak ret <2 x i6> %ret 3506697c1883SKrzysztof Drewniak} 3507697c1883SKrzysztof Drewniak 3508697c1883SKrzysztof Drewniakdefine void @store_v2i6(<2 x i6> %data, ptr addrspace(8) inreg %buf) { 3509697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i6: 3510697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3511697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3512697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 6, v1 3513697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 63, v0 3514697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_e32 v0, v0, v1 3515697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 0xfff, v0 3516697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 0xffff, v0 3517697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 3518697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3519697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3520697c1883SKrzysztof Drewniak; 3521697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i6: 3522697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3523697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3524697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 63, v1 3525697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 63, v0 3526697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 6, v1 3527697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_e32 v0, v0, v1 3528697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0xfff, v0 3529697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 3530697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3531697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3532697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3533697c1883SKrzysztof Drewniak store <2 x i6> %data, ptr addrspace(7) %p 3534697c1883SKrzysztof Drewniak ret void 3535697c1883SKrzysztof Drewniak} 3536697c1883SKrzysztof Drewniak 3537697c1883SKrzysztof Drewniak;; Blocks of fp6 elements 3538697c1883SKrzysztof Drewniakdefine <6 x i32> @load_v32i6(ptr addrspace(8) inreg %buf) { 3539697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v32i6: 3540697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3541697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3542697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3543697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16 3544697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3545697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3546697c1883SKrzysztof Drewniak; 3547697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v32i6: 3548697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3549697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3550697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3551697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16 3552697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3553697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3554697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3555697c1883SKrzysztof Drewniak %ret = load <32 x i6>, ptr addrspace(7) %p 3556697c1883SKrzysztof Drewniak %ret.cast = bitcast <32 x i6> %ret to <6 x i32> 3557697c1883SKrzysztof Drewniak ret <6 x i32> %ret.cast 3558697c1883SKrzysztof Drewniak} 3559697c1883SKrzysztof Drewniak 3560697c1883SKrzysztof Drewniakdefine void @store_v32i6(<6 x i32> %data.abi, ptr addrspace(8) inreg %buf) { 3561697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v32i6: 3562697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3563697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3564697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3565697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16 3566697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3567697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3568697c1883SKrzysztof Drewniak; 3569697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v32i6: 3570697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3571697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3572697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3573697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16 3574697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3575697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3576697c1883SKrzysztof Drewniak %data = bitcast <6 x i32> %data.abi to <32 x i6> 3577697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3578697c1883SKrzysztof Drewniak store <32 x i6> %data, ptr addrspace(7) %p 3579697c1883SKrzysztof Drewniak ret void 3580697c1883SKrzysztof Drewniak} 3581697c1883SKrzysztof Drewniak 3582697c1883SKrzysztof Drewniak;;; Modifiers 3583697c1883SKrzysztof Drewniak 3584697c1883SKrzysztof Drewniakdefine <4 x i8> @volatile_load_v4i8(ptr addrspace(8) inreg %buf) { 3585697c1883SKrzysztof Drewniak; SDAG-LABEL: volatile_load_v4i8: 3586697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3587697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3588697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 glc 3589697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3590697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 3591697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0 3592697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v3, 24, v0 3593697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3594697c1883SKrzysztof Drewniak; 3595697c1883SKrzysztof Drewniak; GISEL-LABEL: volatile_load_v4i8: 3596697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3597697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3598697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 glc 3599697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3600697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0 3601697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 3602697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0 3603697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3604697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3605697c1883SKrzysztof Drewniak %ret = load volatile <4 x i8>, ptr addrspace(7) %p 3606697c1883SKrzysztof Drewniak ret <4 x i8> %ret 3607697c1883SKrzysztof Drewniak} 3608697c1883SKrzysztof Drewniak 3609697c1883SKrzysztof Drewniakdefine void @volatile_store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) { 3610697c1883SKrzysztof Drewniak; SDAG-LABEL: volatile_store_v4i8: 3611697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3612697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3613697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 3614697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3615697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 3616697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3617697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 3618697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 3619697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3620697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3621697c1883SKrzysztof Drewniak; 3622697c1883SKrzysztof Drewniak; GISEL-LABEL: volatile_store_v4i8: 3623697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3624697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3625697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v5, 8 3626697c1883SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v4, 0xff 3627697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 3628697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_or_b32 v0, v0, v4, v1 3629697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2 3630697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3 3631697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 3632697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 3633697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2 3634697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 3635697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3636697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3637697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3638697c1883SKrzysztof Drewniak store volatile <4 x i8> %data, ptr addrspace(7) %p 3639697c1883SKrzysztof Drewniak ret void 3640697c1883SKrzysztof Drewniak} 3641697c1883SKrzysztof Drewniak 3642697c1883SKrzysztof Drewniakdefine <6 x i8> @volatile_load_v6i8(ptr addrspace(8) inreg %buf) { 3643697c1883SKrzysztof Drewniak; SDAG-LABEL: volatile_load_v6i8: 3644697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3645697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3646697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 glc 3647697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ushort v6, off, s[16:19], 0 offset:4 glc 3648697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(1) 3649697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v7, 8, v0 3650697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3651697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v1, 0xffff, v6 3652697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[0:1] 3653697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 3654697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1 3655697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v4, v6 3656697c1883SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v1, v7 3657697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3658697c1883SKrzysztof Drewniak; 3659697c1883SKrzysztof Drewniak; GISEL-LABEL: volatile_load_v6i8: 3660697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3661697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3662697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 glc 3663697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:4 glc 3664697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(1) 3665697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 3666697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0 3667697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0 3668697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3669697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v4 3670697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3671697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3672697c1883SKrzysztof Drewniak %ret = load volatile <6 x i8>, ptr addrspace(7) %p 3673697c1883SKrzysztof Drewniak ret <6 x i8> %ret 3674697c1883SKrzysztof Drewniak} 3675697c1883SKrzysztof Drewniak 3676697c1883SKrzysztof Drewniakdefine void @volatile_store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) { 3677697c1883SKrzysztof Drewniak; SDAG-LABEL: volatile_store_v6i8: 3678697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3679697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3680697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1 3681697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3682697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3 3683697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3684697c1883SKrzysztof Drewniak; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5 3685697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 3686697c1883SKrzysztof Drewniak; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3687697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 3688697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_short v4, off, s[16:19], 0 offset:4 3689697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3690697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3691697c1883SKrzysztof Drewniak; 3692697c1883SKrzysztof Drewniak; GISEL-LABEL: volatile_store_v6i8: 3693697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3694697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3695697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1 3696697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1 3697697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3698697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v3 3699697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1 3700697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3701697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v5 3702697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0 3703697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshlrev_b16_e32 v2, 8, v2 3704697c1883SKrzysztof Drewniak; GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0 3705697c1883SKrzysztof Drewniak; GISEL-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3706697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 3707697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_short v2, off, s[16:19], 0 offset:4 3708697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3709697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3710697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3711697c1883SKrzysztof Drewniak store volatile <6 x i8> %data, ptr addrspace(7) %p 3712697c1883SKrzysztof Drewniak ret void 3713697c1883SKrzysztof Drewniak} 3714697c1883SKrzysztof Drewniak 3715697c1883SKrzysztof Drewniakdefine [2 x [2 x i32]] @load_a2a2i32(ptr addrspace(8) inreg %buf) { 3716697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2a2i32: 3717697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3718697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3719697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3720697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3721697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3722697c1883SKrzysztof Drewniak; 3723697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2a2i32: 3724697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3725697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3726697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3727697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3728697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3729697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3730697c1883SKrzysztof Drewniak %ret = load [2 x [2 x i32]], ptr addrspace(7) %p 3731697c1883SKrzysztof Drewniak ret [2 x [2 x i32]] %ret 3732697c1883SKrzysztof Drewniak} 3733697c1883SKrzysztof Drewniak 3734697c1883SKrzysztof Drewniakdefine void @store_a2a2i32([2 x [2 x i32]] %data, ptr addrspace(8) inreg %buf) { 3735697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2a2i32: 3736697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3737697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3738697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3739697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3740697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3741697c1883SKrzysztof Drewniak; 3742697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2a2i32: 3743697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3744697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3745697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3746697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3747697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3748697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3749697c1883SKrzysztof Drewniak store [2 x [2 x i32]] %data, ptr addrspace(7) %p 3750697c1883SKrzysztof Drewniak ret void 3751697c1883SKrzysztof Drewniak} 3752697c1883SKrzysztof Drewniak 3753697c1883SKrzysztof Drewniakdefine [2 x <2 x i32>] @load_a2v2i32(ptr addrspace(8) inreg %buf) { 3754697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2v2i32: 3755697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3756697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3757697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3758697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3759697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3760697c1883SKrzysztof Drewniak; 3761697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2v2i32: 3762697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3763697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3764697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0 3765697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3766697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3767697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3768697c1883SKrzysztof Drewniak %ret = load [2 x <2 x i32>], ptr addrspace(7) %p 3769697c1883SKrzysztof Drewniak ret [2 x <2 x i32>] %ret 3770697c1883SKrzysztof Drewniak} 3771697c1883SKrzysztof Drewniak 3772697c1883SKrzysztof Drewniakdefine void @store_a2v2i32([2 x <2 x i32>] %data, ptr addrspace(8) inreg %buf) { 3773697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2v2i32: 3774697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3775697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3776697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3777697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3778697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3779697c1883SKrzysztof Drewniak; 3780697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2v2i32: 3781697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3782697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3783697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0 3784697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3785697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3786697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3787697c1883SKrzysztof Drewniak store [2 x <2 x i32>] %data, ptr addrspace(7) %p 3788697c1883SKrzysztof Drewniak ret void 3789697c1883SKrzysztof Drewniak} 3790697c1883SKrzysztof Drewniak 3791697c1883SKrzysztof Drewniakdefine { i32 } @load_sl_i32s(ptr addrspace(8) inreg %buf) { 3792697c1883SKrzysztof Drewniak; SDAG-LABEL: load_sl_i32s: 3793697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3794697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3795697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 3796697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3797697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3798697c1883SKrzysztof Drewniak; 3799697c1883SKrzysztof Drewniak; GISEL-LABEL: load_sl_i32s: 3800697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3801697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3802697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 3803697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3804697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3805697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3806697c1883SKrzysztof Drewniak %ret = load { i32 }, ptr addrspace(7) %p 3807697c1883SKrzysztof Drewniak ret { i32 } %ret 3808697c1883SKrzysztof Drewniak} 3809697c1883SKrzysztof Drewniak 3810697c1883SKrzysztof Drewniakdefine void @store_sl_i32s({ i32 } %data, ptr addrspace(8) inreg %buf) { 3811697c1883SKrzysztof Drewniak; SDAG-LABEL: store_sl_i32s: 3812697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3813697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3814697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 3815697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3816697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3817697c1883SKrzysztof Drewniak; 3818697c1883SKrzysztof Drewniak; GISEL-LABEL: store_sl_i32s: 3819697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3820697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3821697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 3822697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3823697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3824697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3825697c1883SKrzysztof Drewniak store { i32 } %data, ptr addrspace(7) %p 3826697c1883SKrzysztof Drewniak ret void 3827697c1883SKrzysztof Drewniak} 3828697c1883SKrzysztof Drewniak 3829697c1883SKrzysztof Drewniakdefine { { float } } @load_sl_sl_f32ss(ptr addrspace(8) inreg %buf) { 3830697c1883SKrzysztof Drewniak; SDAG-LABEL: load_sl_sl_f32ss: 3831697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3832697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3833697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 3834697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3835697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3836697c1883SKrzysztof Drewniak; 3837697c1883SKrzysztof Drewniak; GISEL-LABEL: load_sl_sl_f32ss: 3838697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3839697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3840697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 3841697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3842697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3843697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3844697c1883SKrzysztof Drewniak %ret = load { { float } }, ptr addrspace(7) %p 3845697c1883SKrzysztof Drewniak ret { { float } } %ret 3846697c1883SKrzysztof Drewniak} 3847697c1883SKrzysztof Drewniak 3848697c1883SKrzysztof Drewniakdefine void @store_sl_sl_f32ss({ { float } } %data, ptr addrspace(8) inreg %buf) { 3849697c1883SKrzysztof Drewniak; SDAG-LABEL: store_sl_sl_f32ss: 3850697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3851697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3852697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0 3853697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3854697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3855697c1883SKrzysztof Drewniak; 3856697c1883SKrzysztof Drewniak; GISEL-LABEL: store_sl_sl_f32ss: 3857697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3858697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3859697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0 3860697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3861697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3862697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3863697c1883SKrzysztof Drewniak store { { float } } %data, ptr addrspace(7) %p 3864697c1883SKrzysztof Drewniak ret void 3865697c1883SKrzysztof Drewniak} 3866697c1883SKrzysztof Drewniak 3867697c1883SKrzysztof Drewniakdefine { <2 x i32> } @load_sl_v2i32s(ptr addrspace(8) inreg %buf) { 3868697c1883SKrzysztof Drewniak; SDAG-LABEL: load_sl_v2i32s: 3869697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3870697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3871697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 3872697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3873697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3874697c1883SKrzysztof Drewniak; 3875697c1883SKrzysztof Drewniak; GISEL-LABEL: load_sl_v2i32s: 3876697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3877697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3878697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0 3879697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3880697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3881697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3882697c1883SKrzysztof Drewniak %ret = load { <2 x i32> }, ptr addrspace(7) %p 3883697c1883SKrzysztof Drewniak ret { <2 x i32> } %ret 3884697c1883SKrzysztof Drewniak} 3885697c1883SKrzysztof Drewniak 3886697c1883SKrzysztof Drewniakdefine void @store_sl_v2i32s({ <2 x i32> } %data, ptr addrspace(8) inreg %buf) { 3887697c1883SKrzysztof Drewniak; SDAG-LABEL: store_sl_v2i32s: 3888697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3889697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3890697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 3891697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3892697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3893697c1883SKrzysztof Drewniak; 3894697c1883SKrzysztof Drewniak; GISEL-LABEL: store_sl_v2i32s: 3895697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3896697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3897697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0 3898697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3899697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3900697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3901697c1883SKrzysztof Drewniak store { <2 x i32> } %data, ptr addrspace(7) %p 3902697c1883SKrzysztof Drewniak ret void 3903697c1883SKrzysztof Drewniak} 3904697c1883SKrzysztof Drewniak 3905697c1883SKrzysztof Drewniakdefine { i64, i32 } @load_sl_i64i32s(ptr addrspace(8) inreg %buf) { 3906697c1883SKrzysztof Drewniak; SDAG-LABEL: load_sl_i64i32s: 3907697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3908697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3909697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 3910697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3911697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3912697c1883SKrzysztof Drewniak; 3913697c1883SKrzysztof Drewniak; GISEL-LABEL: load_sl_i64i32s: 3914697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3915697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3916697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0 3917697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3918697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3919697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3920697c1883SKrzysztof Drewniak %ret = load { i64, i32 }, ptr addrspace(7) %p 3921697c1883SKrzysztof Drewniak ret { i64, i32 } %ret 3922697c1883SKrzysztof Drewniak} 3923697c1883SKrzysztof Drewniak 3924697c1883SKrzysztof Drewniakdefine void @store_sl_i64i32s({ i64, i32 } %data, ptr addrspace(8) inreg %buf) { 3925697c1883SKrzysztof Drewniak; SDAG-LABEL: store_sl_i64i32s: 3926697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3927697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3928697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 3929697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3930697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3931697c1883SKrzysztof Drewniak; 3932697c1883SKrzysztof Drewniak; GISEL-LABEL: store_sl_i64i32s: 3933697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3934697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3935697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0 3936697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3937697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3938697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3939697c1883SKrzysztof Drewniak store { i64, i32 } %data, ptr addrspace(7) %p 3940697c1883SKrzysztof Drewniak ret void 3941697c1883SKrzysztof Drewniak} 3942697c1883SKrzysztof Drewniak 3943697c1883SKrzysztof Drewniakdefine [4 x i7] @load_a4i7(ptr addrspace(8) inreg %buf) { 3944697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a4i7: 3945697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3946697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3947697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 3948697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v1, off, s[16:19], 0 offset:1 3949697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v2, off, s[16:19], 0 offset:2 3950697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_load_ubyte v3, off, s[16:19], 0 offset:3 3951697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3952697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3953697c1883SKrzysztof Drewniak; 3954697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a4i7: 3955697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3956697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3957697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0 3958697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v1, off, s[16:19], 0 offset:1 3959697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v2, off, s[16:19], 0 offset:2 3960697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_load_ubyte v3, off, s[16:19], 0 offset:3 3961697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3962697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3963697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3964697c1883SKrzysztof Drewniak %ret = load [4 x i7], ptr addrspace(7) %p 3965697c1883SKrzysztof Drewniak ret [4 x i7] %ret 3966697c1883SKrzysztof Drewniak} 3967697c1883SKrzysztof Drewniak 3968697c1883SKrzysztof Drewniakdefine void @store_a4i7([4 x i7] %data, ptr addrspace(8) inreg %buf) { 3969697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a4i7: 3970697c1883SKrzysztof Drewniak; SDAG: ; %bb.0: 3971697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3972697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v0 3973697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 3974697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v1 3975697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:1 3976697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v2 3977697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:2 3978697c1883SKrzysztof Drewniak; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v3 3979697c1883SKrzysztof Drewniak; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:3 3980697c1883SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 3981697c1883SKrzysztof Drewniak; SDAG-NEXT: s_setpc_b64 s[30:31] 3982697c1883SKrzysztof Drewniak; 3983697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a4i7: 3984697c1883SKrzysztof Drewniak; GISEL: ; %bb.0: 3985697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3986697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v0 3987697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 3988697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v1 3989697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:1 3990697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v2 3991697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:2 3992697c1883SKrzysztof Drewniak; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v3 3993697c1883SKrzysztof Drewniak; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:3 3994697c1883SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 3995697c1883SKrzysztof Drewniak; GISEL-NEXT: s_setpc_b64 s[30:31] 3996697c1883SKrzysztof Drewniak %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7) 3997697c1883SKrzysztof Drewniak store [4 x i7] %data, ptr addrspace(7) %p 3998697c1883SKrzysztof Drewniak ret void 3999697c1883SKrzysztof Drewniak} 4000