372 lines · plain
1; RUN: llc -mtriple=amdgcn-- < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s2; RUN: llc -mtriple=amdgcn-- -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s3; RUN: llc -mtriple=r600-- -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s4 5; FUNC-LABEL: {{^}}global_load_i1:6; GCN: buffer_load_ubyte7; GCN: v_and_b32_e32 v{{[0-9]+}}, 18; GCN: buffer_store_byte9 10; EG: VTX_READ_811; EG: AND_INT12define amdgpu_kernel void @global_load_i1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {13 %load = load i1, ptr addrspace(1) %in14 store i1 %load, ptr addrspace(1) %out15 ret void16}17 18; FUNC-LABEL: {{^}}global_load_v2i1:19define amdgpu_kernel void @global_load_v2i1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {20 %load = load <2 x i1>, ptr addrspace(1) %in21 store <2 x i1> %load, ptr addrspace(1) %out22 ret void23}24 25; FUNC-LABEL: {{^}}global_load_v3i1:26define amdgpu_kernel void @global_load_v3i1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {27 %load = load <3 x i1>, ptr addrspace(1) %in28 store <3 x i1> %load, ptr addrspace(1) %out29 ret void30}31 32; FUNC-LABEL: {{^}}global_load_v4i1:33define amdgpu_kernel void @global_load_v4i1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {34 %load = load <4 x i1>, ptr addrspace(1) %in35 store <4 x i1> %load, ptr addrspace(1) %out36 ret void37}38 39; FUNC-LABEL: {{^}}global_load_v8i1:40define amdgpu_kernel void @global_load_v8i1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {41 %load = load <8 x i1>, ptr addrspace(1) %in42 store <8 x i1> %load, ptr addrspace(1) %out43 ret void44}45 46; FUNC-LABEL: {{^}}global_load_v16i1:47define amdgpu_kernel void @global_load_v16i1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {48 %load = load <16 x i1>, ptr addrspace(1) %in49 store <16 x i1> %load, ptr addrspace(1) %out50 ret void51}52 53; FUNC-LABEL: {{^}}global_load_v32i1:54define amdgpu_kernel void @global_load_v32i1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {55 %load = load <32 x i1>, ptr addrspace(1) %in56 store <32 x i1> %load, ptr addrspace(1) %out57 ret void58}59 60; FUNC-LABEL: {{^}}global_load_v64i1:61define amdgpu_kernel void @global_load_v64i1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {62 %load = load <64 x i1>, ptr addrspace(1) %in63 store <64 x i1> %load, ptr addrspace(1) %out64 ret void65}66 67; FUNC-LABEL: {{^}}global_zextload_i1_to_i32:68; GCN: buffer_load_ubyte69; GCN: buffer_store_dword70define amdgpu_kernel void @global_zextload_i1_to_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {71 %a = load i1, ptr addrspace(1) %in72 %ext = zext i1 %a to i3273 store i32 %ext, ptr addrspace(1) %out74 ret void75}76 77; FUNC-LABEL: {{^}}global_sextload_i1_to_i32:78; GCN: buffer_load_ubyte79; GCN: v_bfe_i32 {{v[0-9]+}}, {{v[0-9]+}}, 0, 1{{$}}80; GCN: buffer_store_dword81 82; EG: VTX_READ_883; EG: BFE_INT84define amdgpu_kernel void @global_sextload_i1_to_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {85 %a = load i1, ptr addrspace(1) %in86 %ext = sext i1 %a to i3287 store i32 %ext, ptr addrspace(1) %out88 ret void89}90 91; FUNC-LABEL: {{^}}global_zextload_v1i1_to_v1i32:92define amdgpu_kernel void @global_zextload_v1i1_to_v1i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {93 %load = load <1 x i1>, ptr addrspace(1) %in94 %ext = zext <1 x i1> %load to <1 x i32>95 store <1 x i32> %ext, ptr addrspace(1) %out96 ret void97}98 99; FUNC-LABEL: {{^}}global_sextload_v1i1_to_v1i32:100define amdgpu_kernel void @global_sextload_v1i1_to_v1i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {101 %load = load <1 x i1>, ptr addrspace(1) %in102 %ext = sext <1 x i1> %load to <1 x i32>103 store <1 x i32> %ext, ptr addrspace(1) %out104 ret void105}106 107; FUNC-LABEL: {{^}}global_zextload_v2i1_to_v2i32:108define amdgpu_kernel void @global_zextload_v2i1_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {109 %load = load <2 x i1>, ptr addrspace(1) %in110 %ext = zext <2 x i1> %load to <2 x i32>111 store <2 x i32> %ext, ptr addrspace(1) %out112 ret void113}114 115; FUNC-LABEL: {{^}}global_sextload_v2i1_to_v2i32:116define amdgpu_kernel void @global_sextload_v2i1_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {117 %load = load <2 x i1>, ptr addrspace(1) %in118 %ext = sext <2 x i1> %load to <2 x i32>119 store <2 x i32> %ext, ptr addrspace(1) %out120 ret void121}122 123; FUNC-LABEL: {{^}}global_zextload_v3i1_to_v3i32:124define amdgpu_kernel void @global_zextload_v3i1_to_v3i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {125 %load = load <3 x i1>, ptr addrspace(1) %in126 %ext = zext <3 x i1> %load to <3 x i32>127 store <3 x i32> %ext, ptr addrspace(1) %out128 ret void129}130 131; FUNC-LABEL: {{^}}global_sextload_v3i1_to_v3i32:132define amdgpu_kernel void @global_sextload_v3i1_to_v3i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {133 %load = load <3 x i1>, ptr addrspace(1) %in134 %ext = sext <3 x i1> %load to <3 x i32>135 store <3 x i32> %ext, ptr addrspace(1) %out136 ret void137}138 139; FUNC-LABEL: {{^}}global_zextload_v4i1_to_v4i32:140define amdgpu_kernel void @global_zextload_v4i1_to_v4i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {141 %load = load <4 x i1>, ptr addrspace(1) %in142 %ext = zext <4 x i1> %load to <4 x i32>143 store <4 x i32> %ext, ptr addrspace(1) %out144 ret void145}146 147; FUNC-LABEL: {{^}}global_sextload_v4i1_to_v4i32:148define amdgpu_kernel void @global_sextload_v4i1_to_v4i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {149 %load = load <4 x i1>, ptr addrspace(1) %in150 %ext = sext <4 x i1> %load to <4 x i32>151 store <4 x i32> %ext, ptr addrspace(1) %out152 ret void153}154 155; FUNC-LABEL: {{^}}global_zextload_v8i1_to_v8i32:156define amdgpu_kernel void @global_zextload_v8i1_to_v8i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {157 %load = load <8 x i1>, ptr addrspace(1) %in158 %ext = zext <8 x i1> %load to <8 x i32>159 store <8 x i32> %ext, ptr addrspace(1) %out160 ret void161}162 163; FUNC-LABEL: {{^}}global_sextload_v8i1_to_v8i32:164define amdgpu_kernel void @global_sextload_v8i1_to_v8i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {165 %load = load <8 x i1>, ptr addrspace(1) %in166 %ext = sext <8 x i1> %load to <8 x i32>167 store <8 x i32> %ext, ptr addrspace(1) %out168 ret void169}170 171; FUNC-LABEL: {{^}}global_zextload_v16i1_to_v16i32:172define amdgpu_kernel void @global_zextload_v16i1_to_v16i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {173 %load = load <16 x i1>, ptr addrspace(1) %in174 %ext = zext <16 x i1> %load to <16 x i32>175 store <16 x i32> %ext, ptr addrspace(1) %out176 ret void177}178 179; FUNC-LABEL: {{^}}global_sextload_v16i1_to_v16i32:180define amdgpu_kernel void @global_sextload_v16i1_to_v16i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {181 %load = load <16 x i1>, ptr addrspace(1) %in182 %ext = sext <16 x i1> %load to <16 x i32>183 store <16 x i32> %ext, ptr addrspace(1) %out184 ret void185}186 187; FUNC-LABEL: {{^}}global_zextload_v32i1_to_v32i32:188define amdgpu_kernel void @global_zextload_v32i1_to_v32i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {189 %load = load <32 x i1>, ptr addrspace(1) %in190 %ext = zext <32 x i1> %load to <32 x i32>191 store <32 x i32> %ext, ptr addrspace(1) %out192 ret void193}194 195; FUNC-LABEL: {{^}}global_sextload_v32i1_to_v32i32:196define amdgpu_kernel void @global_sextload_v32i1_to_v32i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {197 %load = load <32 x i1>, ptr addrspace(1) %in198 %ext = sext <32 x i1> %load to <32 x i32>199 store <32 x i32> %ext, ptr addrspace(1) %out200 ret void201}202 203; FUNC-LABEL: {{^}}global_zextload_v64i1_to_v64i32:204define amdgpu_kernel void @global_zextload_v64i1_to_v64i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {205 %load = load <64 x i1>, ptr addrspace(1) %in206 %ext = zext <64 x i1> %load to <64 x i32>207 store <64 x i32> %ext, ptr addrspace(1) %out208 ret void209}210 211; FUNC-LABEL: {{^}}global_sextload_v64i1_to_v64i32:212define amdgpu_kernel void @global_sextload_v64i1_to_v64i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {213 %load = load <64 x i1>, ptr addrspace(1) %in214 %ext = sext <64 x i1> %load to <64 x i32>215 store <64 x i32> %ext, ptr addrspace(1) %out216 ret void217}218 219; FUNC-LABEL: {{^}}global_zextload_i1_to_i64:220; GCN-DAG: buffer_load_ubyte [[LOAD:v[0-9]+]],221; GCN-DAG: v_mov_b32_e32 {{v[0-9]+}}, 0{{$}}222; GCN-DAG: v_and_b32_e32 {{v[0-9]+}}, 1, [[LOAD]]{{$}}223; GCN: buffer_store_dwordx2224define amdgpu_kernel void @global_zextload_i1_to_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {225 %a = load i1, ptr addrspace(1) %in226 %ext = zext i1 %a to i64227 store i64 %ext, ptr addrspace(1) %out228 ret void229}230 231; FUNC-LABEL: {{^}}global_sextload_i1_to_i64:232; GCN: buffer_load_ubyte [[LOAD:v[0-9]+]],233; GCN: v_bfe_i32 [[BFE:v[0-9]+]], {{v[0-9]+}}, 0, 1{{$}}234; GCN: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, [[BFE]]235; GCN: buffer_store_dwordx2236define amdgpu_kernel void @global_sextload_i1_to_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {237 %a = load i1, ptr addrspace(1) %in238 %ext = sext i1 %a to i64239 store i64 %ext, ptr addrspace(1) %out240 ret void241}242 243; FUNC-LABEL: {{^}}global_zextload_v1i1_to_v1i64:244define amdgpu_kernel void @global_zextload_v1i1_to_v1i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {245 %load = load <1 x i1>, ptr addrspace(1) %in246 %ext = zext <1 x i1> %load to <1 x i64>247 store <1 x i64> %ext, ptr addrspace(1) %out248 ret void249}250 251; FUNC-LABEL: {{^}}global_sextload_v1i1_to_v1i64:252define amdgpu_kernel void @global_sextload_v1i1_to_v1i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {253 %load = load <1 x i1>, ptr addrspace(1) %in254 %ext = sext <1 x i1> %load to <1 x i64>255 store <1 x i64> %ext, ptr addrspace(1) %out256 ret void257}258 259; FUNC-LABEL: {{^}}global_zextload_v2i1_to_v2i64:260define amdgpu_kernel void @global_zextload_v2i1_to_v2i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {261 %load = load <2 x i1>, ptr addrspace(1) %in262 %ext = zext <2 x i1> %load to <2 x i64>263 store <2 x i64> %ext, ptr addrspace(1) %out264 ret void265}266 267; FUNC-LABEL: {{^}}global_sextload_v2i1_to_v2i64:268define amdgpu_kernel void @global_sextload_v2i1_to_v2i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {269 %load = load <2 x i1>, ptr addrspace(1) %in270 %ext = sext <2 x i1> %load to <2 x i64>271 store <2 x i64> %ext, ptr addrspace(1) %out272 ret void273}274 275; FUNC-LABEL: {{^}}global_zextload_v3i1_to_v3i64:276define amdgpu_kernel void @global_zextload_v3i1_to_v3i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {277 %load = load <3 x i1>, ptr addrspace(1) %in278 %ext = zext <3 x i1> %load to <3 x i64>279 store <3 x i64> %ext, ptr addrspace(1) %out280 ret void281}282 283; FUNC-LABEL: {{^}}global_sextload_v3i1_to_v3i64:284define amdgpu_kernel void @global_sextload_v3i1_to_v3i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {285 %load = load <3 x i1>, ptr addrspace(1) %in286 %ext = sext <3 x i1> %load to <3 x i64>287 store <3 x i64> %ext, ptr addrspace(1) %out288 ret void289}290 291; FUNC-LABEL: {{^}}global_zextload_v4i1_to_v4i64:292define amdgpu_kernel void @global_zextload_v4i1_to_v4i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {293 %load = load <4 x i1>, ptr addrspace(1) %in294 %ext = zext <4 x i1> %load to <4 x i64>295 store <4 x i64> %ext, ptr addrspace(1) %out296 ret void297}298 299; FUNC-LABEL: {{^}}global_sextload_v4i1_to_v4i64:300define amdgpu_kernel void @global_sextload_v4i1_to_v4i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {301 %load = load <4 x i1>, ptr addrspace(1) %in302 %ext = sext <4 x i1> %load to <4 x i64>303 store <4 x i64> %ext, ptr addrspace(1) %out304 ret void305}306 307; FUNC-LABEL: {{^}}global_zextload_v8i1_to_v8i64:308define amdgpu_kernel void @global_zextload_v8i1_to_v8i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {309 %load = load <8 x i1>, ptr addrspace(1) %in310 %ext = zext <8 x i1> %load to <8 x i64>311 store <8 x i64> %ext, ptr addrspace(1) %out312 ret void313}314 315; FUNC-LABEL: {{^}}global_sextload_v8i1_to_v8i64:316define amdgpu_kernel void @global_sextload_v8i1_to_v8i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {317 %load = load <8 x i1>, ptr addrspace(1) %in318 %ext = sext <8 x i1> %load to <8 x i64>319 store <8 x i64> %ext, ptr addrspace(1) %out320 ret void321}322 323; FUNC-LABEL: {{^}}global_zextload_v16i1_to_v16i64:324define amdgpu_kernel void @global_zextload_v16i1_to_v16i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {325 %load = load <16 x i1>, ptr addrspace(1) %in326 %ext = zext <16 x i1> %load to <16 x i64>327 store <16 x i64> %ext, ptr addrspace(1) %out328 ret void329}330 331; FUNC-LABEL: {{^}}global_sextload_v16i1_to_v16i64:332define amdgpu_kernel void @global_sextload_v16i1_to_v16i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {333 %load = load <16 x i1>, ptr addrspace(1) %in334 %ext = sext <16 x i1> %load to <16 x i64>335 store <16 x i64> %ext, ptr addrspace(1) %out336 ret void337}338 339; FUNC-LABEL: {{^}}global_zextload_v32i1_to_v32i64:340define amdgpu_kernel void @global_zextload_v32i1_to_v32i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {341 %load = load <32 x i1>, ptr addrspace(1) %in342 %ext = zext <32 x i1> %load to <32 x i64>343 store <32 x i64> %ext, ptr addrspace(1) %out344 ret void345}346 347; FUNC-LABEL: {{^}}global_sextload_v32i1_to_v32i64:348define amdgpu_kernel void @global_sextload_v32i1_to_v32i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {349 %load = load <32 x i1>, ptr addrspace(1) %in350 %ext = sext <32 x i1> %load to <32 x i64>351 store <32 x i64> %ext, ptr addrspace(1) %out352 ret void353}354 355; FUNC-LABEL: {{^}}global_zextload_v64i1_to_v64i64:356define amdgpu_kernel void @global_zextload_v64i1_to_v64i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {357 %load = load <64 x i1>, ptr addrspace(1) %in358 %ext = zext <64 x i1> %load to <64 x i64>359 store <64 x i64> %ext, ptr addrspace(1) %out360 ret void361}362 363; FUNC-LABEL: {{^}}global_sextload_v64i1_to_v64i64:364define amdgpu_kernel void @global_sextload_v64i1_to_v64i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {365 %load = load <64 x i1>, ptr addrspace(1) %in366 %ext = sext <64 x i1> %load to <64 x i64>367 store <64 x i64> %ext, ptr addrspace(1) %out368 ret void369}370 371attributes #0 = { nounwind }372