230 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx908 < %s | FileCheck -check-prefixes=GFX908 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX90A %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 < %s | FileCheck -check-prefixes=GFX1030 %s5 6 7; Function Attrs: mustprogress nounwind willreturn8define amdgpu_kernel void @half8(ptr addrspace(1) nocapture readonly %0, ptr addrspace(1) nocapture writeonly %1) local_unnamed_addr #0 {9; GFX908-LABEL: half8:10; GFX908: ; %bb.0:11; GFX908-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x012; GFX908-NEXT: v_mov_b32_e32 v4, 013; GFX908-NEXT: s_waitcnt lgkmcnt(0)14; GFX908-NEXT: global_load_dwordx4 v[0:3], v4, s[0:1]15; GFX908-NEXT: s_waitcnt vmcnt(0)16; GFX908-NEXT: global_store_dwordx4 v4, v[0:3], s[2:3]17; GFX908-NEXT: s_endpgm18;19; GFX90A-LABEL: half8:20; GFX90A: ; %bb.0:21; GFX90A-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x022; GFX90A-NEXT: v_mov_b32_e32 v0, 023; GFX90A-NEXT: s_waitcnt lgkmcnt(0)24; GFX90A-NEXT: global_load_dwordx4 v[2:5], v0, s[0:1]25; GFX90A-NEXT: s_waitcnt vmcnt(0)26; GFX90A-NEXT: global_store_dwordx4 v0, v[2:5], s[2:3]27; GFX90A-NEXT: s_endpgm28;29; GFX1030-LABEL: half8:30; GFX1030: ; %bb.0:31; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x032; GFX1030-NEXT: v_mov_b32_e32 v4, 033; GFX1030-NEXT: s_waitcnt lgkmcnt(0)34; GFX1030-NEXT: global_load_dwordx4 v[0:3], v4, s[0:1]35; GFX1030-NEXT: s_waitcnt vmcnt(0)36; GFX1030-NEXT: global_store_dwordx4 v4, v[0:3], s[2:3]37; GFX1030-NEXT: s_endpgm38 %gep0 = getelementptr half, ptr addrspace(1) %0, i64 039 %gep1 = getelementptr half, ptr addrspace(1) %0, i64 140 %gep2 = getelementptr half, ptr addrspace(1) %0, i64 241 %gep3 = getelementptr half, ptr addrspace(1) %0, i64 342 %gep4 = getelementptr half, ptr addrspace(1) %0, i64 443 %gep5 = getelementptr half, ptr addrspace(1) %0, i64 544 %gep6 = getelementptr half, ptr addrspace(1) %0, i64 645 %gep7 = getelementptr half, ptr addrspace(1) %0, i64 746 %l0 = load half, ptr addrspace(1) %gep0, align 247 %l1 = load half, ptr addrspace(1) %gep1, align 248 %l2 = load half, ptr addrspace(1) %gep2, align 249 %l3 = load half, ptr addrspace(1) %gep3, align 250 %l4 = load half, ptr addrspace(1) %gep4, align 251 %l5 = load half, ptr addrspace(1) %gep5, align 252 %l6 = load half, ptr addrspace(1) %gep6, align 253 %l7 = load half, ptr addrspace(1) %gep7, align 254 %sgep0 = getelementptr half, ptr addrspace(1) %1, i64 055 %sgep1 = getelementptr half, ptr addrspace(1) %1, i64 156 %sgep2 = getelementptr half, ptr addrspace(1) %1, i64 257 %sgep3 = getelementptr half, ptr addrspace(1) %1, i64 358 %sgep4 = getelementptr half, ptr addrspace(1) %1, i64 459 %sgep5 = getelementptr half, ptr addrspace(1) %1, i64 560 %sgep6 = getelementptr half, ptr addrspace(1) %1, i64 661 %sgep7 = getelementptr half, ptr addrspace(1) %1, i64 762 store half %l0, ptr addrspace(1) %sgep0, align 263 store half %l1, ptr addrspace(1) %sgep1, align 264 store half %l2, ptr addrspace(1) %sgep2, align 265 store half %l3, ptr addrspace(1) %sgep3, align 266 store half %l4, ptr addrspace(1) %sgep4, align 267 store half %l5, ptr addrspace(1) %sgep5, align 268 store half %l6, ptr addrspace(1) %sgep6, align 269 store half %l7, ptr addrspace(1) %sgep7, align 270 ret void71}72 73; Function Attrs: mustprogress nounwind willreturn74define amdgpu_kernel void @half6(ptr addrspace(1) nocapture readonly %0, ptr addrspace(1) nocapture writeonly %1) local_unnamed_addr #0 {75; GFX908-LABEL: half6:76; GFX908: ; %bb.0:77; GFX908-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x078; GFX908-NEXT: v_mov_b32_e32 v3, 079; GFX908-NEXT: s_waitcnt lgkmcnt(0)80; GFX908-NEXT: global_load_dwordx3 v[0:2], v3, s[0:1]81; GFX908-NEXT: s_waitcnt vmcnt(0)82; GFX908-NEXT: global_store_dwordx3 v3, v[0:2], s[2:3]83; GFX908-NEXT: s_endpgm84;85; GFX90A-LABEL: half6:86; GFX90A: ; %bb.0:87; GFX90A-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x088; GFX90A-NEXT: v_mov_b32_e32 v0, 089; GFX90A-NEXT: s_waitcnt lgkmcnt(0)90; GFX90A-NEXT: global_load_dwordx3 v[2:4], v0, s[0:1]91; GFX90A-NEXT: s_waitcnt vmcnt(0)92; GFX90A-NEXT: global_store_dwordx3 v0, v[2:4], s[2:3]93; GFX90A-NEXT: s_endpgm94;95; GFX1030-LABEL: half6:96; GFX1030: ; %bb.0:97; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x098; GFX1030-NEXT: v_mov_b32_e32 v3, 099; GFX1030-NEXT: s_waitcnt lgkmcnt(0)100; GFX1030-NEXT: global_load_dwordx3 v[0:2], v3, s[0:1]101; GFX1030-NEXT: s_waitcnt vmcnt(0)102; GFX1030-NEXT: global_store_dwordx3 v3, v[0:2], s[2:3]103; GFX1030-NEXT: s_endpgm104 %gep0 = getelementptr half, ptr addrspace(1) %0, i64 0105 %gep1 = getelementptr half, ptr addrspace(1) %0, i64 1106 %gep2 = getelementptr half, ptr addrspace(1) %0, i64 2107 %gep3 = getelementptr half, ptr addrspace(1) %0, i64 3108 %gep4 = getelementptr half, ptr addrspace(1) %0, i64 4109 %gep5 = getelementptr half, ptr addrspace(1) %0, i64 5110 %l0 = load half, ptr addrspace(1) %gep0, align 1111 %l1 = load half, ptr addrspace(1) %gep1, align 1112 %l2 = load half, ptr addrspace(1) %gep2, align 1113 %l3 = load half, ptr addrspace(1) %gep3, align 1114 %l4 = load half, ptr addrspace(1) %gep4, align 1115 %l5 = load half, ptr addrspace(1) %gep5, align 1116 %sgep0 = getelementptr half, ptr addrspace(1) %1, i64 0117 %sgep1 = getelementptr half, ptr addrspace(1) %1, i64 1118 %sgep2 = getelementptr half, ptr addrspace(1) %1, i64 2119 %sgep3 = getelementptr half, ptr addrspace(1) %1, i64 3120 %sgep4 = getelementptr half, ptr addrspace(1) %1, i64 4121 %sgep5 = getelementptr half, ptr addrspace(1) %1, i64 5122 store half %l0, ptr addrspace(1) %sgep0, align 1123 store half %l1, ptr addrspace(1) %sgep1, align 1124 store half %l2, ptr addrspace(1) %sgep2, align 1125 store half %l3, ptr addrspace(1) %sgep3, align 1126 store half %l4, ptr addrspace(1) %sgep4, align 1127 store half %l5, ptr addrspace(1) %sgep5, align 1128 ret void129}130 131; Function Attrs: mustprogress nounwind willreturn132define amdgpu_kernel void @half4(ptr addrspace(1) nocapture readonly %0, ptr addrspace(1) nocapture writeonly %1) local_unnamed_addr #0 {133; GFX908-LABEL: half4:134; GFX908: ; %bb.0:135; GFX908-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0136; GFX908-NEXT: v_mov_b32_e32 v2, 0137; GFX908-NEXT: s_waitcnt lgkmcnt(0)138; GFX908-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0139; GFX908-NEXT: s_waitcnt lgkmcnt(0)140; GFX908-NEXT: v_mov_b32_e32 v0, s4141; GFX908-NEXT: v_mov_b32_e32 v1, s5142; GFX908-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]143; GFX908-NEXT: s_endpgm144;145; GFX90A-LABEL: half4:146; GFX90A: ; %bb.0:147; GFX90A-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0148; GFX90A-NEXT: v_mov_b32_e32 v0, 0149; GFX90A-NEXT: s_waitcnt lgkmcnt(0)150; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0151; GFX90A-NEXT: s_waitcnt lgkmcnt(0)152; GFX90A-NEXT: v_pk_mov_b32 v[2:3], s[4:5], s[4:5] op_sel:[0,1]153; GFX90A-NEXT: global_store_dwordx2 v0, v[2:3], s[2:3]154; GFX90A-NEXT: s_endpgm155;156; GFX1030-LABEL: half4:157; GFX1030: ; %bb.0:158; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0159; GFX1030-NEXT: v_mov_b32_e32 v2, 0160; GFX1030-NEXT: s_waitcnt lgkmcnt(0)161; GFX1030-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x0162; GFX1030-NEXT: s_waitcnt lgkmcnt(0)163; GFX1030-NEXT: v_mov_b32_e32 v0, s0164; GFX1030-NEXT: v_mov_b32_e32 v1, s1165; GFX1030-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]166; GFX1030-NEXT: s_endpgm167 %gep0 = getelementptr half, ptr addrspace(1) %0, i64 0168 %gep1 = getelementptr half, ptr addrspace(1) %0, i64 1169 %gep2 = getelementptr half, ptr addrspace(1) %0, i64 2170 %gep3 = getelementptr half, ptr addrspace(1) %0, i64 3171 %l0 = load half, ptr addrspace(1) %gep0, align 4172 %l1 = load half, ptr addrspace(1) %gep1, align 4173 %l2 = load half, ptr addrspace(1) %gep2, align 4174 %l3 = load half, ptr addrspace(1) %gep3, align 4175 %sgep0 = getelementptr half, ptr addrspace(1) %1, i64 0176 %sgep1 = getelementptr half, ptr addrspace(1) %1, i64 1177 %sgep2 = getelementptr half, ptr addrspace(1) %1, i64 2178 %sgep3 = getelementptr half, ptr addrspace(1) %1, i64 3179 store half %l0, ptr addrspace(1) %sgep0, align 4180 store half %l1, ptr addrspace(1) %sgep1, align 4181 store half %l2, ptr addrspace(1) %sgep2, align 4182 store half %l3, ptr addrspace(1) %sgep3, align 4183 ret void184}185 186 187; Function Attrs: mustprogress nounwind willreturn188define amdgpu_kernel void @half2(ptr addrspace(1) nocapture readonly %0, ptr addrspace(1) nocapture writeonly %1) local_unnamed_addr #0 {189; GFX908-LABEL: half2:190; GFX908: ; %bb.0:191; GFX908-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0192; GFX908-NEXT: v_mov_b32_e32 v0, 0193; GFX908-NEXT: s_waitcnt lgkmcnt(0)194; GFX908-NEXT: global_load_dword v1, v0, s[0:1]195; GFX908-NEXT: s_waitcnt vmcnt(0)196; GFX908-NEXT: global_store_dword v0, v1, s[2:3]197; GFX908-NEXT: s_endpgm198;199; GFX90A-LABEL: half2:200; GFX90A: ; %bb.0:201; GFX90A-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0202; GFX90A-NEXT: v_mov_b32_e32 v0, 0203; GFX90A-NEXT: s_waitcnt lgkmcnt(0)204; GFX90A-NEXT: global_load_dword v1, v0, s[0:1]205; GFX90A-NEXT: s_waitcnt vmcnt(0)206; GFX90A-NEXT: global_store_dword v0, v1, s[2:3]207; GFX90A-NEXT: s_endpgm208;209; GFX1030-LABEL: half2:210; GFX1030: ; %bb.0:211; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0212; GFX1030-NEXT: v_mov_b32_e32 v0, 0213; GFX1030-NEXT: s_waitcnt lgkmcnt(0)214; GFX1030-NEXT: global_load_dword v1, v0, s[0:1]215; GFX1030-NEXT: s_waitcnt vmcnt(0)216; GFX1030-NEXT: global_store_dword v0, v1, s[2:3]217; GFX1030-NEXT: s_endpgm218 %gep0 = getelementptr half, ptr addrspace(1) %0, i64 0219 %gep1 = getelementptr half, ptr addrspace(1) %0, i64 1220 %l0 = load half, ptr addrspace(1) %gep0221 %l1 = load half, ptr addrspace(1) %gep1222 %sgep0 = getelementptr half, ptr addrspace(1) %1, i64 0223 %sgep1 = getelementptr half, ptr addrspace(1) %1, i64 1224 store half %l0, ptr addrspace(1) %sgep0225 store half %l1, ptr addrspace(1) %sgep1226 ret void227}228 229 230