1; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s 2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s 3; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 4; RUN: llc -march=r600 -mcpu=cayman < %s | FileCheck -check-prefix=CM -check-prefix=FUNC %s 5 6; FUNC-LABEL: {{^}}store_local_i1: 7; EG: LDS_BYTE_WRITE 8 9; CM: LDS_BYTE_WRITE 10 11; GCN: ds_write_b8 12define void @store_local_i1(i1 addrspace(3)* %out) { 13entry: 14 store i1 true, i1 addrspace(3)* %out 15 ret void 16} 17 18; FUNC-LABEL: {{^}}store_local_i8: 19; EG: LDS_BYTE_WRITE 20 21; CM: LDS_BYTE_WRITE 22 23; GCN: ds_write_b8 24define void @store_local_i8(i8 addrspace(3)* %out, i8 %in) { 25 store i8 %in, i8 addrspace(3)* %out 26 ret void 27} 28 29; FUNC-LABEL: {{^}}store_local_i16: 30; EG: LDS_SHORT_WRITE 31 32; CM: LDS_SHORT_WRITE 33 34; GCN: ds_write_b16 35define void @store_local_i16(i16 addrspace(3)* %out, i16 %in) { 36 store i16 %in, i16 addrspace(3)* %out 37 ret void 38} 39 40; FUNC-LABEL: {{^}}store_local_v2i16: 41; EG: LDS_WRITE 42 43; CM: LDS_WRITE 44 45; GCN: ds_write_b32 46define void @store_local_v2i16(<2 x i16> addrspace(3)* %out, <2 x i16> %in) { 47entry: 48 store <2 x i16> %in, <2 x i16> addrspace(3)* %out 49 ret void 50} 51 52; FUNC-LABEL: {{^}}store_local_v4i8: 53; EG: LDS_WRITE 54 55; CM: LDS_WRITE 56 57; GCN: ds_write_b32 58define void @store_local_v4i8(<4 x i8> addrspace(3)* %out, <4 x i8> %in) { 59entry: 60 store <4 x i8> %in, <4 x i8> addrspace(3)* %out 61 ret void 62} 63 64; FUNC-LABEL: {{^}}store_local_v4i8_unaligned: 65; EG: LDS_BYTE_WRITE 66; EG: LDS_BYTE_WRITE 67; EG: LDS_BYTE_WRITE 68; EG: LDS_BYTE_WRITE 69; EG-NOT: LDS_WRITE 70 71; CM: LDS_BYTE_WRITE 72; CM: LDS_BYTE_WRITE 73; CM: LDS_BYTE_WRITE 74; CM: LDS_BYTE_WRITE 75; CM-NOT: LDS_WRITE 76 77; GCN: ds_write_b8 78; GCN: ds_write_b8 79; GCN: ds_write_b8 80; GCN: ds_write_b8 81define void @store_local_v4i8_unaligned(<4 x i8> addrspace(3)* %out, <4 x i8> %in) { 82entry: 83 store <4 x i8> %in, <4 x i8> addrspace(3)* %out, align 1 84 ret void 85} 86 87; FUNC-LABEL: {{^}}store_local_v4i8_halfaligned: 88; EG: LDS_SHORT_WRITE 89; EG: LDS_SHORT_WRITE 90; EG-NOT: LDS_WRITE 91 92; CM: LDS_SHORT_WRITE 93; CM: LDS_SHORT_WRITE 94; CM-NOT: LDS_WRITE 95 96; GCN: ds_write_b16 97; GCN: ds_write_b16 98define void @store_local_v4i8_halfaligned(<4 x i8> addrspace(3)* %out, <4 x i8> %in) { 99entry: 100 store <4 x i8> %in, <4 x i8> addrspace(3)* %out, align 2 101 ret void 102} 103 104; FUNC-LABEL: {{^}}store_local_v2i32: 105; EG: LDS_WRITE 106; EG: LDS_WRITE 107; EG-NOT: LDS_WRITE 108 109; CM: LDS_WRITE 110; CM: LDS_WRITE 111; CM-NOT: LDS_WRITE 112 113; GCN: ds_write_b64 114define void @store_local_v2i32(<2 x i32> addrspace(3)* %out, <2 x i32> %in) { 115entry: 116 store <2 x i32> %in, <2 x i32> addrspace(3)* %out 117 ret void 118} 119 120; FUNC-LABEL: {{^}}store_local_v4i32: 121; EG: LDS_WRITE 122; EG: LDS_WRITE 123; EG: LDS_WRITE 124; EG: LDS_WRITE 125 126; CM: LDS_WRITE 127; CM: LDS_WRITE 128; CM: LDS_WRITE 129; CM: LDS_WRITE 130 131; GCN: ds_write2_b64 132define void @store_local_v4i32(<4 x i32> addrspace(3)* %out, <4 x i32> %in) { 133entry: 134 store <4 x i32> %in, <4 x i32> addrspace(3)* %out 135 ret void 136} 137 138; FUNC-LABEL: {{^}}store_local_v4i32_align4: 139; EG: LDS_WRITE 140; EG: LDS_WRITE 141; EG: LDS_WRITE 142; EG: LDS_WRITE 143 144; CM: LDS_WRITE 145; CM: LDS_WRITE 146; CM: LDS_WRITE 147; CM: LDS_WRITE 148 149; GCN: ds_write2_b32 150; GCN: ds_write2_b32 151define void @store_local_v4i32_align4(<4 x i32> addrspace(3)* %out, <4 x i32> %in) { 152entry: 153 store <4 x i32> %in, <4 x i32> addrspace(3)* %out, align 4 154 ret void 155} 156 157; FUNC-LABEL: {{^}}store_local_i64_i8: 158; EG: LDS_BYTE_WRITE 159; GCN: ds_write_b8 160define void @store_local_i64_i8(i8 addrspace(3)* %out, i64 %in) { 161entry: 162 %0 = trunc i64 %in to i8 163 store i8 %0, i8 addrspace(3)* %out 164 ret void 165} 166 167; FUNC-LABEL: {{^}}store_local_i64_i16: 168; EG: LDS_SHORT_WRITE 169; GCN: ds_write_b16 170define void @store_local_i64_i16(i16 addrspace(3)* %out, i64 %in) { 171entry: 172 %0 = trunc i64 %in to i16 173 store i16 %0, i16 addrspace(3)* %out 174 ret void 175} 176