1; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI %s 2; RUN: llc -march=amdgcn -mcpu=bonaire -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=CI %s 3; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s 4 5; GCN-LABEL: {{^}}global_store_v3i64: 6; GCN-DAG: buffer_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, off, s{{\[[0-9]+:[0-9]+\]}}, 0 offset:16 7; GCN-DAG: buffer_store_dwordx4 v{{\[[0-9]+:[0-9]+\]}}, off, s{{\[[0-9]+:[0-9]+\]}}, 0{{$}} 8define void @global_store_v3i64(<3 x i64> addrspace(1)* %out, <3 x i64> %x) { 9 store <3 x i64> %x, <3 x i64> addrspace(1)* %out, align 32 10 ret void 11} 12 13; GCN-LABEL: {{^}}global_store_v3i64_unaligned: 14; GCN: buffer_store_byte 15; GCN: buffer_store_byte 16; GCN: buffer_store_byte 17; GCN: buffer_store_byte 18 19; GCN: buffer_store_byte 20; GCN: buffer_store_byte 21; GCN: buffer_store_byte 22; GCN: buffer_store_byte 23 24; GCN: buffer_store_byte 25; GCN: buffer_store_byte 26; GCN: buffer_store_byte 27; GCN: buffer_store_byte 28 29; GCN: buffer_store_byte 30; GCN: buffer_store_byte 31; GCN: buffer_store_byte 32; GCN: buffer_store_byte 33 34; GCN: buffer_store_byte 35; GCN: buffer_store_byte 36; GCN: buffer_store_byte 37; GCN: buffer_store_byte 38 39; GCN: buffer_store_byte 40; GCN: buffer_store_byte 41; GCN: buffer_store_byte 42; GCN: buffer_store_byte 43define void @global_store_v3i64_unaligned(<3 x i64> addrspace(1)* %out, <3 x i64> %x) { 44 store <3 x i64> %x, <3 x i64> addrspace(1)* %out, align 1 45 ret void 46} 47 48; GCN-LABEL: {{^}}local_store_v3i64: 49; GCN: ds_write_b64 50; GCN: ds_write_b64 51; GCN: ds_write_b64 52define void @local_store_v3i64(<3 x i64> addrspace(3)* %out, <3 x i64> %x) { 53 store <3 x i64> %x, <3 x i64> addrspace(3)* %out, align 32 54 ret void 55} 56 57; GCN-LABEL: {{^}}local_store_v3i64_unaligned: 58; GCN: ds_write_b8 59; GCN: ds_write_b8 60; GCN: ds_write_b8 61; GCN: ds_write_b8 62 63; GCN: ds_write_b8 64; GCN: ds_write_b8 65; GCN: ds_write_b8 66; GCN: ds_write_b8 67 68; GCN: ds_write_b8 69; GCN: ds_write_b8 70; GCN: ds_write_b8 71; GCN: ds_write_b8 72 73; GCN: ds_write_b8 74; GCN: ds_write_b8 75; GCN: ds_write_b8 76; GCN: ds_write_b8 77 78; GCN: ds_write_b8 79; GCN: ds_write_b8 80; GCN: ds_write_b8 81; GCN: ds_write_b8 82 83; GCN: ds_write_b8 84; GCN: ds_write_b8 85; GCN: ds_write_b8 86; GCN: ds_write_b8 87define void @local_store_v3i64_unaligned(<3 x i64> addrspace(3)* %out, <3 x i64> %x) { 88 store <3 x i64> %x, <3 x i64> addrspace(3)* %out, align 1 89 ret void 90} 91 92; GCN-LABEL: {{^}}global_truncstore_v3i64_to_v3i32: 93; GCN-DAG: buffer_store_dwordx2 94; GCN-DAG: buffer_store_dword v 95define void @global_truncstore_v3i64_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i64> %x) { 96 %trunc = trunc <3 x i64> %x to <3 x i32> 97 store <3 x i32> %trunc, <3 x i32> addrspace(1)* %out 98 ret void 99} 100 101; GCN-LABEL: {{^}}global_truncstore_v3i64_to_v3i16: 102; GCN-DAG: buffer_store_short 103; GCN-DAG: buffer_store_dword v 104define void @global_truncstore_v3i64_to_v3i16(<3 x i16> addrspace(1)* %out, <3 x i64> %x) { 105 %trunc = trunc <3 x i64> %x to <3 x i16> 106 store <3 x i16> %trunc, <3 x i16> addrspace(1)* %out 107 ret void 108} 109 110 111; GCN-LABEL: {{^}}global_truncstore_v3i64_to_v3i8: 112; GCN-DAG: buffer_store_short 113; GCN-DAG: buffer_store_byte v 114define void @global_truncstore_v3i64_to_v3i8(<3 x i8> addrspace(1)* %out, <3 x i64> %x) { 115 %trunc = trunc <3 x i64> %x to <3 x i8> 116 store <3 x i8> %trunc, <3 x i8> addrspace(1)* %out 117 ret void 118} 119 120; GCN-LABEL: {{^}}global_truncstore_v3i64_to_v3i1: 121; GCN-DAG: buffer_store_byte v 122; GCN-DAG: buffer_store_byte v 123; GCN-DAG: buffer_store_byte v 124define void @global_truncstore_v3i64_to_v3i1(<3 x i1> addrspace(1)* %out, <3 x i64> %x) { 125 %trunc = trunc <3 x i64> %x to <3 x i1> 126 store <3 x i1> %trunc, <3 x i1> addrspace(1)* %out 127 ret void 128} 129