303 lines · plain
1; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s2; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s3; XUN: llc -mtriple=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s4; FIXME: cypress is broken because the bigger testcases spill and it's not implemented5 6; FUNC-LABEL: {{^}}zextload_global_i16_to_i32:7; SI: buffer_load_ushort8; SI: buffer_store_dword9; SI: s_endpgm10define amdgpu_kernel void @zextload_global_i16_to_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {11 %a = load i16, ptr addrspace(1) %in12 %ext = zext i16 %a to i3213 store i32 %ext, ptr addrspace(1) %out14 ret void15}16 17; FUNC-LABEL: {{^}}sextload_global_i16_to_i32:18; SI: buffer_load_sshort19; SI: buffer_store_dword20; SI: s_endpgm21define amdgpu_kernel void @sextload_global_i16_to_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {22 %a = load i16, ptr addrspace(1) %in23 %ext = sext i16 %a to i3224 store i32 %ext, ptr addrspace(1) %out25 ret void26}27 28; FUNC-LABEL: {{^}}zextload_global_v1i16_to_v1i32:29; SI: buffer_load_ushort30; SI: s_endpgm31define amdgpu_kernel void @zextload_global_v1i16_to_v1i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {32 %load = load <1 x i16>, ptr addrspace(1) %in33 %ext = zext <1 x i16> %load to <1 x i32>34 store <1 x i32> %ext, ptr addrspace(1) %out35 ret void36}37 38; FUNC-LABEL: {{^}}sextload_global_v1i16_to_v1i32:39; SI: buffer_load_sshort40; SI: s_endpgm41define amdgpu_kernel void @sextload_global_v1i16_to_v1i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {42 %load = load <1 x i16>, ptr addrspace(1) %in43 %ext = sext <1 x i16> %load to <1 x i32>44 store <1 x i32> %ext, ptr addrspace(1) %out45 ret void46}47 48; FUNC-LABEL: {{^}}zextload_global_v2i16_to_v2i32:49; SI: s_endpgm50define amdgpu_kernel void @zextload_global_v2i16_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {51 %load = load <2 x i16>, ptr addrspace(1) %in52 %ext = zext <2 x i16> %load to <2 x i32>53 store <2 x i32> %ext, ptr addrspace(1) %out54 ret void55}56 57; FUNC-LABEL: {{^}}sextload_global_v2i16_to_v2i32:58; SI: s_endpgm59define amdgpu_kernel void @sextload_global_v2i16_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {60 %load = load <2 x i16>, ptr addrspace(1) %in61 %ext = sext <2 x i16> %load to <2 x i32>62 store <2 x i32> %ext, ptr addrspace(1) %out63 ret void64}65 66; FUNC-LABEL: {{^}}zextload_global_v4i16_to_v4i32:67; SI: s_endpgm68define amdgpu_kernel void @zextload_global_v4i16_to_v4i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {69 %load = load <4 x i16>, ptr addrspace(1) %in70 %ext = zext <4 x i16> %load to <4 x i32>71 store <4 x i32> %ext, ptr addrspace(1) %out72 ret void73}74 75; FUNC-LABEL: {{^}}sextload_global_v4i16_to_v4i32:76; SI: s_endpgm77define amdgpu_kernel void @sextload_global_v4i16_to_v4i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {78 %load = load <4 x i16>, ptr addrspace(1) %in79 %ext = sext <4 x i16> %load to <4 x i32>80 store <4 x i32> %ext, ptr addrspace(1) %out81 ret void82}83 84; FUNC-LABEL: {{^}}zextload_global_v8i16_to_v8i32:85; SI: s_endpgm86define amdgpu_kernel void @zextload_global_v8i16_to_v8i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {87 %load = load <8 x i16>, ptr addrspace(1) %in88 %ext = zext <8 x i16> %load to <8 x i32>89 store <8 x i32> %ext, ptr addrspace(1) %out90 ret void91}92 93; FUNC-LABEL: {{^}}sextload_global_v8i16_to_v8i32:94; SI: s_endpgm95define amdgpu_kernel void @sextload_global_v8i16_to_v8i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {96 %load = load <8 x i16>, ptr addrspace(1) %in97 %ext = sext <8 x i16> %load to <8 x i32>98 store <8 x i32> %ext, ptr addrspace(1) %out99 ret void100}101 102; FUNC-LABEL: {{^}}zextload_global_v16i16_to_v16i32:103; SI: s_endpgm104define amdgpu_kernel void @zextload_global_v16i16_to_v16i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {105 %load = load <16 x i16>, ptr addrspace(1) %in106 %ext = zext <16 x i16> %load to <16 x i32>107 store <16 x i32> %ext, ptr addrspace(1) %out108 ret void109}110 111; FUNC-LABEL: {{^}}sextload_global_v16i16_to_v16i32:112; SI: s_endpgm113define amdgpu_kernel void @sextload_global_v16i16_to_v16i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {114 %load = load <16 x i16>, ptr addrspace(1) %in115 %ext = sext <16 x i16> %load to <16 x i32>116 store <16 x i32> %ext, ptr addrspace(1) %out117 ret void118}119 120; FUNC-LABEL: {{^}}zextload_global_v32i16_to_v32i32:121; SI: s_endpgm122define amdgpu_kernel void @zextload_global_v32i16_to_v32i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {123 %load = load <32 x i16>, ptr addrspace(1) %in124 %ext = zext <32 x i16> %load to <32 x i32>125 store <32 x i32> %ext, ptr addrspace(1) %out126 ret void127}128 129; FUNC-LABEL: {{^}}sextload_global_v32i16_to_v32i32:130; SI: s_endpgm131define amdgpu_kernel void @sextload_global_v32i16_to_v32i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {132 %load = load <32 x i16>, ptr addrspace(1) %in133 %ext = sext <32 x i16> %load to <32 x i32>134 store <32 x i32> %ext, ptr addrspace(1) %out135 ret void136}137 138; FUNC-LABEL: {{^}}zextload_global_v64i16_to_v64i32:139; SI: s_endpgm140define amdgpu_kernel void @zextload_global_v64i16_to_v64i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {141 %load = load <64 x i16>, ptr addrspace(1) %in142 %ext = zext <64 x i16> %load to <64 x i32>143 store <64 x i32> %ext, ptr addrspace(1) %out144 ret void145}146 147; FUNC-LABEL: {{^}}sextload_global_v64i16_to_v64i32:148; SI: s_endpgm149define amdgpu_kernel void @sextload_global_v64i16_to_v64i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {150 %load = load <64 x i16>, ptr addrspace(1) %in151 %ext = sext <64 x i16> %load to <64 x i32>152 store <64 x i32> %ext, ptr addrspace(1) %out153 ret void154}155 156; FUNC-LABEL: {{^}}zextload_global_i16_to_i64:157; SI-DAG: buffer_load_ushort v[[LO:[0-9]+]],158; SI-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}159; SI: buffer_store_dwordx2 v[[[LO]]:[[HI]]]160define amdgpu_kernel void @zextload_global_i16_to_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {161 %a = load i16, ptr addrspace(1) %in162 %ext = zext i16 %a to i64163 store i64 %ext, ptr addrspace(1) %out164 ret void165}166 167; FUNC-LABEL: {{^}}sextload_global_i16_to_i64:168; VI: buffer_load_ushort [[LOAD:v[0-9]+]], s[{{[0-9]+:[0-9]+}}], 0169; VI: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, [[LOAD]]170; VI: buffer_store_dwordx2 v[{{[0-9]+:[0-9]+}}], s[{{[0-9]+:[0-9]+}}], 0171define amdgpu_kernel void @sextload_global_i16_to_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {172 %a = load i16, ptr addrspace(1) %in173 %ext = sext i16 %a to i64174 store i64 %ext, ptr addrspace(1) %out175 ret void176}177 178; FUNC-LABEL: {{^}}zextload_global_v1i16_to_v1i64:179; SI: s_endpgm180define amdgpu_kernel void @zextload_global_v1i16_to_v1i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {181 %load = load <1 x i16>, ptr addrspace(1) %in182 %ext = zext <1 x i16> %load to <1 x i64>183 store <1 x i64> %ext, ptr addrspace(1) %out184 ret void185}186 187; FUNC-LABEL: {{^}}sextload_global_v1i16_to_v1i64:188; SI: s_endpgm189define amdgpu_kernel void @sextload_global_v1i16_to_v1i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {190 %load = load <1 x i16>, ptr addrspace(1) %in191 %ext = sext <1 x i16> %load to <1 x i64>192 store <1 x i64> %ext, ptr addrspace(1) %out193 ret void194}195 196; FUNC-LABEL: {{^}}zextload_global_v2i16_to_v2i64:197; SI: s_endpgm198define amdgpu_kernel void @zextload_global_v2i16_to_v2i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {199 %load = load <2 x i16>, ptr addrspace(1) %in200 %ext = zext <2 x i16> %load to <2 x i64>201 store <2 x i64> %ext, ptr addrspace(1) %out202 ret void203}204 205; FUNC-LABEL: {{^}}sextload_global_v2i16_to_v2i64:206; SI: s_endpgm207define amdgpu_kernel void @sextload_global_v2i16_to_v2i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {208 %load = load <2 x i16>, ptr addrspace(1) %in209 %ext = sext <2 x i16> %load to <2 x i64>210 store <2 x i64> %ext, ptr addrspace(1) %out211 ret void212}213 214; FUNC-LABEL: {{^}}zextload_global_v4i16_to_v4i64:215; SI: s_endpgm216define amdgpu_kernel void @zextload_global_v4i16_to_v4i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {217 %load = load <4 x i16>, ptr addrspace(1) %in218 %ext = zext <4 x i16> %load to <4 x i64>219 store <4 x i64> %ext, ptr addrspace(1) %out220 ret void221}222 223; FUNC-LABEL: {{^}}sextload_global_v4i16_to_v4i64:224; SI: s_endpgm225define amdgpu_kernel void @sextload_global_v4i16_to_v4i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {226 %load = load <4 x i16>, ptr addrspace(1) %in227 %ext = sext <4 x i16> %load to <4 x i64>228 store <4 x i64> %ext, ptr addrspace(1) %out229 ret void230}231 232; FUNC-LABEL: {{^}}zextload_global_v8i16_to_v8i64:233; SI: s_endpgm234define amdgpu_kernel void @zextload_global_v8i16_to_v8i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {235 %load = load <8 x i16>, ptr addrspace(1) %in236 %ext = zext <8 x i16> %load to <8 x i64>237 store <8 x i64> %ext, ptr addrspace(1) %out238 ret void239}240 241; FUNC-LABEL: {{^}}sextload_global_v8i16_to_v8i64:242; SI: s_endpgm243define amdgpu_kernel void @sextload_global_v8i16_to_v8i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {244 %load = load <8 x i16>, ptr addrspace(1) %in245 %ext = sext <8 x i16> %load to <8 x i64>246 store <8 x i64> %ext, ptr addrspace(1) %out247 ret void248}249 250; FUNC-LABEL: {{^}}zextload_global_v16i16_to_v16i64:251; SI: s_endpgm252define amdgpu_kernel void @zextload_global_v16i16_to_v16i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {253 %load = load <16 x i16>, ptr addrspace(1) %in254 %ext = zext <16 x i16> %load to <16 x i64>255 store <16 x i64> %ext, ptr addrspace(1) %out256 ret void257}258 259; FUNC-LABEL: {{^}}sextload_global_v16i16_to_v16i64:260; SI: s_endpgm261define amdgpu_kernel void @sextload_global_v16i16_to_v16i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {262 %load = load <16 x i16>, ptr addrspace(1) %in263 %ext = sext <16 x i16> %load to <16 x i64>264 store <16 x i64> %ext, ptr addrspace(1) %out265 ret void266}267 268; FUNC-LABEL: {{^}}zextload_global_v32i16_to_v32i64:269; SI: s_endpgm270define amdgpu_kernel void @zextload_global_v32i16_to_v32i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {271 %load = load <32 x i16>, ptr addrspace(1) %in272 %ext = zext <32 x i16> %load to <32 x i64>273 store <32 x i64> %ext, ptr addrspace(1) %out274 ret void275}276 277; FUNC-LABEL: {{^}}sextload_global_v32i16_to_v32i64:278; SI: s_endpgm279define amdgpu_kernel void @sextload_global_v32i16_to_v32i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {280 %load = load <32 x i16>, ptr addrspace(1) %in281 %ext = sext <32 x i16> %load to <32 x i64>282 store <32 x i64> %ext, ptr addrspace(1) %out283 ret void284}285 286; FUNC-LABEL: {{^}}zextload_global_v64i16_to_v64i64:287; SI: s_endpgm288define amdgpu_kernel void @zextload_global_v64i16_to_v64i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {289 %load = load <64 x i16>, ptr addrspace(1) %in290 %ext = zext <64 x i16> %load to <64 x i64>291 store <64 x i64> %ext, ptr addrspace(1) %out292 ret void293}294 295; FUNC-LABEL: {{^}}sextload_global_v64i16_to_v64i64:296; SI: s_endpgm297define amdgpu_kernel void @sextload_global_v64i16_to_v64i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {298 %load = load <64 x i16>, ptr addrspace(1) %in299 %ext = sext <64 x i16> %load to <64 x i64>300 store <64 x i64> %ext, ptr addrspace(1) %out301 ret void302}303