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{{$}} 8 define 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 43 define 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 52 define 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 87 define 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 95 define 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 104 define 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 114 define 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 124 define 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