2553 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX67,GFX6 %s3; RUN: llc -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck -check-prefixes=GFX67,GFX7 %s4; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX89,GFX8 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX89,GFX9 %s6 7define amdgpu_vs float @load_i32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {8; GFX67-LABEL: load_i32:9; GFX67: ; %bb.0:10; GFX67-NEXT: s_mov_b32 s3, 011; GFX67-NEXT: s_mov_b32 s2, s112; GFX67-NEXT: s_mov_b32 s1, s313; GFX67-NEXT: s_load_dword s0, s[0:1], 0x014; GFX67-NEXT: s_load_dword s1, s[2:3], 0x215; GFX67-NEXT: s_waitcnt lgkmcnt(0)16; GFX67-NEXT: s_add_i32 s0, s0, s117; GFX67-NEXT: v_mov_b32_e32 v0, s018; GFX67-NEXT: ; return to shader part epilog19;20; GFX8-LABEL: load_i32:21; GFX8: ; %bb.0:22; GFX8-NEXT: s_mov_b32 s3, 023; GFX8-NEXT: s_mov_b32 s2, s124; GFX8-NEXT: s_mov_b32 s1, s325; GFX8-NEXT: s_load_dword s0, s[0:1], 0x026; GFX8-NEXT: s_load_dword s1, s[2:3], 0x827; GFX8-NEXT: s_waitcnt lgkmcnt(0)28; GFX8-NEXT: s_add_i32 s0, s0, s129; GFX8-NEXT: v_mov_b32_e32 v0, s030; GFX8-NEXT: ; return to shader part epilog31;32; GFX9-LABEL: load_i32:33; GFX9: ; %bb.0:34; GFX9-NEXT: s_mov_b32 s3, 035; GFX9-NEXT: s_mov_b32 s2, s136; GFX9-NEXT: s_mov_b32 s1, s337; GFX9-NEXT: s_load_dword s4, s[0:1], 0x038; GFX9-NEXT: s_load_dword s5, s[2:3], 0x839; GFX9-NEXT: s_waitcnt lgkmcnt(0)40; GFX9-NEXT: s_add_i32 s4, s4, s541; GFX9-NEXT: v_mov_b32_e32 v0, s442; GFX9-NEXT: ; return to shader part epilog43 %gep1 = getelementptr inbounds i32, ptr addrspace(6) %p1, i32 244 %r0 = load i32, ptr addrspace(6) %p045 %r1 = load i32, ptr addrspace(6) %gep146 %r = add i32 %r0, %r147 %r2 = bitcast i32 %r to float48 ret float %r249}50 51define amdgpu_vs <2 x float> @load_v2i32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {52; GFX67-LABEL: load_v2i32:53; GFX67: ; %bb.0:54; GFX67-NEXT: s_mov_b32 s3, 055; GFX67-NEXT: s_mov_b32 s2, s156; GFX67-NEXT: s_mov_b32 s1, s357; GFX67-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x458; GFX67-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x059; GFX67-NEXT: s_waitcnt lgkmcnt(0)60; GFX67-NEXT: s_add_i32 s0, s0, s261; GFX67-NEXT: s_add_i32 s1, s1, s362; GFX67-NEXT: v_mov_b32_e32 v0, s063; GFX67-NEXT: v_mov_b32_e32 v1, s164; GFX67-NEXT: ; return to shader part epilog65;66; GFX8-LABEL: load_v2i32:67; GFX8: ; %bb.0:68; GFX8-NEXT: s_mov_b32 s3, 069; GFX8-NEXT: s_mov_b32 s2, s170; GFX8-NEXT: s_mov_b32 s1, s371; GFX8-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x1072; GFX8-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x073; GFX8-NEXT: s_waitcnt lgkmcnt(0)74; GFX8-NEXT: s_add_i32 s0, s0, s275; GFX8-NEXT: s_add_i32 s1, s1, s376; GFX8-NEXT: v_mov_b32_e32 v0, s077; GFX8-NEXT: v_mov_b32_e32 v1, s178; GFX8-NEXT: ; return to shader part epilog79;80; GFX9-LABEL: load_v2i32:81; GFX9: ; %bb.0:82; GFX9-NEXT: s_mov_b32 s2, s183; GFX9-NEXT: s_mov_b32 s3, 084; GFX9-NEXT: s_mov_b32 s1, s385; GFX9-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x1086; GFX9-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x087; GFX9-NEXT: s_waitcnt lgkmcnt(0)88; GFX9-NEXT: s_add_i32 s0, s6, s489; GFX9-NEXT: s_add_i32 s1, s7, s590; GFX9-NEXT: v_mov_b32_e32 v0, s091; GFX9-NEXT: v_mov_b32_e32 v1, s192; GFX9-NEXT: ; return to shader part epilog93 %gep1 = getelementptr inbounds <2 x i32>, ptr addrspace(6) %p1, i32 294 %r0 = load <2 x i32>, ptr addrspace(6) %p095 %r1 = load <2 x i32>, ptr addrspace(6) %gep196 %r = add <2 x i32> %r0, %r197 %r2 = bitcast <2 x i32> %r to <2 x float>98 ret <2 x float> %r299}100 101define amdgpu_vs <4 x float> @load_v4i32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {102; GFX67-LABEL: load_v4i32:103; GFX67: ; %bb.0:104; GFX67-NEXT: s_mov_b32 s3, 0105; GFX67-NEXT: s_mov_b32 s2, s1106; GFX67-NEXT: s_mov_b32 s1, s3107; GFX67-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x8108; GFX67-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x0109; GFX67-NEXT: s_waitcnt lgkmcnt(0)110; GFX67-NEXT: s_add_i32 s0, s0, s4111; GFX67-NEXT: s_add_i32 s1, s1, s5112; GFX67-NEXT: s_add_i32 s2, s2, s6113; GFX67-NEXT: s_add_i32 s3, s3, s7114; GFX67-NEXT: v_mov_b32_e32 v0, s0115; GFX67-NEXT: v_mov_b32_e32 v1, s1116; GFX67-NEXT: v_mov_b32_e32 v2, s2117; GFX67-NEXT: v_mov_b32_e32 v3, s3118; GFX67-NEXT: ; return to shader part epilog119;120; GFX8-LABEL: load_v4i32:121; GFX8: ; %bb.0:122; GFX8-NEXT: s_mov_b32 s3, 0123; GFX8-NEXT: s_mov_b32 s2, s1124; GFX8-NEXT: s_mov_b32 s1, s3125; GFX8-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x20126; GFX8-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x0127; GFX8-NEXT: s_waitcnt lgkmcnt(0)128; GFX8-NEXT: s_add_i32 s0, s0, s4129; GFX8-NEXT: s_add_i32 s1, s1, s5130; GFX8-NEXT: s_add_i32 s2, s2, s6131; GFX8-NEXT: s_add_i32 s3, s3, s7132; GFX8-NEXT: v_mov_b32_e32 v0, s0133; GFX8-NEXT: v_mov_b32_e32 v1, s1134; GFX8-NEXT: v_mov_b32_e32 v2, s2135; GFX8-NEXT: v_mov_b32_e32 v3, s3136; GFX8-NEXT: ; return to shader part epilog137;138; GFX9-LABEL: load_v4i32:139; GFX9: ; %bb.0:140; GFX9-NEXT: s_mov_b32 s2, s1141; GFX9-NEXT: s_mov_b32 s3, 0142; GFX9-NEXT: s_mov_b32 s1, s3143; GFX9-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x20144; GFX9-NEXT: s_load_dwordx4 s[8:11], s[0:1], 0x0145; GFX9-NEXT: s_waitcnt lgkmcnt(0)146; GFX9-NEXT: s_add_i32 s0, s8, s4147; GFX9-NEXT: s_add_i32 s1, s9, s5148; GFX9-NEXT: s_add_i32 s2, s10, s6149; GFX9-NEXT: s_add_i32 s3, s11, s7150; GFX9-NEXT: v_mov_b32_e32 v0, s0151; GFX9-NEXT: v_mov_b32_e32 v1, s1152; GFX9-NEXT: v_mov_b32_e32 v2, s2153; GFX9-NEXT: v_mov_b32_e32 v3, s3154; GFX9-NEXT: ; return to shader part epilog155 %gep1 = getelementptr inbounds <4 x i32>, ptr addrspace(6) %p1, i32 2156 %r0 = load <4 x i32>, ptr addrspace(6) %p0157 %r1 = load <4 x i32>, ptr addrspace(6) %gep1158 %r = add <4 x i32> %r0, %r1159 %r2 = bitcast <4 x i32> %r to <4 x float>160 ret <4 x float> %r2161}162 163define amdgpu_vs <8 x float> @load_v8i32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {164; GFX67-LABEL: load_v8i32:165; GFX67: ; %bb.0:166; GFX67-NEXT: s_mov_b32 s2, s1167; GFX67-NEXT: s_mov_b32 s3, 0168; GFX67-NEXT: s_mov_b32 s1, s3169; GFX67-NEXT: s_load_dwordx8 s[4:11], s[2:3], 0x10170; GFX67-NEXT: s_load_dwordx8 s[12:19], s[0:1], 0x0171; GFX67-NEXT: s_waitcnt lgkmcnt(0)172; GFX67-NEXT: s_add_i32 s0, s12, s4173; GFX67-NEXT: s_add_i32 s1, s13, s5174; GFX67-NEXT: s_add_i32 s2, s14, s6175; GFX67-NEXT: s_add_i32 s3, s15, s7176; GFX67-NEXT: s_add_i32 s4, s16, s8177; GFX67-NEXT: s_add_i32 s5, s17, s9178; GFX67-NEXT: s_add_i32 s6, s18, s10179; GFX67-NEXT: s_add_i32 s7, s19, s11180; GFX67-NEXT: v_mov_b32_e32 v0, s0181; GFX67-NEXT: v_mov_b32_e32 v1, s1182; GFX67-NEXT: v_mov_b32_e32 v2, s2183; GFX67-NEXT: v_mov_b32_e32 v3, s3184; GFX67-NEXT: v_mov_b32_e32 v4, s4185; GFX67-NEXT: v_mov_b32_e32 v5, s5186; GFX67-NEXT: v_mov_b32_e32 v6, s6187; GFX67-NEXT: v_mov_b32_e32 v7, s7188; GFX67-NEXT: ; return to shader part epilog189;190; GFX89-LABEL: load_v8i32:191; GFX89: ; %bb.0:192; GFX89-NEXT: s_mov_b32 s2, s1193; GFX89-NEXT: s_mov_b32 s3, 0194; GFX89-NEXT: s_mov_b32 s1, s3195; GFX89-NEXT: s_load_dwordx8 s[4:11], s[2:3], 0x40196; GFX89-NEXT: s_load_dwordx8 s[12:19], s[0:1], 0x0197; GFX89-NEXT: s_waitcnt lgkmcnt(0)198; GFX89-NEXT: s_add_i32 s0, s12, s4199; GFX89-NEXT: s_add_i32 s1, s13, s5200; GFX89-NEXT: s_add_i32 s2, s14, s6201; GFX89-NEXT: s_add_i32 s3, s15, s7202; GFX89-NEXT: s_add_i32 s4, s16, s8203; GFX89-NEXT: s_add_i32 s5, s17, s9204; GFX89-NEXT: s_add_i32 s6, s18, s10205; GFX89-NEXT: s_add_i32 s7, s19, s11206; GFX89-NEXT: v_mov_b32_e32 v0, s0207; GFX89-NEXT: v_mov_b32_e32 v1, s1208; GFX89-NEXT: v_mov_b32_e32 v2, s2209; GFX89-NEXT: v_mov_b32_e32 v3, s3210; GFX89-NEXT: v_mov_b32_e32 v4, s4211; GFX89-NEXT: v_mov_b32_e32 v5, s5212; GFX89-NEXT: v_mov_b32_e32 v6, s6213; GFX89-NEXT: v_mov_b32_e32 v7, s7214; GFX89-NEXT: ; return to shader part epilog215 %gep1 = getelementptr inbounds <8 x i32>, ptr addrspace(6) %p1, i32 2216 %r0 = load <8 x i32>, ptr addrspace(6) %p0217 %r1 = load <8 x i32>, ptr addrspace(6) %gep1218 %r = add <8 x i32> %r0, %r1219 %r2 = bitcast <8 x i32> %r to <8 x float>220 ret <8 x float> %r2221}222 223define amdgpu_vs <16 x float> @load_v16i32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {224; GFX67-LABEL: load_v16i32:225; GFX67: ; %bb.0:226; GFX67-NEXT: s_mov_b32 s2, s1227; GFX67-NEXT: s_mov_b32 s3, 0228; GFX67-NEXT: s_mov_b32 s1, s3229; GFX67-NEXT: s_load_dwordx16 s[4:19], s[2:3], 0x20230; GFX67-NEXT: s_load_dwordx16 s[36:51], s[0:1], 0x0231; GFX67-NEXT: s_waitcnt lgkmcnt(0)232; GFX67-NEXT: s_add_i32 s0, s36, s4233; GFX67-NEXT: s_add_i32 s1, s37, s5234; GFX67-NEXT: s_add_i32 s2, s38, s6235; GFX67-NEXT: s_add_i32 s3, s39, s7236; GFX67-NEXT: s_add_i32 s4, s40, s8237; GFX67-NEXT: s_add_i32 s5, s41, s9238; GFX67-NEXT: s_add_i32 s6, s42, s10239; GFX67-NEXT: s_add_i32 s7, s43, s11240; GFX67-NEXT: s_add_i32 s8, s44, s12241; GFX67-NEXT: s_add_i32 s9, s45, s13242; GFX67-NEXT: s_add_i32 s10, s46, s14243; GFX67-NEXT: s_add_i32 s11, s47, s15244; GFX67-NEXT: s_add_i32 s12, s48, s16245; GFX67-NEXT: s_add_i32 s13, s49, s17246; GFX67-NEXT: s_add_i32 s14, s50, s18247; GFX67-NEXT: s_add_i32 s15, s51, s19248; GFX67-NEXT: v_mov_b32_e32 v0, s0249; GFX67-NEXT: v_mov_b32_e32 v1, s1250; GFX67-NEXT: v_mov_b32_e32 v2, s2251; GFX67-NEXT: v_mov_b32_e32 v3, s3252; GFX67-NEXT: v_mov_b32_e32 v4, s4253; GFX67-NEXT: v_mov_b32_e32 v5, s5254; GFX67-NEXT: v_mov_b32_e32 v6, s6255; GFX67-NEXT: v_mov_b32_e32 v7, s7256; GFX67-NEXT: v_mov_b32_e32 v8, s8257; GFX67-NEXT: v_mov_b32_e32 v9, s9258; GFX67-NEXT: v_mov_b32_e32 v10, s10259; GFX67-NEXT: v_mov_b32_e32 v11, s11260; GFX67-NEXT: v_mov_b32_e32 v12, s12261; GFX67-NEXT: v_mov_b32_e32 v13, s13262; GFX67-NEXT: v_mov_b32_e32 v14, s14263; GFX67-NEXT: v_mov_b32_e32 v15, s15264; GFX67-NEXT: ; return to shader part epilog265;266; GFX89-LABEL: load_v16i32:267; GFX89: ; %bb.0:268; GFX89-NEXT: s_mov_b32 s2, s1269; GFX89-NEXT: s_mov_b32 s3, 0270; GFX89-NEXT: s_mov_b32 s1, s3271; GFX89-NEXT: s_load_dwordx16 s[4:19], s[2:3], 0x80272; GFX89-NEXT: s_load_dwordx16 s[36:51], s[0:1], 0x0273; GFX89-NEXT: s_waitcnt lgkmcnt(0)274; GFX89-NEXT: s_add_i32 s0, s36, s4275; GFX89-NEXT: s_add_i32 s1, s37, s5276; GFX89-NEXT: s_add_i32 s2, s38, s6277; GFX89-NEXT: s_add_i32 s3, s39, s7278; GFX89-NEXT: s_add_i32 s4, s40, s8279; GFX89-NEXT: s_add_i32 s5, s41, s9280; GFX89-NEXT: s_add_i32 s6, s42, s10281; GFX89-NEXT: s_add_i32 s7, s43, s11282; GFX89-NEXT: s_add_i32 s8, s44, s12283; GFX89-NEXT: s_add_i32 s9, s45, s13284; GFX89-NEXT: s_add_i32 s10, s46, s14285; GFX89-NEXT: s_add_i32 s11, s47, s15286; GFX89-NEXT: s_add_i32 s12, s48, s16287; GFX89-NEXT: s_add_i32 s13, s49, s17288; GFX89-NEXT: s_add_i32 s14, s50, s18289; GFX89-NEXT: s_add_i32 s15, s51, s19290; GFX89-NEXT: v_mov_b32_e32 v0, s0291; GFX89-NEXT: v_mov_b32_e32 v1, s1292; GFX89-NEXT: v_mov_b32_e32 v2, s2293; GFX89-NEXT: v_mov_b32_e32 v3, s3294; GFX89-NEXT: v_mov_b32_e32 v4, s4295; GFX89-NEXT: v_mov_b32_e32 v5, s5296; GFX89-NEXT: v_mov_b32_e32 v6, s6297; GFX89-NEXT: v_mov_b32_e32 v7, s7298; GFX89-NEXT: v_mov_b32_e32 v8, s8299; GFX89-NEXT: v_mov_b32_e32 v9, s9300; GFX89-NEXT: v_mov_b32_e32 v10, s10301; GFX89-NEXT: v_mov_b32_e32 v11, s11302; GFX89-NEXT: v_mov_b32_e32 v12, s12303; GFX89-NEXT: v_mov_b32_e32 v13, s13304; GFX89-NEXT: v_mov_b32_e32 v14, s14305; GFX89-NEXT: v_mov_b32_e32 v15, s15306; GFX89-NEXT: ; return to shader part epilog307 %gep1 = getelementptr inbounds <16 x i32>, ptr addrspace(6) %p1, i32 2308 %r0 = load <16 x i32>, ptr addrspace(6) %p0309 %r1 = load <16 x i32>, ptr addrspace(6) %gep1310 %r = add <16 x i32> %r0, %r1311 %r2 = bitcast <16 x i32> %r to <16 x float>312 ret <16 x float> %r2313}314 315define amdgpu_vs float @load_f32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {316; GFX67-LABEL: load_f32:317; GFX67: ; %bb.0:318; GFX67-NEXT: s_mov_b32 s2, s1319; GFX67-NEXT: s_mov_b32 s3, 0320; GFX67-NEXT: s_mov_b32 s1, s3321; GFX67-NEXT: s_load_dword s2, s[2:3], 0x2322; GFX67-NEXT: s_load_dword s0, s[0:1], 0x0323; GFX67-NEXT: s_waitcnt lgkmcnt(0)324; GFX67-NEXT: v_mov_b32_e32 v0, s2325; GFX67-NEXT: v_add_f32_e32 v0, s0, v0326; GFX67-NEXT: ; return to shader part epilog327;328; GFX8-LABEL: load_f32:329; GFX8: ; %bb.0:330; GFX8-NEXT: s_mov_b32 s2, s1331; GFX8-NEXT: s_mov_b32 s3, 0332; GFX8-NEXT: s_mov_b32 s1, s3333; GFX8-NEXT: s_load_dword s2, s[2:3], 0x8334; GFX8-NEXT: s_load_dword s0, s[0:1], 0x0335; GFX8-NEXT: s_waitcnt lgkmcnt(0)336; GFX8-NEXT: v_mov_b32_e32 v0, s2337; GFX8-NEXT: v_add_f32_e32 v0, s0, v0338; GFX8-NEXT: ; return to shader part epilog339;340; GFX9-LABEL: load_f32:341; GFX9: ; %bb.0:342; GFX9-NEXT: s_mov_b32 s2, s1343; GFX9-NEXT: s_mov_b32 s3, 0344; GFX9-NEXT: s_mov_b32 s1, s3345; GFX9-NEXT: s_load_dword s4, s[2:3], 0x8346; GFX9-NEXT: s_load_dword s5, s[0:1], 0x0347; GFX9-NEXT: s_waitcnt lgkmcnt(0)348; GFX9-NEXT: v_mov_b32_e32 v0, s4349; GFX9-NEXT: v_add_f32_e32 v0, s5, v0350; GFX9-NEXT: ; return to shader part epilog351 %gep1 = getelementptr inbounds float, ptr addrspace(6) %p1, i32 2352 %r0 = load float, ptr addrspace(6) %p0353 %r1 = load float, ptr addrspace(6) %gep1354 %r = fadd float %r0, %r1355 ret float %r356}357 358define amdgpu_vs <2 x float> @load_v2f32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {359; GFX67-LABEL: load_v2f32:360; GFX67: ; %bb.0:361; GFX67-NEXT: s_mov_b32 s3, 0362; GFX67-NEXT: s_mov_b32 s2, s1363; GFX67-NEXT: s_mov_b32 s1, s3364; GFX67-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x4365; GFX67-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x0366; GFX67-NEXT: s_waitcnt lgkmcnt(0)367; GFX67-NEXT: v_mov_b32_e32 v0, s2368; GFX67-NEXT: v_mov_b32_e32 v1, s3369; GFX67-NEXT: v_add_f32_e32 v0, s0, v0370; GFX67-NEXT: v_add_f32_e32 v1, s1, v1371; GFX67-NEXT: ; return to shader part epilog372;373; GFX8-LABEL: load_v2f32:374; GFX8: ; %bb.0:375; GFX8-NEXT: s_mov_b32 s3, 0376; GFX8-NEXT: s_mov_b32 s2, s1377; GFX8-NEXT: s_mov_b32 s1, s3378; GFX8-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x10379; GFX8-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x0380; GFX8-NEXT: s_waitcnt lgkmcnt(0)381; GFX8-NEXT: v_mov_b32_e32 v0, s2382; GFX8-NEXT: v_mov_b32_e32 v1, s3383; GFX8-NEXT: v_add_f32_e32 v0, s0, v0384; GFX8-NEXT: v_add_f32_e32 v1, s1, v1385; GFX8-NEXT: ; return to shader part epilog386;387; GFX9-LABEL: load_v2f32:388; GFX9: ; %bb.0:389; GFX9-NEXT: s_mov_b32 s2, s1390; GFX9-NEXT: s_mov_b32 s3, 0391; GFX9-NEXT: s_mov_b32 s1, s3392; GFX9-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x10393; GFX9-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x0394; GFX9-NEXT: s_waitcnt lgkmcnt(0)395; GFX9-NEXT: v_mov_b32_e32 v0, s4396; GFX9-NEXT: v_mov_b32_e32 v1, s5397; GFX9-NEXT: v_add_f32_e32 v0, s6, v0398; GFX9-NEXT: v_add_f32_e32 v1, s7, v1399; GFX9-NEXT: ; return to shader part epilog400 %gep1 = getelementptr inbounds <2 x float>, ptr addrspace(6) %p1, i32 2401 %r0 = load <2 x float>, ptr addrspace(6) %p0402 %r1 = load <2 x float>, ptr addrspace(6) %gep1403 %r = fadd <2 x float> %r0, %r1404 ret <2 x float> %r405}406 407define amdgpu_vs <4 x float> @load_v4f32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {408; GFX67-LABEL: load_v4f32:409; GFX67: ; %bb.0:410; GFX67-NEXT: s_mov_b32 s3, 0411; GFX67-NEXT: s_mov_b32 s2, s1412; GFX67-NEXT: s_mov_b32 s1, s3413; GFX67-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x8414; GFX67-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x0415; GFX67-NEXT: s_waitcnt lgkmcnt(0)416; GFX67-NEXT: v_mov_b32_e32 v0, s4417; GFX67-NEXT: v_mov_b32_e32 v1, s5418; GFX67-NEXT: v_mov_b32_e32 v2, s6419; GFX67-NEXT: v_mov_b32_e32 v3, s7420; GFX67-NEXT: v_add_f32_e32 v0, s0, v0421; GFX67-NEXT: v_add_f32_e32 v1, s1, v1422; GFX67-NEXT: v_add_f32_e32 v2, s2, v2423; GFX67-NEXT: v_add_f32_e32 v3, s3, v3424; GFX67-NEXT: ; return to shader part epilog425;426; GFX8-LABEL: load_v4f32:427; GFX8: ; %bb.0:428; GFX8-NEXT: s_mov_b32 s3, 0429; GFX8-NEXT: s_mov_b32 s2, s1430; GFX8-NEXT: s_mov_b32 s1, s3431; GFX8-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x20432; GFX8-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x0433; GFX8-NEXT: s_waitcnt lgkmcnt(0)434; GFX8-NEXT: v_mov_b32_e32 v0, s4435; GFX8-NEXT: v_mov_b32_e32 v1, s5436; GFX8-NEXT: v_mov_b32_e32 v2, s6437; GFX8-NEXT: v_mov_b32_e32 v3, s7438; GFX8-NEXT: v_add_f32_e32 v0, s0, v0439; GFX8-NEXT: v_add_f32_e32 v1, s1, v1440; GFX8-NEXT: v_add_f32_e32 v2, s2, v2441; GFX8-NEXT: v_add_f32_e32 v3, s3, v3442; GFX8-NEXT: ; return to shader part epilog443;444; GFX9-LABEL: load_v4f32:445; GFX9: ; %bb.0:446; GFX9-NEXT: s_mov_b32 s2, s1447; GFX9-NEXT: s_mov_b32 s3, 0448; GFX9-NEXT: s_mov_b32 s1, s3449; GFX9-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x20450; GFX9-NEXT: s_load_dwordx4 s[8:11], s[0:1], 0x0451; GFX9-NEXT: s_waitcnt lgkmcnt(0)452; GFX9-NEXT: v_mov_b32_e32 v0, s4453; GFX9-NEXT: v_mov_b32_e32 v1, s5454; GFX9-NEXT: v_mov_b32_e32 v2, s6455; GFX9-NEXT: v_mov_b32_e32 v3, s7456; GFX9-NEXT: v_add_f32_e32 v0, s8, v0457; GFX9-NEXT: v_add_f32_e32 v1, s9, v1458; GFX9-NEXT: v_add_f32_e32 v2, s10, v2459; GFX9-NEXT: v_add_f32_e32 v3, s11, v3460; GFX9-NEXT: ; return to shader part epilog461 %gep1 = getelementptr inbounds <4 x float>, ptr addrspace(6) %p1, i32 2462 %r0 = load <4 x float>, ptr addrspace(6) %p0463 %r1 = load <4 x float>, ptr addrspace(6) %gep1464 %r = fadd <4 x float> %r0, %r1465 ret <4 x float> %r466}467 468define amdgpu_vs <8 x float> @load_v8f32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {469; GFX67-LABEL: load_v8f32:470; GFX67: ; %bb.0:471; GFX67-NEXT: s_mov_b32 s2, s1472; GFX67-NEXT: s_mov_b32 s3, 0473; GFX67-NEXT: s_mov_b32 s1, s3474; GFX67-NEXT: s_load_dwordx8 s[4:11], s[2:3], 0x10475; GFX67-NEXT: s_load_dwordx8 s[12:19], s[0:1], 0x0476; GFX67-NEXT: s_waitcnt lgkmcnt(0)477; GFX67-NEXT: v_mov_b32_e32 v0, s4478; GFX67-NEXT: v_mov_b32_e32 v1, s5479; GFX67-NEXT: v_mov_b32_e32 v2, s6480; GFX67-NEXT: v_mov_b32_e32 v3, s7481; GFX67-NEXT: v_mov_b32_e32 v4, s8482; GFX67-NEXT: v_mov_b32_e32 v5, s9483; GFX67-NEXT: v_mov_b32_e32 v6, s10484; GFX67-NEXT: v_mov_b32_e32 v7, s11485; GFX67-NEXT: v_add_f32_e32 v0, s12, v0486; GFX67-NEXT: v_add_f32_e32 v1, s13, v1487; GFX67-NEXT: v_add_f32_e32 v2, s14, v2488; GFX67-NEXT: v_add_f32_e32 v3, s15, v3489; GFX67-NEXT: v_add_f32_e32 v4, s16, v4490; GFX67-NEXT: v_add_f32_e32 v5, s17, v5491; GFX67-NEXT: v_add_f32_e32 v6, s18, v6492; GFX67-NEXT: v_add_f32_e32 v7, s19, v7493; GFX67-NEXT: ; return to shader part epilog494;495; GFX89-LABEL: load_v8f32:496; GFX89: ; %bb.0:497; GFX89-NEXT: s_mov_b32 s2, s1498; GFX89-NEXT: s_mov_b32 s3, 0499; GFX89-NEXT: s_mov_b32 s1, s3500; GFX89-NEXT: s_load_dwordx8 s[4:11], s[2:3], 0x40501; GFX89-NEXT: s_load_dwordx8 s[12:19], s[0:1], 0x0502; GFX89-NEXT: s_waitcnt lgkmcnt(0)503; GFX89-NEXT: v_mov_b32_e32 v0, s4504; GFX89-NEXT: v_mov_b32_e32 v1, s5505; GFX89-NEXT: v_mov_b32_e32 v2, s6506; GFX89-NEXT: v_mov_b32_e32 v3, s7507; GFX89-NEXT: v_mov_b32_e32 v4, s8508; GFX89-NEXT: v_mov_b32_e32 v5, s9509; GFX89-NEXT: v_mov_b32_e32 v6, s10510; GFX89-NEXT: v_mov_b32_e32 v7, s11511; GFX89-NEXT: v_add_f32_e32 v0, s12, v0512; GFX89-NEXT: v_add_f32_e32 v1, s13, v1513; GFX89-NEXT: v_add_f32_e32 v2, s14, v2514; GFX89-NEXT: v_add_f32_e32 v3, s15, v3515; GFX89-NEXT: v_add_f32_e32 v4, s16, v4516; GFX89-NEXT: v_add_f32_e32 v5, s17, v5517; GFX89-NEXT: v_add_f32_e32 v6, s18, v6518; GFX89-NEXT: v_add_f32_e32 v7, s19, v7519; GFX89-NEXT: ; return to shader part epilog520 %gep1 = getelementptr inbounds <8 x float>, ptr addrspace(6) %p1, i32 2521 %r0 = load <8 x float>, ptr addrspace(6) %p0522 %r1 = load <8 x float>, ptr addrspace(6) %gep1523 %r = fadd <8 x float> %r0, %r1524 ret <8 x float> %r525}526 527define amdgpu_vs <16 x float> @load_v16f32(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {528; GFX67-LABEL: load_v16f32:529; GFX67: ; %bb.0:530; GFX67-NEXT: s_mov_b32 s3, 0531; GFX67-NEXT: s_mov_b32 s2, s1532; GFX67-NEXT: s_mov_b32 s1, s3533; GFX67-NEXT: s_load_dwordx16 s[16:31], s[2:3], 0x20534; GFX67-NEXT: s_load_dwordx16 s[0:15], s[0:1], 0x0535; GFX67-NEXT: s_waitcnt lgkmcnt(0)536; GFX67-NEXT: v_mov_b32_e32 v0, s16537; GFX67-NEXT: v_mov_b32_e32 v1, s17538; GFX67-NEXT: v_mov_b32_e32 v2, s18539; GFX67-NEXT: v_mov_b32_e32 v3, s19540; GFX67-NEXT: v_mov_b32_e32 v4, s20541; GFX67-NEXT: v_mov_b32_e32 v5, s21542; GFX67-NEXT: v_mov_b32_e32 v6, s22543; GFX67-NEXT: v_mov_b32_e32 v7, s23544; GFX67-NEXT: v_mov_b32_e32 v8, s24545; GFX67-NEXT: v_mov_b32_e32 v9, s25546; GFX67-NEXT: v_mov_b32_e32 v10, s26547; GFX67-NEXT: v_mov_b32_e32 v11, s27548; GFX67-NEXT: v_mov_b32_e32 v12, s28549; GFX67-NEXT: v_mov_b32_e32 v13, s29550; GFX67-NEXT: v_mov_b32_e32 v14, s30551; GFX67-NEXT: v_mov_b32_e32 v15, s31552; GFX67-NEXT: v_add_f32_e32 v0, s0, v0553; GFX67-NEXT: v_add_f32_e32 v1, s1, v1554; GFX67-NEXT: v_add_f32_e32 v2, s2, v2555; GFX67-NEXT: v_add_f32_e32 v3, s3, v3556; GFX67-NEXT: v_add_f32_e32 v4, s4, v4557; GFX67-NEXT: v_add_f32_e32 v5, s5, v5558; GFX67-NEXT: v_add_f32_e32 v6, s6, v6559; GFX67-NEXT: v_add_f32_e32 v7, s7, v7560; GFX67-NEXT: v_add_f32_e32 v8, s8, v8561; GFX67-NEXT: v_add_f32_e32 v9, s9, v9562; GFX67-NEXT: v_add_f32_e32 v10, s10, v10563; GFX67-NEXT: v_add_f32_e32 v11, s11, v11564; GFX67-NEXT: v_add_f32_e32 v12, s12, v12565; GFX67-NEXT: v_add_f32_e32 v13, s13, v13566; GFX67-NEXT: v_add_f32_e32 v14, s14, v14567; GFX67-NEXT: v_add_f32_e32 v15, s15, v15568; GFX67-NEXT: ; return to shader part epilog569;570; GFX8-LABEL: load_v16f32:571; GFX8: ; %bb.0:572; GFX8-NEXT: s_mov_b32 s3, 0573; GFX8-NEXT: s_mov_b32 s2, s1574; GFX8-NEXT: s_mov_b32 s1, s3575; GFX8-NEXT: s_load_dwordx16 s[16:31], s[2:3], 0x80576; GFX8-NEXT: s_load_dwordx16 s[0:15], s[0:1], 0x0577; GFX8-NEXT: s_waitcnt lgkmcnt(0)578; GFX8-NEXT: v_mov_b32_e32 v0, s16579; GFX8-NEXT: v_mov_b32_e32 v1, s17580; GFX8-NEXT: v_mov_b32_e32 v2, s18581; GFX8-NEXT: v_mov_b32_e32 v3, s19582; GFX8-NEXT: v_mov_b32_e32 v4, s20583; GFX8-NEXT: v_mov_b32_e32 v5, s21584; GFX8-NEXT: v_mov_b32_e32 v6, s22585; GFX8-NEXT: v_mov_b32_e32 v7, s23586; GFX8-NEXT: v_mov_b32_e32 v8, s24587; GFX8-NEXT: v_mov_b32_e32 v9, s25588; GFX8-NEXT: v_mov_b32_e32 v10, s26589; GFX8-NEXT: v_mov_b32_e32 v11, s27590; GFX8-NEXT: v_mov_b32_e32 v12, s28591; GFX8-NEXT: v_mov_b32_e32 v13, s29592; GFX8-NEXT: v_mov_b32_e32 v14, s30593; GFX8-NEXT: v_mov_b32_e32 v15, s31594; GFX8-NEXT: v_add_f32_e32 v0, s0, v0595; GFX8-NEXT: v_add_f32_e32 v1, s1, v1596; GFX8-NEXT: v_add_f32_e32 v2, s2, v2597; GFX8-NEXT: v_add_f32_e32 v3, s3, v3598; GFX8-NEXT: v_add_f32_e32 v4, s4, v4599; GFX8-NEXT: v_add_f32_e32 v5, s5, v5600; GFX8-NEXT: v_add_f32_e32 v6, s6, v6601; GFX8-NEXT: v_add_f32_e32 v7, s7, v7602; GFX8-NEXT: v_add_f32_e32 v8, s8, v8603; GFX8-NEXT: v_add_f32_e32 v9, s9, v9604; GFX8-NEXT: v_add_f32_e32 v10, s10, v10605; GFX8-NEXT: v_add_f32_e32 v11, s11, v11606; GFX8-NEXT: v_add_f32_e32 v12, s12, v12607; GFX8-NEXT: v_add_f32_e32 v13, s13, v13608; GFX8-NEXT: v_add_f32_e32 v14, s14, v14609; GFX8-NEXT: v_add_f32_e32 v15, s15, v15610; GFX8-NEXT: ; return to shader part epilog611;612; GFX9-LABEL: load_v16f32:613; GFX9: ; %bb.0:614; GFX9-NEXT: s_mov_b32 s2, s1615; GFX9-NEXT: s_mov_b32 s3, 0616; GFX9-NEXT: s_mov_b32 s1, s3617; GFX9-NEXT: s_load_dwordx16 s[36:51], s[2:3], 0x80618; GFX9-NEXT: s_load_dwordx16 s[4:19], s[0:1], 0x0619; GFX9-NEXT: s_waitcnt lgkmcnt(0)620; GFX9-NEXT: v_mov_b32_e32 v0, s36621; GFX9-NEXT: v_mov_b32_e32 v1, s37622; GFX9-NEXT: v_mov_b32_e32 v2, s38623; GFX9-NEXT: v_mov_b32_e32 v3, s39624; GFX9-NEXT: v_mov_b32_e32 v4, s40625; GFX9-NEXT: v_mov_b32_e32 v5, s41626; GFX9-NEXT: v_mov_b32_e32 v6, s42627; GFX9-NEXT: v_mov_b32_e32 v7, s43628; GFX9-NEXT: v_mov_b32_e32 v8, s44629; GFX9-NEXT: v_mov_b32_e32 v9, s45630; GFX9-NEXT: v_mov_b32_e32 v10, s46631; GFX9-NEXT: v_mov_b32_e32 v11, s47632; GFX9-NEXT: v_mov_b32_e32 v12, s48633; GFX9-NEXT: v_mov_b32_e32 v13, s49634; GFX9-NEXT: v_mov_b32_e32 v14, s50635; GFX9-NEXT: v_mov_b32_e32 v15, s51636; GFX9-NEXT: v_add_f32_e32 v0, s4, v0637; GFX9-NEXT: v_add_f32_e32 v1, s5, v1638; GFX9-NEXT: v_add_f32_e32 v2, s6, v2639; GFX9-NEXT: v_add_f32_e32 v3, s7, v3640; GFX9-NEXT: v_add_f32_e32 v4, s8, v4641; GFX9-NEXT: v_add_f32_e32 v5, s9, v5642; GFX9-NEXT: v_add_f32_e32 v6, s10, v6643; GFX9-NEXT: v_add_f32_e32 v7, s11, v7644; GFX9-NEXT: v_add_f32_e32 v8, s12, v8645; GFX9-NEXT: v_add_f32_e32 v9, s13, v9646; GFX9-NEXT: v_add_f32_e32 v10, s14, v10647; GFX9-NEXT: v_add_f32_e32 v11, s15, v11648; GFX9-NEXT: v_add_f32_e32 v12, s16, v12649; GFX9-NEXT: v_add_f32_e32 v13, s17, v13650; GFX9-NEXT: v_add_f32_e32 v14, s18, v14651; GFX9-NEXT: v_add_f32_e32 v15, s19, v15652; GFX9-NEXT: ; return to shader part epilog653 %gep1 = getelementptr inbounds <16 x float>, ptr addrspace(6) %p1, i32 2654 %r0 = load <16 x float>, ptr addrspace(6) %p0655 %r1 = load <16 x float>, ptr addrspace(6) %gep1656 %r = fadd <16 x float> %r0, %r1657 ret <16 x float> %r658}659 660define amdgpu_vs i32 @load_i32_hi0(ptr addrspace(6) inreg %p) #1 {661; GFX67-LABEL: load_i32_hi0:662; GFX67: ; %bb.0:663; GFX67-NEXT: s_mov_b32 s1, 0664; GFX67-NEXT: s_load_dword s0, s[0:1], 0x0665; GFX67-NEXT: s_waitcnt lgkmcnt(0)666; GFX67-NEXT: ; return to shader part epilog667;668; GFX89-LABEL: load_i32_hi0:669; GFX89: ; %bb.0:670; GFX89-NEXT: s_mov_b32 s1, 0671; GFX89-NEXT: s_load_dword s0, s[0:1], 0x0672; GFX89-NEXT: s_waitcnt lgkmcnt(0)673; GFX89-NEXT: ; return to shader part epilog674 %r0 = load i32, ptr addrspace(6) %p675 ret i32 %r0676}677 678define amdgpu_vs i32 @load_i32_hi1(ptr addrspace(6) inreg %p) #2 {679; GFX67-LABEL: load_i32_hi1:680; GFX67: ; %bb.0:681; GFX67-NEXT: s_mov_b32 s1, 1682; GFX67-NEXT: s_load_dword s0, s[0:1], 0x0683; GFX67-NEXT: s_waitcnt lgkmcnt(0)684; GFX67-NEXT: ; return to shader part epilog685;686; GFX89-LABEL: load_i32_hi1:687; GFX89: ; %bb.0:688; GFX89-NEXT: s_mov_b32 s1, 1689; GFX89-NEXT: s_load_dword s0, s[0:1], 0x0690; GFX89-NEXT: s_waitcnt lgkmcnt(0)691; GFX89-NEXT: ; return to shader part epilog692 %r0 = load i32, ptr addrspace(6) %p693 ret i32 %r0694}695 696define amdgpu_vs i32 @load_i32_hiffff8000(ptr addrspace(6) inreg %p) #3 {697; GFX67-LABEL: load_i32_hiffff8000:698; GFX67: ; %bb.0:699; GFX67-NEXT: s_movk_i32 s1, 0x8000700; GFX67-NEXT: s_load_dword s0, s[0:1], 0x0701; GFX67-NEXT: s_waitcnt lgkmcnt(0)702; GFX67-NEXT: ; return to shader part epilog703;704; GFX89-LABEL: load_i32_hiffff8000:705; GFX89: ; %bb.0:706; GFX89-NEXT: s_movk_i32 s1, 0x8000707; GFX89-NEXT: s_load_dword s0, s[0:1], 0x0708; GFX89-NEXT: s_waitcnt lgkmcnt(0)709; GFX89-NEXT: ; return to shader part epilog710 %r0 = load i32, ptr addrspace(6) %p711 ret i32 %r0712}713 714define amdgpu_vs i32 @load_i32_hifffffff0(ptr addrspace(6) inreg %p) #4 {715; GFX67-LABEL: load_i32_hifffffff0:716; GFX67: ; %bb.0:717; GFX67-NEXT: s_mov_b32 s1, -16718; GFX67-NEXT: s_load_dword s0, s[0:1], 0x0719; GFX67-NEXT: s_waitcnt lgkmcnt(0)720; GFX67-NEXT: ; return to shader part epilog721;722; GFX89-LABEL: load_i32_hifffffff0:723; GFX89: ; %bb.0:724; GFX89-NEXT: s_mov_b32 s1, -16725; GFX89-NEXT: s_load_dword s0, s[0:1], 0x0726; GFX89-NEXT: s_waitcnt lgkmcnt(0)727; GFX89-NEXT: ; return to shader part epilog728 %r0 = load i32, ptr addrspace(6) %p729 ret i32 %r0730}731 732define amdgpu_ps <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> @load_sampler(ptr addrspace(6) inreg noalias dereferenceable(18446744073709551615), ptr addrspace(6) inreg noalias dereferenceable(18446744073709551615), ptr addrspace(6) inreg noalias dereferenceable(18446744073709551615), ptr addrspace(6) inreg noalias dereferenceable(18446744073709551615), float inreg, i32 inreg, <2 x i32>, <2 x i32>, <2 x i32>, <3 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, float, float, float, float, float, i32, i32, float, i32) #5 {733; GFX6-LABEL: load_sampler:734; GFX6: ; %bb.0: ; %main_body735; GFX6-NEXT: s_mov_b64 s[6:7], exec736; GFX6-NEXT: s_wqm_b64 exec, exec737; GFX6-NEXT: s_mov_b32 m0, s5738; GFX6-NEXT: v_interp_mov_f32 v0, p0, attr0.x739; GFX6-NEXT: v_lshlrev_b32_e32 v0, 6, v0740; GFX6-NEXT: v_add_i32_e32 v0, vcc, s1, v0741; GFX6-NEXT: v_readfirstlane_b32 s0, v0742; GFX6-NEXT: s_mov_b32 s1, 0743; GFX6-NEXT: s_nop 2744; GFX6-NEXT: s_load_dwordx8 s[8:15], s[0:1], 0x0745; GFX6-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0xc746; GFX6-NEXT: v_mov_b32_e32 v0, 0747; GFX6-NEXT: s_and_b64 exec, exec, s[6:7]748; GFX6-NEXT: s_waitcnt lgkmcnt(0)749; GFX6-NEXT: image_sample v[0:3], v0, s[8:15], s[0:3] dmask:0xf750; GFX6-NEXT: s_waitcnt vmcnt(0)751; GFX6-NEXT: ; return to shader part epilog752;753; GFX7-LABEL: load_sampler:754; GFX7: ; %bb.0: ; %main_body755; GFX7-NEXT: s_mov_b64 s[6:7], exec756; GFX7-NEXT: s_wqm_b64 exec, exec757; GFX7-NEXT: s_mov_b32 m0, s5758; GFX7-NEXT: v_interp_mov_f32 v0, p0, attr0.x759; GFX7-NEXT: v_lshlrev_b32_e32 v0, 6, v0760; GFX7-NEXT: v_add_i32_e32 v0, vcc, s1, v0761; GFX7-NEXT: v_readfirstlane_b32 s0, v0762; GFX7-NEXT: s_mov_b32 s1, 0763; GFX7-NEXT: s_load_dwordx8 s[8:15], s[0:1], 0x0764; GFX7-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0xc765; GFX7-NEXT: v_mov_b32_e32 v0, 0766; GFX7-NEXT: s_and_b64 exec, exec, s[6:7]767; GFX7-NEXT: s_waitcnt lgkmcnt(0)768; GFX7-NEXT: image_sample v[0:3], v0, s[8:15], s[0:3] dmask:0xf769; GFX7-NEXT: s_waitcnt vmcnt(0)770; GFX7-NEXT: ; return to shader part epilog771;772; GFX8-LABEL: load_sampler:773; GFX8: ; %bb.0: ; %main_body774; GFX8-NEXT: s_mov_b64 s[6:7], exec775; GFX8-NEXT: s_wqm_b64 exec, exec776; GFX8-NEXT: s_mov_b32 m0, s5777; GFX8-NEXT: v_interp_mov_f32_e32 v0, p0, attr0.x778; GFX8-NEXT: v_lshlrev_b32_e32 v0, 6, v0779; GFX8-NEXT: v_add_u32_e32 v0, vcc, s1, v0780; GFX8-NEXT: v_readfirstlane_b32 s0, v0781; GFX8-NEXT: s_mov_b32 s1, 0782; GFX8-NEXT: s_load_dwordx8 s[8:15], s[0:1], 0x0783; GFX8-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x30784; GFX8-NEXT: v_mov_b32_e32 v0, 0785; GFX8-NEXT: s_and_b64 exec, exec, s[6:7]786; GFX8-NEXT: s_waitcnt lgkmcnt(0)787; GFX8-NEXT: image_sample v[0:3], v0, s[8:15], s[0:3] dmask:0xf788; GFX8-NEXT: s_waitcnt vmcnt(0)789; GFX8-NEXT: ; return to shader part epilog790;791; GFX9-LABEL: load_sampler:792; GFX9: ; %bb.0: ; %main_body793; GFX9-NEXT: s_mov_b64 s[6:7], exec794; GFX9-NEXT: s_wqm_b64 exec, exec795; GFX9-NEXT: s_mov_b32 m0, s5796; GFX9-NEXT: s_mov_b32 s17, 0797; GFX9-NEXT: v_interp_mov_f32_e32 v0, p0, attr0.x798; GFX9-NEXT: v_lshl_add_u32 v0, v0, 6, s1799; GFX9-NEXT: v_readfirstlane_b32 s16, v0800; GFX9-NEXT: s_load_dwordx8 s[8:15], s[16:17], 0x0801; GFX9-NEXT: s_load_dwordx4 s[0:3], s[16:17], 0x30802; GFX9-NEXT: v_mov_b32_e32 v0, 0803; GFX9-NEXT: s_and_b64 exec, exec, s[6:7]804; GFX9-NEXT: s_waitcnt lgkmcnt(0)805; GFX9-NEXT: image_sample v[0:3], v0, s[8:15], s[0:3] dmask:0xf806; GFX9-NEXT: s_waitcnt vmcnt(0)807; GFX9-NEXT: ; return to shader part epilog808main_body:809 %22 = call nsz float @llvm.amdgcn.interp.mov(i32 2, i32 0, i32 0, i32 %5) #8810 %23 = bitcast float %22 to i32811 %24 = shl i32 %23, 1812 %25 = getelementptr inbounds [0 x <8 x i32>], ptr addrspace(6) %1, i32 0, i32 %24, !amdgpu.uniform !0813 %26 = load <8 x i32>, ptr addrspace(6) %25, align 32, !invariant.load !0814 %27 = shl i32 %23, 2815 %28 = getelementptr [0 x <4 x i32>], ptr addrspace(6) %1, i32 0, i32 %27, !amdgpu.uniform !0816 %29 = getelementptr inbounds [0 x <4 x i32>], ptr addrspace(6) %28, i32 0, i32 3, !amdgpu.uniform !0817 %30 = load <4 x i32>, ptr addrspace(6) %29, align 16, !invariant.load !0818 %31 = call nsz <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float 0.0, <8 x i32> %26, <4 x i32> %30, i1 0, i32 0, i32 0) #8819 %32 = extractelement <4 x float> %31, i32 0820 %33 = extractelement <4 x float> %31, i32 1821 %34 = extractelement <4 x float> %31, i32 2822 %35 = extractelement <4 x float> %31, i32 3823 %36 = bitcast float %4 to i32824 %37 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> poison, i32 %36, 4825 %38 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %37, float %32, 5826 %39 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %38, float %33, 6827 %40 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %39, float %34, 7828 %41 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %40, float %35, 8829 %42 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %41, float %20, 19830 ret <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %42831}832 833define amdgpu_ps <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> @load_sampler_nouniform(ptr addrspace(6) inreg noalias dereferenceable(18446744073709551615), ptr addrspace(6) inreg noalias dereferenceable(18446744073709551615), ptr addrspace(6) inreg noalias dereferenceable(18446744073709551615), ptr addrspace(6) inreg noalias dereferenceable(18446744073709551615), float inreg, i32 inreg, <2 x i32>, <2 x i32>, <2 x i32>, <3 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, float, float, float, float, float, i32, i32, float, i32) #5 {834; GFX6-LABEL: load_sampler_nouniform:835; GFX6: ; %bb.0: ; %main_body836; GFX6-NEXT: s_mov_b64 s[6:7], exec837; GFX6-NEXT: s_wqm_b64 exec, exec838; GFX6-NEXT: s_mov_b32 m0, s5839; GFX6-NEXT: v_interp_mov_f32 v0, p0, attr0.x840; GFX6-NEXT: v_lshlrev_b32_e32 v0, 6, v0841; GFX6-NEXT: v_add_i32_e32 v0, vcc, s1, v0842; GFX6-NEXT: v_readfirstlane_b32 s0, v0843; GFX6-NEXT: s_mov_b32 s1, 0844; GFX6-NEXT: s_nop 2845; GFX6-NEXT: s_load_dwordx8 s[8:15], s[0:1], 0x0846; GFX6-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0xc847; GFX6-NEXT: v_mov_b32_e32 v0, 0848; GFX6-NEXT: s_and_b64 exec, exec, s[6:7]849; GFX6-NEXT: s_waitcnt lgkmcnt(0)850; GFX6-NEXT: image_sample v[0:3], v0, s[8:15], s[0:3] dmask:0xf851; GFX6-NEXT: s_waitcnt vmcnt(0)852; GFX6-NEXT: ; return to shader part epilog853;854; GFX7-LABEL: load_sampler_nouniform:855; GFX7: ; %bb.0: ; %main_body856; GFX7-NEXT: s_mov_b64 s[6:7], exec857; GFX7-NEXT: s_wqm_b64 exec, exec858; GFX7-NEXT: s_mov_b32 m0, s5859; GFX7-NEXT: v_interp_mov_f32 v0, p0, attr0.x860; GFX7-NEXT: v_lshlrev_b32_e32 v0, 6, v0861; GFX7-NEXT: v_add_i32_e32 v0, vcc, s1, v0862; GFX7-NEXT: v_readfirstlane_b32 s0, v0863; GFX7-NEXT: s_mov_b32 s1, 0864; GFX7-NEXT: s_load_dwordx8 s[8:15], s[0:1], 0x0865; GFX7-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0xc866; GFX7-NEXT: v_mov_b32_e32 v0, 0867; GFX7-NEXT: s_and_b64 exec, exec, s[6:7]868; GFX7-NEXT: s_waitcnt lgkmcnt(0)869; GFX7-NEXT: image_sample v[0:3], v0, s[8:15], s[0:3] dmask:0xf870; GFX7-NEXT: s_waitcnt vmcnt(0)871; GFX7-NEXT: ; return to shader part epilog872;873; GFX8-LABEL: load_sampler_nouniform:874; GFX8: ; %bb.0: ; %main_body875; GFX8-NEXT: s_mov_b64 s[6:7], exec876; GFX8-NEXT: s_wqm_b64 exec, exec877; GFX8-NEXT: s_mov_b32 m0, s5878; GFX8-NEXT: v_interp_mov_f32_e32 v0, p0, attr0.x879; GFX8-NEXT: v_lshlrev_b32_e32 v0, 6, v0880; GFX8-NEXT: v_add_u32_e32 v0, vcc, s1, v0881; GFX8-NEXT: v_readfirstlane_b32 s0, v0882; GFX8-NEXT: s_mov_b32 s1, 0883; GFX8-NEXT: s_load_dwordx8 s[8:15], s[0:1], 0x0884; GFX8-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x30885; GFX8-NEXT: v_mov_b32_e32 v0, 0886; GFX8-NEXT: s_and_b64 exec, exec, s[6:7]887; GFX8-NEXT: s_waitcnt lgkmcnt(0)888; GFX8-NEXT: image_sample v[0:3], v0, s[8:15], s[0:3] dmask:0xf889; GFX8-NEXT: s_waitcnt vmcnt(0)890; GFX8-NEXT: ; return to shader part epilog891;892; GFX9-LABEL: load_sampler_nouniform:893; GFX9: ; %bb.0: ; %main_body894; GFX9-NEXT: s_mov_b64 s[6:7], exec895; GFX9-NEXT: s_wqm_b64 exec, exec896; GFX9-NEXT: s_mov_b32 m0, s5897; GFX9-NEXT: s_mov_b32 s17, 0898; GFX9-NEXT: v_interp_mov_f32_e32 v0, p0, attr0.x899; GFX9-NEXT: v_lshl_add_u32 v0, v0, 6, s1900; GFX9-NEXT: v_readfirstlane_b32 s16, v0901; GFX9-NEXT: s_load_dwordx8 s[8:15], s[16:17], 0x0902; GFX9-NEXT: s_load_dwordx4 s[0:3], s[16:17], 0x30903; GFX9-NEXT: v_mov_b32_e32 v0, 0904; GFX9-NEXT: s_and_b64 exec, exec, s[6:7]905; GFX9-NEXT: s_waitcnt lgkmcnt(0)906; GFX9-NEXT: image_sample v[0:3], v0, s[8:15], s[0:3] dmask:0xf907; GFX9-NEXT: s_waitcnt vmcnt(0)908; GFX9-NEXT: ; return to shader part epilog909main_body:910 %22 = call nsz float @llvm.amdgcn.interp.mov(i32 2, i32 0, i32 0, i32 %5) #8911 %23 = bitcast float %22 to i32912 %24 = shl i32 %23, 1913 %25 = getelementptr inbounds [0 x <8 x i32>], ptr addrspace(6) %1, i32 0, i32 %24914 %26 = load <8 x i32>, ptr addrspace(6) %25, align 32, !invariant.load !0915 %27 = shl i32 %23, 2916 %28 = getelementptr [0 x <4 x i32>], ptr addrspace(6) %1, i32 0, i32 %27917 %29 = getelementptr inbounds [0 x <4 x i32>], ptr addrspace(6) %28, i32 0, i32 3918 %30 = load <4 x i32>, ptr addrspace(6) %29, align 16, !invariant.load !0919 %31 = call nsz <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float 0.0, <8 x i32> %26, <4 x i32> %30, i1 0, i32 0, i32 0) #8920 %32 = extractelement <4 x float> %31, i32 0921 %33 = extractelement <4 x float> %31, i32 1922 %34 = extractelement <4 x float> %31, i32 2923 %35 = extractelement <4 x float> %31, i32 3924 %36 = bitcast float %4 to i32925 %37 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> poison, i32 %36, 4926 %38 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %37, float %32, 5927 %39 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %38, float %33, 6928 %40 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %39, float %34, 7929 %41 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %40, float %35, 8930 %42 = insertvalue <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %41, float %20, 19931 ret <{ i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }> %42932}933 934define amdgpu_vs float @load_addr_no_fold(ptr addrspace(6) inreg noalias %p0) #0 {935; GFX67-LABEL: load_addr_no_fold:936; GFX67: ; %bb.0:937; GFX67-NEXT: s_add_i32 s0, s0, 4938; GFX67-NEXT: s_mov_b32 s1, 0939; GFX67-NEXT: s_load_dword s0, s[0:1], 0x0940; GFX67-NEXT: s_waitcnt lgkmcnt(0)941; GFX67-NEXT: v_mov_b32_e32 v0, s0942; GFX67-NEXT: ; return to shader part epilog943;944; GFX89-LABEL: load_addr_no_fold:945; GFX89: ; %bb.0:946; GFX89-NEXT: s_add_i32 s0, s0, 4947; GFX89-NEXT: s_mov_b32 s1, 0948; GFX89-NEXT: s_load_dword s0, s[0:1], 0x0949; GFX89-NEXT: s_waitcnt lgkmcnt(0)950; GFX89-NEXT: v_mov_b32_e32 v0, s0951; GFX89-NEXT: ; return to shader part epilog952 %gep1 = getelementptr i32, ptr addrspace(6) %p0, i32 1953 %r1 = load i32, ptr addrspace(6) %gep1954 %r2 = bitcast i32 %r1 to float955 ret float %r2956}957 958define amdgpu_vs float @vgpr_arg_src(ptr addrspace(6) %arg) {959; GFX6-LABEL: vgpr_arg_src:960; GFX6: ; %bb.0: ; %main_body961; GFX6-NEXT: v_readfirstlane_b32 s0, v0962; GFX6-NEXT: s_mov_b32 s1, 0963; GFX6-NEXT: s_nop 2964; GFX6-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x0965; GFX6-NEXT: s_waitcnt lgkmcnt(0)966; GFX6-NEXT: buffer_load_format_x v0, v0, s[0:3], 0 idxen967; GFX6-NEXT: s_waitcnt vmcnt(0)968; GFX6-NEXT: ; return to shader part epilog969;970; GFX7-LABEL: vgpr_arg_src:971; GFX7: ; %bb.0: ; %main_body972; GFX7-NEXT: v_readfirstlane_b32 s0, v0973; GFX7-NEXT: s_mov_b32 s1, 0974; GFX7-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x0975; GFX7-NEXT: s_waitcnt lgkmcnt(0)976; GFX7-NEXT: buffer_load_format_x v0, v0, s[0:3], 0 idxen977; GFX7-NEXT: s_waitcnt vmcnt(0)978; GFX7-NEXT: ; return to shader part epilog979;980; GFX89-LABEL: vgpr_arg_src:981; GFX89: ; %bb.0: ; %main_body982; GFX89-NEXT: v_readfirstlane_b32 s0, v0983; GFX89-NEXT: s_mov_b32 s1, 0984; GFX89-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x0985; GFX89-NEXT: s_waitcnt lgkmcnt(0)986; GFX89-NEXT: s_nop 1987; GFX89-NEXT: buffer_load_format_x v0, v0, s[0:3], 0 idxen988; GFX89-NEXT: s_waitcnt vmcnt(0)989; GFX89-NEXT: ; return to shader part epilog990main_body:991 %tmp9 = load ptr addrspace(8), ptr addrspace(6) %arg992 %tmp10 = call nsz float @llvm.amdgcn.struct.ptr.buffer.load.format.f32(ptr addrspace(8) %tmp9, i32 poison, i32 0, i32 0, i32 0) #1993 ret float %tmp10994}995 996; define amdgpu_vs float @load_i8(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {997; %gep1 = getelementptr inbounds i8, ptr addrspace(6) %p1, i32 2998; %r0 = load i8, ptr addrspace(6) %p0999; %r1 = load i8, ptr addrspace(6) %gep11000; %r = add i8 %r0, %r11001; %ext = zext i8 %r to i321002; %r2 = bitcast i32 %ext to float1003; ret float %r21004; }1005 1006; define amdgpu_vs float @zextload_i8(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1007; %gep1 = getelementptr inbounds i8, ptr addrspace(6) %p1, i32 21008; %r0 = load i8, ptr addrspace(6) %p01009; %r1 = load i8, ptr addrspace(6) %gep11010; %zext.r0 = zext i8 %r0 to i321011; %zext.r1 = zext i8 %r1 to i321012; %r = add i32 %zext.r0, %zext.r11013; %r2 = bitcast i32 %r to float1014; ret float %r21015; }1016 1017; define amdgpu_vs float @sextload_i8(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1018; %gep1 = getelementptr inbounds i8, ptr addrspace(6) %p1, i32 21019; %r0 = load i8, ptr addrspace(6) %p01020; %r1 = load i8, ptr addrspace(6) %gep11021; %zext.r0 = sext i8 %r0 to i321022; %zext.r1 = sext i8 %r1 to i321023; %r = add i32 %zext.r0, %zext.r11024; %r2 = bitcast i32 %r to float1025; ret float %r21026; }1027 1028; define amdgpu_vs half @load_i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1029; %gep1 = getelementptr inbounds i16, ptr addrspace(6) %p1, i32 21030; %r0 = load i16, ptr addrspace(6) %p01031; %r1 = load i16, ptr addrspace(6) %gep11032; %r = add i16 %r0, %r11033; %r2 = bitcast i16 %r to half1034; ret half %r21035; }1036 1037; define amdgpu_vs half @load_i16_align4(ptr addrspace(6) inreg %ptr) #0 {1038; %gep1 = getelementptr inbounds i16, ptr addrspace(6) %ptr, i32 21039; %ld = load i16, ptr addrspace(6) %gep11040; %cast = bitcast i16 %ld to half1041; ret half %cast1042; }1043 1044define amdgpu_vs <2 x half> @load_v2i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1045; GFX67-LABEL: load_v2i16:1046; GFX67: ; %bb.0:1047; GFX67-NEXT: s_mov_b32 s2, s11048; GFX67-NEXT: s_mov_b32 s3, 01049; GFX67-NEXT: s_mov_b32 s1, s31050; GFX67-NEXT: s_load_dword s2, s[2:3], 0x21051; GFX67-NEXT: s_load_dword s0, s[0:1], 0x01052; GFX67-NEXT: s_waitcnt lgkmcnt(0)1053; GFX67-NEXT: s_lshr_b32 s1, s2, 161054; GFX67-NEXT: s_lshr_b32 s3, s0, 161055; GFX67-NEXT: s_add_i32 s3, s3, s11056; GFX67-NEXT: s_add_i32 s0, s0, s21057; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01058; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s31059; GFX67-NEXT: ; return to shader part epilog1060;1061; GFX8-LABEL: load_v2i16:1062; GFX8: ; %bb.0:1063; GFX8-NEXT: s_mov_b32 s2, s11064; GFX8-NEXT: s_mov_b32 s3, 01065; GFX8-NEXT: s_mov_b32 s1, s31066; GFX8-NEXT: s_load_dword s2, s[2:3], 0x81067; GFX8-NEXT: s_load_dword s0, s[0:1], 0x01068; GFX8-NEXT: s_waitcnt lgkmcnt(0)1069; GFX8-NEXT: s_lshr_b32 s1, s2, 161070; GFX8-NEXT: s_lshr_b32 s3, s0, 161071; GFX8-NEXT: s_add_i32 s3, s3, s11072; GFX8-NEXT: s_add_i32 s0, s0, s21073; GFX8-NEXT: s_and_b32 s0, s0, 0xffff1074; GFX8-NEXT: s_lshl_b32 s1, s3, 161075; GFX8-NEXT: s_or_b32 s0, s0, s11076; GFX8-NEXT: v_mov_b32_e32 v0, s01077; GFX8-NEXT: ; return to shader part epilog1078;1079; GFX9-LABEL: load_v2i16:1080; GFX9: ; %bb.0:1081; GFX9-NEXT: s_mov_b32 s2, s11082; GFX9-NEXT: s_mov_b32 s3, 01083; GFX9-NEXT: s_mov_b32 s1, s31084; GFX9-NEXT: s_load_dword s4, s[2:3], 0x81085; GFX9-NEXT: s_load_dword s5, s[0:1], 0x01086; GFX9-NEXT: s_waitcnt lgkmcnt(0)1087; GFX9-NEXT: v_mov_b32_e32 v0, s41088; GFX9-NEXT: v_pk_add_u16 v0, s5, v01089; GFX9-NEXT: ; return to shader part epilog1090 %gep1 = getelementptr inbounds <2 x i16>, ptr addrspace(6) %p1, i32 21091 %r0 = load <2 x i16>, ptr addrspace(6) %p01092 %r1 = load <2 x i16>, ptr addrspace(6) %gep11093 %r = add <2 x i16> %r0, %r11094 %r2 = bitcast <2 x i16> %r to <2 x half>1095 ret <2 x half> %r21096}1097 1098define amdgpu_vs <3 x half> @load_v3i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1099; GFX67-LABEL: load_v3i16:1100; GFX67: ; %bb.0:1101; GFX67-NEXT: s_mov_b32 s3, 01102; GFX67-NEXT: s_mov_b32 s2, s11103; GFX67-NEXT: s_mov_b32 s1, s31104; GFX67-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x41105; GFX67-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01106; GFX67-NEXT: s_waitcnt lgkmcnt(0)1107; GFX67-NEXT: s_lshr_b32 s4, s2, 161108; GFX67-NEXT: s_lshr_b32 s5, s0, 161109; GFX67-NEXT: s_add_i32 s5, s5, s41110; GFX67-NEXT: s_add_i32 s1, s1, s31111; GFX67-NEXT: s_add_i32 s0, s0, s21112; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01113; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s51114; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s11115; GFX67-NEXT: ; return to shader part epilog1116;1117; GFX8-LABEL: load_v3i16:1118; GFX8: ; %bb.0:1119; GFX8-NEXT: s_mov_b32 s3, 01120; GFX8-NEXT: s_mov_b32 s2, s11121; GFX8-NEXT: s_mov_b32 s1, s31122; GFX8-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x101123; GFX8-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01124; GFX8-NEXT: s_waitcnt lgkmcnt(0)1125; GFX8-NEXT: s_lshr_b32 s4, s2, 161126; GFX8-NEXT: s_add_i32 s1, s1, s31127; GFX8-NEXT: s_lshr_b32 s3, s0, 161128; GFX8-NEXT: s_add_i32 s3, s3, s41129; GFX8-NEXT: s_add_i32 s0, s0, s21130; GFX8-NEXT: s_and_b32 s0, s0, 0xffff1131; GFX8-NEXT: s_lshl_b32 s2, s3, 161132; GFX8-NEXT: s_or_b32 s0, s0, s21133; GFX8-NEXT: v_mov_b32_e32 v0, s01134; GFX8-NEXT: v_mov_b32_e32 v1, s11135; GFX8-NEXT: ; return to shader part epilog1136;1137; GFX9-LABEL: load_v3i16:1138; GFX9: ; %bb.0:1139; GFX9-NEXT: s_mov_b32 s2, s11140; GFX9-NEXT: s_mov_b32 s3, 01141; GFX9-NEXT: s_mov_b32 s1, s31142; GFX9-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x101143; GFX9-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x01144; GFX9-NEXT: s_waitcnt lgkmcnt(0)1145; GFX9-NEXT: v_mov_b32_e32 v0, s41146; GFX9-NEXT: v_mov_b32_e32 v1, s51147; GFX9-NEXT: v_pk_add_u16 v0, s6, v01148; GFX9-NEXT: v_pk_add_u16 v1, s7, v11149; GFX9-NEXT: ; return to shader part epilog1150 %gep1 = getelementptr inbounds <3 x i16>, ptr addrspace(6) %p1, i32 21151 %r0 = load <3 x i16>, ptr addrspace(6) %p01152 %r1 = load <3 x i16>, ptr addrspace(6) %gep11153 %r = add <3 x i16> %r0, %r11154 %r2 = bitcast <3 x i16> %r to <3 x half>1155 ret <3 x half> %r21156}1157 1158define amdgpu_vs <4 x half> @load_v4i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1159; GFX67-LABEL: load_v4i16:1160; GFX67: ; %bb.0:1161; GFX67-NEXT: s_mov_b32 s3, 01162; GFX67-NEXT: s_mov_b32 s2, s11163; GFX67-NEXT: s_mov_b32 s1, s31164; GFX67-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01165; GFX67-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x41166; GFX67-NEXT: s_waitcnt lgkmcnt(0)1167; GFX67-NEXT: s_lshr_b32 s4, s0, 161168; GFX67-NEXT: s_lshr_b32 s5, s1, 161169; GFX67-NEXT: s_lshr_b32 s6, s2, 161170; GFX67-NEXT: s_lshr_b32 s7, s3, 161171; GFX67-NEXT: s_add_i32 s5, s5, s71172; GFX67-NEXT: s_add_i32 s4, s4, s61173; GFX67-NEXT: s_add_i32 s1, s1, s31174; GFX67-NEXT: s_add_i32 s0, s0, s21175; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01176; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s41177; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s11178; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s51179; GFX67-NEXT: ; return to shader part epilog1180;1181; GFX8-LABEL: load_v4i16:1182; GFX8: ; %bb.0:1183; GFX8-NEXT: s_mov_b32 s3, 01184; GFX8-NEXT: s_mov_b32 s2, s11185; GFX8-NEXT: s_mov_b32 s1, s31186; GFX8-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x101187; GFX8-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01188; GFX8-NEXT: s_waitcnt lgkmcnt(0)1189; GFX8-NEXT: s_lshr_b32 s4, s3, 161190; GFX8-NEXT: s_lshr_b32 s5, s1, 161191; GFX8-NEXT: s_add_i32 s5, s5, s41192; GFX8-NEXT: s_add_i32 s1, s1, s31193; GFX8-NEXT: s_lshr_b32 s3, s2, 161194; GFX8-NEXT: s_lshr_b32 s4, s0, 161195; GFX8-NEXT: s_add_i32 s4, s4, s31196; GFX8-NEXT: s_add_i32 s0, s0, s21197; GFX8-NEXT: s_and_b32 s0, s0, 0xffff1198; GFX8-NEXT: s_lshl_b32 s2, s4, 161199; GFX8-NEXT: s_or_b32 s0, s0, s21200; GFX8-NEXT: s_and_b32 s1, s1, 0xffff1201; GFX8-NEXT: s_lshl_b32 s2, s5, 161202; GFX8-NEXT: s_or_b32 s1, s1, s21203; GFX8-NEXT: v_mov_b32_e32 v0, s01204; GFX8-NEXT: v_mov_b32_e32 v1, s11205; GFX8-NEXT: ; return to shader part epilog1206;1207; GFX9-LABEL: load_v4i16:1208; GFX9: ; %bb.0:1209; GFX9-NEXT: s_mov_b32 s2, s11210; GFX9-NEXT: s_mov_b32 s3, 01211; GFX9-NEXT: s_mov_b32 s1, s31212; GFX9-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x101213; GFX9-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x01214; GFX9-NEXT: s_waitcnt lgkmcnt(0)1215; GFX9-NEXT: v_mov_b32_e32 v0, s41216; GFX9-NEXT: v_mov_b32_e32 v1, s51217; GFX9-NEXT: v_pk_add_u16 v0, s6, v01218; GFX9-NEXT: v_pk_add_u16 v1, s7, v11219; GFX9-NEXT: ; return to shader part epilog1220 %gep1 = getelementptr inbounds <4 x i16>, ptr addrspace(6) %p1, i32 21221 %r0 = load <4 x i16>, ptr addrspace(6) %p01222 %r1 = load <4 x i16>, ptr addrspace(6) %gep11223 %r = add <4 x i16> %r0, %r11224 %r2 = bitcast <4 x i16> %r to <4 x half>1225 ret <4 x half> %r21226}1227 1228define amdgpu_vs <6 x half> @load_v6i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1229; GFX67-LABEL: load_v6i16:1230; GFX67: ; %bb.0:1231; GFX67-NEXT: s_mov_b32 s5, 01232; GFX67-NEXT: s_mov_b32 s4, s11233; GFX67-NEXT: s_mov_b32 s1, s51234; GFX67-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x01235; GFX67-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x81236; GFX67-NEXT: s_waitcnt lgkmcnt(0)1237; GFX67-NEXT: s_lshr_b32 s3, s0, 161238; GFX67-NEXT: s_lshr_b32 s7, s1, 161239; GFX67-NEXT: s_lshr_b32 s8, s2, 161240; GFX67-NEXT: s_lshr_b32 s9, s4, 161241; GFX67-NEXT: s_lshr_b32 s10, s5, 161242; GFX67-NEXT: s_lshr_b32 s11, s6, 161243; GFX67-NEXT: s_add_i32 s8, s8, s111244; GFX67-NEXT: s_add_i32 s7, s7, s101245; GFX67-NEXT: s_add_i32 s3, s3, s91246; GFX67-NEXT: s_add_i32 s2, s2, s61247; GFX67-NEXT: s_add_i32 s1, s1, s51248; GFX67-NEXT: s_add_i32 s0, s0, s41249; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01250; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s11251; GFX67-NEXT: v_cvt_f32_f16_e32 v4, s21252; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s31253; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s71254; GFX67-NEXT: v_cvt_f32_f16_e32 v5, s81255; GFX67-NEXT: ; return to shader part epilog1256;1257; GFX8-LABEL: load_v6i16:1258; GFX8: ; %bb.0:1259; GFX8-NEXT: s_mov_b32 s3, 01260; GFX8-NEXT: s_mov_b32 s2, s11261; GFX8-NEXT: s_mov_b32 s1, s31262; GFX8-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x201263; GFX8-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x01264; GFX8-NEXT: s_waitcnt lgkmcnt(0)1265; GFX8-NEXT: s_lshr_b32 s3, s6, 161266; GFX8-NEXT: s_lshr_b32 s7, s2, 161267; GFX8-NEXT: s_add_i32 s7, s7, s31268; GFX8-NEXT: s_add_i32 s2, s2, s61269; GFX8-NEXT: s_lshr_b32 s3, s5, 161270; GFX8-NEXT: s_lshr_b32 s6, s1, 161271; GFX8-NEXT: s_add_i32 s6, s6, s31272; GFX8-NEXT: s_add_i32 s1, s1, s51273; GFX8-NEXT: s_lshr_b32 s3, s4, 161274; GFX8-NEXT: s_lshr_b32 s5, s0, 161275; GFX8-NEXT: s_add_i32 s5, s5, s31276; GFX8-NEXT: s_add_i32 s0, s0, s41277; GFX8-NEXT: s_and_b32 s0, s0, 0xffff1278; GFX8-NEXT: s_lshl_b32 s3, s5, 161279; GFX8-NEXT: s_or_b32 s0, s0, s31280; GFX8-NEXT: s_and_b32 s1, s1, 0xffff1281; GFX8-NEXT: s_lshl_b32 s3, s6, 161282; GFX8-NEXT: s_or_b32 s1, s1, s31283; GFX8-NEXT: s_and_b32 s2, s2, 0xffff1284; GFX8-NEXT: s_lshl_b32 s3, s7, 161285; GFX8-NEXT: s_or_b32 s2, s2, s31286; GFX8-NEXT: v_mov_b32_e32 v0, s01287; GFX8-NEXT: v_mov_b32_e32 v1, s11288; GFX8-NEXT: v_mov_b32_e32 v2, s21289; GFX8-NEXT: ; return to shader part epilog1290;1291; GFX9-LABEL: load_v6i16:1292; GFX9: ; %bb.0:1293; GFX9-NEXT: s_mov_b32 s2, s11294; GFX9-NEXT: s_mov_b32 s3, 01295; GFX9-NEXT: s_mov_b32 s1, s31296; GFX9-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x201297; GFX9-NEXT: s_load_dwordx4 s[8:11], s[0:1], 0x01298; GFX9-NEXT: s_waitcnt lgkmcnt(0)1299; GFX9-NEXT: v_mov_b32_e32 v0, s41300; GFX9-NEXT: v_mov_b32_e32 v1, s51301; GFX9-NEXT: v_mov_b32_e32 v2, s61302; GFX9-NEXT: v_pk_add_u16 v0, s8, v01303; GFX9-NEXT: v_pk_add_u16 v1, s9, v11304; GFX9-NEXT: v_pk_add_u16 v2, s10, v21305; GFX9-NEXT: ; return to shader part epilog1306 %gep1 = getelementptr inbounds <6 x i16>, ptr addrspace(6) %p1, i32 21307 %r0 = load <6 x i16>, ptr addrspace(6) %p01308 %r1 = load <6 x i16>, ptr addrspace(6) %gep11309 %r = add <6 x i16> %r0, %r11310 %r2 = bitcast <6 x i16> %r to <6 x half>1311 ret <6 x half> %r21312}1313 1314define amdgpu_vs <8 x half> @load_v8i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1315; GFX67-LABEL: load_v8i16:1316; GFX67: ; %bb.0:1317; GFX67-NEXT: s_mov_b32 s5, 01318; GFX67-NEXT: s_mov_b32 s4, s11319; GFX67-NEXT: s_mov_b32 s1, s51320; GFX67-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x01321; GFX67-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x81322; GFX67-NEXT: s_waitcnt lgkmcnt(0)1323; GFX67-NEXT: s_lshr_b32 s8, s0, 161324; GFX67-NEXT: s_lshr_b32 s9, s1, 161325; GFX67-NEXT: s_lshr_b32 s10, s2, 161326; GFX67-NEXT: s_lshr_b32 s11, s3, 161327; GFX67-NEXT: s_lshr_b32 s12, s4, 161328; GFX67-NEXT: s_lshr_b32 s13, s5, 161329; GFX67-NEXT: s_lshr_b32 s14, s6, 161330; GFX67-NEXT: s_lshr_b32 s15, s7, 161331; GFX67-NEXT: s_add_i32 s11, s11, s151332; GFX67-NEXT: s_add_i32 s10, s10, s141333; GFX67-NEXT: s_add_i32 s9, s9, s131334; GFX67-NEXT: s_add_i32 s8, s8, s121335; GFX67-NEXT: s_add_i32 s3, s3, s71336; GFX67-NEXT: s_add_i32 s2, s2, s61337; GFX67-NEXT: s_add_i32 s1, s1, s51338; GFX67-NEXT: s_add_i32 s0, s0, s41339; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01340; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s11341; GFX67-NEXT: v_cvt_f32_f16_e32 v4, s21342; GFX67-NEXT: v_cvt_f32_f16_e32 v6, s31343; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s81344; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s91345; GFX67-NEXT: v_cvt_f32_f16_e32 v5, s101346; GFX67-NEXT: v_cvt_f32_f16_e32 v7, s111347; GFX67-NEXT: ; return to shader part epilog1348;1349; GFX8-LABEL: load_v8i16:1350; GFX8: ; %bb.0:1351; GFX8-NEXT: s_mov_b32 s3, 01352; GFX8-NEXT: s_mov_b32 s2, s11353; GFX8-NEXT: s_mov_b32 s1, s31354; GFX8-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x201355; GFX8-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x01356; GFX8-NEXT: s_waitcnt lgkmcnt(0)1357; GFX8-NEXT: s_lshr_b32 s8, s7, 161358; GFX8-NEXT: s_lshr_b32 s9, s3, 161359; GFX8-NEXT: s_add_i32 s9, s9, s81360; GFX8-NEXT: s_add_i32 s3, s3, s71361; GFX8-NEXT: s_lshr_b32 s7, s6, 161362; GFX8-NEXT: s_lshr_b32 s8, s2, 161363; GFX8-NEXT: s_add_i32 s8, s8, s71364; GFX8-NEXT: s_add_i32 s2, s2, s61365; GFX8-NEXT: s_lshr_b32 s6, s5, 161366; GFX8-NEXT: s_lshr_b32 s7, s1, 161367; GFX8-NEXT: s_add_i32 s7, s7, s61368; GFX8-NEXT: s_add_i32 s1, s1, s51369; GFX8-NEXT: s_lshr_b32 s5, s4, 161370; GFX8-NEXT: s_lshr_b32 s6, s0, 161371; GFX8-NEXT: s_add_i32 s6, s6, s51372; GFX8-NEXT: s_add_i32 s0, s0, s41373; GFX8-NEXT: s_and_b32 s0, s0, 0xffff1374; GFX8-NEXT: s_lshl_b32 s4, s6, 161375; GFX8-NEXT: s_or_b32 s0, s0, s41376; GFX8-NEXT: s_and_b32 s1, s1, 0xffff1377; GFX8-NEXT: s_lshl_b32 s4, s7, 161378; GFX8-NEXT: s_or_b32 s1, s1, s41379; GFX8-NEXT: s_and_b32 s2, s2, 0xffff1380; GFX8-NEXT: s_lshl_b32 s4, s8, 161381; GFX8-NEXT: s_or_b32 s2, s2, s41382; GFX8-NEXT: s_and_b32 s3, s3, 0xffff1383; GFX8-NEXT: s_lshl_b32 s4, s9, 161384; GFX8-NEXT: s_or_b32 s3, s3, s41385; GFX8-NEXT: v_mov_b32_e32 v0, s01386; GFX8-NEXT: v_mov_b32_e32 v1, s11387; GFX8-NEXT: v_mov_b32_e32 v2, s21388; GFX8-NEXT: v_mov_b32_e32 v3, s31389; GFX8-NEXT: ; return to shader part epilog1390;1391; GFX9-LABEL: load_v8i16:1392; GFX9: ; %bb.0:1393; GFX9-NEXT: s_mov_b32 s2, s11394; GFX9-NEXT: s_mov_b32 s3, 01395; GFX9-NEXT: s_mov_b32 s1, s31396; GFX9-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x201397; GFX9-NEXT: s_load_dwordx4 s[8:11], s[0:1], 0x01398; GFX9-NEXT: s_waitcnt lgkmcnt(0)1399; GFX9-NEXT: v_mov_b32_e32 v0, s41400; GFX9-NEXT: v_mov_b32_e32 v1, s51401; GFX9-NEXT: v_mov_b32_e32 v2, s61402; GFX9-NEXT: v_mov_b32_e32 v3, s71403; GFX9-NEXT: v_pk_add_u16 v0, s8, v01404; GFX9-NEXT: v_pk_add_u16 v1, s9, v11405; GFX9-NEXT: v_pk_add_u16 v2, s10, v21406; GFX9-NEXT: v_pk_add_u16 v3, s11, v31407; GFX9-NEXT: ; return to shader part epilog1408 %gep1 = getelementptr inbounds <8 x i16>, ptr addrspace(6) %p1, i32 21409 %r0 = load <8 x i16>, ptr addrspace(6) %p01410 %r1 = load <8 x i16>, ptr addrspace(6) %gep11411 %r = add <8 x i16> %r0, %r11412 %r2 = bitcast <8 x i16> %r to <8 x half>1413 ret <8 x half> %r21414}1415 1416define amdgpu_vs <16 x half> @load_v16i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1417; GFX67-LABEL: load_v16i16:1418; GFX67: ; %bb.0:1419; GFX67-NEXT: s_mov_b32 s9, 01420; GFX67-NEXT: s_mov_b32 s8, s11421; GFX67-NEXT: s_mov_b32 s1, s91422; GFX67-NEXT: s_load_dwordx8 s[0:7], s[0:1], 0x01423; GFX67-NEXT: s_load_dwordx8 s[8:15], s[8:9], 0x101424; GFX67-NEXT: s_waitcnt lgkmcnt(0)1425; GFX67-NEXT: s_lshr_b32 s16, s0, 161426; GFX67-NEXT: s_lshr_b32 s17, s1, 161427; GFX67-NEXT: s_lshr_b32 s18, s2, 161428; GFX67-NEXT: s_lshr_b32 s19, s3, 161429; GFX67-NEXT: s_lshr_b32 s20, s4, 161430; GFX67-NEXT: s_lshr_b32 s21, s5, 161431; GFX67-NEXT: s_lshr_b32 s22, s6, 161432; GFX67-NEXT: s_lshr_b32 s23, s7, 161433; GFX67-NEXT: s_lshr_b32 s24, s8, 161434; GFX67-NEXT: s_lshr_b32 s25, s9, 161435; GFX67-NEXT: s_lshr_b32 s26, s10, 161436; GFX67-NEXT: s_lshr_b32 s27, s11, 161437; GFX67-NEXT: s_lshr_b32 s28, s12, 161438; GFX67-NEXT: s_lshr_b32 s29, s13, 161439; GFX67-NEXT: s_lshr_b32 s30, s14, 161440; GFX67-NEXT: s_lshr_b32 s31, s15, 161441; GFX67-NEXT: s_add_i32 s23, s23, s311442; GFX67-NEXT: s_add_i32 s22, s22, s301443; GFX67-NEXT: s_add_i32 s21, s21, s291444; GFX67-NEXT: s_add_i32 s20, s20, s281445; GFX67-NEXT: s_add_i32 s19, s19, s271446; GFX67-NEXT: s_add_i32 s18, s18, s261447; GFX67-NEXT: s_add_i32 s17, s17, s251448; GFX67-NEXT: s_add_i32 s16, s16, s241449; GFX67-NEXT: s_add_i32 s7, s7, s151450; GFX67-NEXT: s_add_i32 s6, s6, s141451; GFX67-NEXT: s_add_i32 s5, s5, s131452; GFX67-NEXT: s_add_i32 s4, s4, s121453; GFX67-NEXT: s_add_i32 s3, s3, s111454; GFX67-NEXT: s_add_i32 s2, s2, s101455; GFX67-NEXT: s_add_i32 s1, s1, s91456; GFX67-NEXT: s_add_i32 s0, s0, s81457; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01458; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s11459; GFX67-NEXT: v_cvt_f32_f16_e32 v4, s21460; GFX67-NEXT: v_cvt_f32_f16_e32 v6, s31461; GFX67-NEXT: v_cvt_f32_f16_e32 v8, s41462; GFX67-NEXT: v_cvt_f32_f16_e32 v10, s51463; GFX67-NEXT: v_cvt_f32_f16_e32 v12, s61464; GFX67-NEXT: v_cvt_f32_f16_e32 v14, s71465; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s161466; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s171467; GFX67-NEXT: v_cvt_f32_f16_e32 v5, s181468; GFX67-NEXT: v_cvt_f32_f16_e32 v7, s191469; GFX67-NEXT: v_cvt_f32_f16_e32 v9, s201470; GFX67-NEXT: v_cvt_f32_f16_e32 v11, s211471; GFX67-NEXT: v_cvt_f32_f16_e32 v13, s221472; GFX67-NEXT: v_cvt_f32_f16_e32 v15, s231473; GFX67-NEXT: ; return to shader part epilog1474;1475; GFX8-LABEL: load_v16i16:1476; GFX8: ; %bb.0:1477; GFX8-NEXT: s_mov_b32 s2, s11478; GFX8-NEXT: s_mov_b32 s3, 01479; GFX8-NEXT: s_mov_b32 s1, s31480; GFX8-NEXT: s_load_dwordx8 s[4:11], s[2:3], 0x401481; GFX8-NEXT: s_load_dwordx8 s[12:19], s[0:1], 0x01482; GFX8-NEXT: s_waitcnt lgkmcnt(0)1483; GFX8-NEXT: s_lshr_b32 s0, s11, 161484; GFX8-NEXT: s_lshr_b32 s1, s19, 161485; GFX8-NEXT: s_lshr_b32 s2, s10, 161486; GFX8-NEXT: s_lshr_b32 s3, s18, 161487; GFX8-NEXT: s_add_i32 s1, s1, s01488; GFX8-NEXT: s_add_i32 s0, s19, s111489; GFX8-NEXT: s_add_i32 s3, s3, s21490; GFX8-NEXT: s_add_i32 s2, s18, s101491; GFX8-NEXT: s_lshr_b32 s10, s9, 161492; GFX8-NEXT: s_lshr_b32 s11, s17, 161493; GFX8-NEXT: s_add_i32 s11, s11, s101494; GFX8-NEXT: s_add_i32 s9, s17, s91495; GFX8-NEXT: s_lshr_b32 s10, s8, 161496; GFX8-NEXT: s_lshr_b32 s17, s16, 161497; GFX8-NEXT: s_add_i32 s17, s17, s101498; GFX8-NEXT: s_add_i32 s8, s16, s81499; GFX8-NEXT: s_lshr_b32 s10, s7, 161500; GFX8-NEXT: s_lshr_b32 s16, s15, 161501; GFX8-NEXT: s_add_i32 s16, s16, s101502; GFX8-NEXT: s_add_i32 s7, s15, s71503; GFX8-NEXT: s_lshr_b32 s10, s6, 161504; GFX8-NEXT: s_lshr_b32 s15, s14, 161505; GFX8-NEXT: s_add_i32 s15, s15, s101506; GFX8-NEXT: s_add_i32 s6, s14, s61507; GFX8-NEXT: s_lshr_b32 s10, s5, 161508; GFX8-NEXT: s_lshr_b32 s14, s13, 161509; GFX8-NEXT: s_add_i32 s14, s14, s101510; GFX8-NEXT: s_add_i32 s5, s13, s51511; GFX8-NEXT: s_lshr_b32 s10, s4, 161512; GFX8-NEXT: s_lshr_b32 s13, s12, 161513; GFX8-NEXT: s_add_i32 s13, s13, s101514; GFX8-NEXT: s_add_i32 s4, s12, s41515; GFX8-NEXT: s_and_b32 s4, s4, 0xffff1516; GFX8-NEXT: s_lshl_b32 s10, s13, 161517; GFX8-NEXT: s_or_b32 s4, s4, s101518; GFX8-NEXT: s_and_b32 s5, s5, 0xffff1519; GFX8-NEXT: s_lshl_b32 s10, s14, 161520; GFX8-NEXT: s_or_b32 s5, s5, s101521; GFX8-NEXT: s_and_b32 s6, s6, 0xffff1522; GFX8-NEXT: s_lshl_b32 s10, s15, 161523; GFX8-NEXT: s_or_b32 s6, s6, s101524; GFX8-NEXT: s_and_b32 s7, s7, 0xffff1525; GFX8-NEXT: s_lshl_b32 s10, s16, 161526; GFX8-NEXT: s_or_b32 s7, s7, s101527; GFX8-NEXT: s_and_b32 s8, s8, 0xffff1528; GFX8-NEXT: s_lshl_b32 s10, s17, 161529; GFX8-NEXT: s_or_b32 s8, s8, s101530; GFX8-NEXT: s_and_b32 s9, s9, 0xffff1531; GFX8-NEXT: s_lshl_b32 s10, s11, 161532; GFX8-NEXT: s_and_b32 s2, s2, 0xffff1533; GFX8-NEXT: s_lshl_b32 s3, s3, 161534; GFX8-NEXT: s_and_b32 s0, s0, 0xffff1535; GFX8-NEXT: s_lshl_b32 s1, s1, 161536; GFX8-NEXT: s_or_b32 s9, s9, s101537; GFX8-NEXT: s_or_b32 s2, s2, s31538; GFX8-NEXT: s_or_b32 s0, s0, s11539; GFX8-NEXT: v_mov_b32_e32 v0, s41540; GFX8-NEXT: v_mov_b32_e32 v1, s51541; GFX8-NEXT: v_mov_b32_e32 v2, s61542; GFX8-NEXT: v_mov_b32_e32 v3, s71543; GFX8-NEXT: v_mov_b32_e32 v4, s81544; GFX8-NEXT: v_mov_b32_e32 v5, s91545; GFX8-NEXT: v_mov_b32_e32 v6, s21546; GFX8-NEXT: v_mov_b32_e32 v7, s01547; GFX8-NEXT: ; return to shader part epilog1548;1549; GFX9-LABEL: load_v16i16:1550; GFX9: ; %bb.0:1551; GFX9-NEXT: s_mov_b32 s2, s11552; GFX9-NEXT: s_mov_b32 s3, 01553; GFX9-NEXT: s_mov_b32 s1, s31554; GFX9-NEXT: s_load_dwordx8 s[4:11], s[2:3], 0x401555; GFX9-NEXT: s_load_dwordx8 s[12:19], s[0:1], 0x01556; GFX9-NEXT: s_waitcnt lgkmcnt(0)1557; GFX9-NEXT: v_mov_b32_e32 v0, s41558; GFX9-NEXT: v_mov_b32_e32 v1, s51559; GFX9-NEXT: v_mov_b32_e32 v2, s61560; GFX9-NEXT: v_mov_b32_e32 v3, s71561; GFX9-NEXT: v_mov_b32_e32 v4, s81562; GFX9-NEXT: v_mov_b32_e32 v5, s91563; GFX9-NEXT: v_mov_b32_e32 v6, s101564; GFX9-NEXT: v_mov_b32_e32 v7, s111565; GFX9-NEXT: v_pk_add_u16 v0, s12, v01566; GFX9-NEXT: v_pk_add_u16 v1, s13, v11567; GFX9-NEXT: v_pk_add_u16 v2, s14, v21568; GFX9-NEXT: v_pk_add_u16 v3, s15, v31569; GFX9-NEXT: v_pk_add_u16 v4, s16, v41570; GFX9-NEXT: v_pk_add_u16 v5, s17, v51571; GFX9-NEXT: v_pk_add_u16 v6, s18, v61572; GFX9-NEXT: v_pk_add_u16 v7, s19, v71573; GFX9-NEXT: ; return to shader part epilog1574 %gep1 = getelementptr inbounds <16 x i16>, ptr addrspace(6) %p1, i32 21575 %r0 = load <16 x i16>, ptr addrspace(6) %p01576 %r1 = load <16 x i16>, ptr addrspace(6) %gep11577 %r = add <16 x i16> %r0, %r11578 %r2 = bitcast <16 x i16> %r to <16 x half>1579 ret <16 x half> %r21580}1581 1582; define amdgpu_vs float @zextload_i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1583; %gep1 = getelementptr inbounds i16, ptr addrspace(6) %p1, i32 21584; %r0 = load i16, ptr addrspace(6) %p01585; %r1 = load i16, ptr addrspace(6) %gep11586; %zext.r0 = zext i16 %r0 to i321587; %zext.r1 = zext i16 %r1 to i321588; %r = add i32 %zext.r0, %zext.r11589; %r2 = bitcast i32 %r to float1590; ret float %r21591; }1592 1593define amdgpu_vs <2 x float> @zextload_v2i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1594; GFX67-LABEL: zextload_v2i16:1595; GFX67: ; %bb.0:1596; GFX67-NEXT: s_mov_b32 s2, s11597; GFX67-NEXT: s_mov_b32 s3, 01598; GFX67-NEXT: s_mov_b32 s1, s31599; GFX67-NEXT: s_load_dword s2, s[2:3], 0x21600; GFX67-NEXT: s_load_dword s0, s[0:1], 0x01601; GFX67-NEXT: s_waitcnt lgkmcnt(0)1602; GFX67-NEXT: s_lshr_b32 s1, s2, 161603; GFX67-NEXT: s_lshr_b32 s3, s0, 161604; GFX67-NEXT: s_and_b32 s0, s0, 0xffff1605; GFX67-NEXT: s_and_b32 s2, s2, 0xffff1606; GFX67-NEXT: s_add_i32 s0, s0, s21607; GFX67-NEXT: s_add_i32 s3, s3, s11608; GFX67-NEXT: v_mov_b32_e32 v0, s01609; GFX67-NEXT: v_mov_b32_e32 v1, s31610; GFX67-NEXT: ; return to shader part epilog1611;1612; GFX8-LABEL: zextload_v2i16:1613; GFX8: ; %bb.0:1614; GFX8-NEXT: s_mov_b32 s3, 01615; GFX8-NEXT: s_mov_b32 s2, s11616; GFX8-NEXT: s_mov_b32 s1, s31617; GFX8-NEXT: s_load_dword s0, s[0:1], 0x01618; GFX8-NEXT: s_load_dword s1, s[2:3], 0x81619; GFX8-NEXT: s_waitcnt lgkmcnt(0)1620; GFX8-NEXT: s_lshr_b32 s2, s0, 161621; GFX8-NEXT: s_and_b32 s0, s0, 0xffff1622; GFX8-NEXT: s_lshr_b32 s3, s1, 161623; GFX8-NEXT: s_and_b32 s1, s1, 0xffff1624; GFX8-NEXT: s_add_i32 s0, s0, s11625; GFX8-NEXT: s_add_i32 s2, s2, s31626; GFX8-NEXT: v_mov_b32_e32 v0, s01627; GFX8-NEXT: v_mov_b32_e32 v1, s21628; GFX8-NEXT: ; return to shader part epilog1629;1630; GFX9-LABEL: zextload_v2i16:1631; GFX9: ; %bb.0:1632; GFX9-NEXT: s_mov_b32 s3, 01633; GFX9-NEXT: s_mov_b32 s2, s11634; GFX9-NEXT: s_mov_b32 s1, s31635; GFX9-NEXT: s_load_dword s4, s[0:1], 0x01636; GFX9-NEXT: s_load_dword s5, s[2:3], 0x81637; GFX9-NEXT: s_waitcnt lgkmcnt(0)1638; GFX9-NEXT: s_lshr_b32 s0, s4, 161639; GFX9-NEXT: s_and_b32 s1, s4, 0xffff1640; GFX9-NEXT: s_lshr_b32 s2, s5, 161641; GFX9-NEXT: s_and_b32 s3, s5, 0xffff1642; GFX9-NEXT: s_add_i32 s1, s1, s31643; GFX9-NEXT: s_add_i32 s0, s0, s21644; GFX9-NEXT: v_mov_b32_e32 v0, s11645; GFX9-NEXT: v_mov_b32_e32 v1, s01646; GFX9-NEXT: ; return to shader part epilog1647 %gep1 = getelementptr inbounds <2 x i16>, ptr addrspace(6) %p1, i32 21648 %r0 = load <2 x i16>, ptr addrspace(6) %p01649 %r1 = load <2 x i16>, ptr addrspace(6) %gep11650 %zext.r0 = zext <2 x i16> %r0 to <2 x i32>1651 %zext.r1 = zext <2 x i16> %r1 to <2 x i32>1652 %r = add <2 x i32> %zext.r0, %zext.r11653 %r2 = bitcast <2 x i32> %r to <2 x float>1654 ret <2 x float> %r21655}1656 1657; define amdgpu_vs float @sextload_i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1658; %gep1 = getelementptr inbounds i16, ptr addrspace(6) %p1, i32 21659; %r0 = load i16, ptr addrspace(6) %p01660; %r1 = load i16, ptr addrspace(6) %gep11661; %zext.r0 = sext i16 %r0 to i321662; %zext.r1 = sext i16 %r1 to i321663; %r = add i32 %zext.r0, %zext.r11664; %r2 = bitcast i32 %r to float1665; ret float %r21666; }1667 1668define amdgpu_vs <2 x float> @sextload_v2i16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1669; GFX67-LABEL: sextload_v2i16:1670; GFX67: ; %bb.0:1671; GFX67-NEXT: s_mov_b32 s3, 01672; GFX67-NEXT: s_mov_b32 s2, s11673; GFX67-NEXT: s_mov_b32 s1, s31674; GFX67-NEXT: s_load_dword s0, s[0:1], 0x01675; GFX67-NEXT: s_load_dword s1, s[2:3], 0x21676; GFX67-NEXT: s_waitcnt lgkmcnt(0)1677; GFX67-NEXT: s_ashr_i32 s2, s0, 161678; GFX67-NEXT: s_sext_i32_i16 s0, s01679; GFX67-NEXT: s_ashr_i32 s3, s1, 161680; GFX67-NEXT: s_sext_i32_i16 s1, s11681; GFX67-NEXT: s_add_i32 s0, s0, s11682; GFX67-NEXT: s_add_i32 s2, s2, s31683; GFX67-NEXT: v_mov_b32_e32 v0, s01684; GFX67-NEXT: v_mov_b32_e32 v1, s21685; GFX67-NEXT: ; return to shader part epilog1686;1687; GFX8-LABEL: sextload_v2i16:1688; GFX8: ; %bb.0:1689; GFX8-NEXT: s_mov_b32 s3, 01690; GFX8-NEXT: s_mov_b32 s2, s11691; GFX8-NEXT: s_mov_b32 s1, s31692; GFX8-NEXT: s_load_dword s0, s[0:1], 0x01693; GFX8-NEXT: s_load_dword s1, s[2:3], 0x81694; GFX8-NEXT: s_waitcnt lgkmcnt(0)1695; GFX8-NEXT: s_ashr_i32 s2, s0, 161696; GFX8-NEXT: s_sext_i32_i16 s0, s01697; GFX8-NEXT: s_ashr_i32 s3, s1, 161698; GFX8-NEXT: s_sext_i32_i16 s1, s11699; GFX8-NEXT: s_add_i32 s0, s0, s11700; GFX8-NEXT: s_add_i32 s2, s2, s31701; GFX8-NEXT: v_mov_b32_e32 v0, s01702; GFX8-NEXT: v_mov_b32_e32 v1, s21703; GFX8-NEXT: ; return to shader part epilog1704;1705; GFX9-LABEL: sextload_v2i16:1706; GFX9: ; %bb.0:1707; GFX9-NEXT: s_mov_b32 s3, 01708; GFX9-NEXT: s_mov_b32 s2, s11709; GFX9-NEXT: s_mov_b32 s1, s31710; GFX9-NEXT: s_load_dword s4, s[0:1], 0x01711; GFX9-NEXT: s_load_dword s5, s[2:3], 0x81712; GFX9-NEXT: s_waitcnt lgkmcnt(0)1713; GFX9-NEXT: s_ashr_i32 s0, s4, 161714; GFX9-NEXT: s_sext_i32_i16 s1, s41715; GFX9-NEXT: s_ashr_i32 s2, s5, 161716; GFX9-NEXT: s_sext_i32_i16 s3, s51717; GFX9-NEXT: s_add_i32 s1, s1, s31718; GFX9-NEXT: s_add_i32 s0, s0, s21719; GFX9-NEXT: v_mov_b32_e32 v0, s11720; GFX9-NEXT: v_mov_b32_e32 v1, s01721; GFX9-NEXT: ; return to shader part epilog1722 %gep1 = getelementptr inbounds <2 x i16>, ptr addrspace(6) %p1, i32 21723 %r0 = load <2 x i16>, ptr addrspace(6) %p01724 %r1 = load <2 x i16>, ptr addrspace(6) %gep11725 %sext.r0 = sext <2 x i16> %r0 to <2 x i32>1726 %sext.r1 = sext <2 x i16> %r1 to <2 x i32>1727 %r = add <2 x i32> %sext.r0, %sext.r11728 %r2 = bitcast <2 x i32> %r to <2 x float>1729 ret <2 x float> %r21730}1731 1732 1733; define amdgpu_vs float @load_i1(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1734; %gep1 = getelementptr inbounds i1, ptr addrspace(6) %p1, i32 21735; %r0 = load i1, ptr addrspace(6) %p01736; %r1 = load i1, ptr addrspace(6) %gep11737; %r = and i1 %r0, %r11738; %r2 = zext i1 %r to i321739; %cast = bitcast i32 %r2 to float1740; ret float %cast1741; }1742 1743; define amdgpu_vs float @zextload_i1(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1744; %gep1 = getelementptr inbounds i1, ptr addrspace(6) %p1, i32 21745; %r0 = load i1, ptr addrspace(6) %p01746; %r1 = load i1, ptr addrspace(6) %gep11747; %zext.r0 = zext i1 %r0 to i321748; %zext.r1 = zext i1 %r1 to i321749; %r = and i32 %zext.r0, %zext.r11750; %r2 = bitcast i32 %r to float1751; ret float %r21752; }1753 1754; define amdgpu_vs float @sextload_i1(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1755; %gep1 = getelementptr inbounds i1, ptr addrspace(6) %p1, i32 21756; %r0 = load i1, ptr addrspace(6) %p01757; %r1 = load i1, ptr addrspace(6) %gep11758; %zext.r0 = sext i1 %r0 to i321759; %zext.r1 = sext i1 %r1 to i321760; %r = and i32 %zext.r0, %zext.r11761; %r2 = bitcast i32 %r to float1762; ret float %r21763; }1764 1765; define amdgpu_vs half @load_f16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1766; %gep1 = getelementptr inbounds half, ptr addrspace(6) %p1, i32 21767; %r0 = load half, ptr addrspace(6) %p01768; %r1 = load half, ptr addrspace(6) %gep11769; %r = fadd half %r0, %r11770; ret half %r1771; }1772 1773define amdgpu_vs <2 x half> @load_v2f16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1774; GFX67-LABEL: load_v2f16:1775; GFX67: ; %bb.0:1776; GFX67-NEXT: s_mov_b32 s3, 01777; GFX67-NEXT: s_mov_b32 s2, s11778; GFX67-NEXT: s_mov_b32 s1, s31779; GFX67-NEXT: s_load_dword s0, s[0:1], 0x01780; GFX67-NEXT: s_load_dword s1, s[2:3], 0x21781; GFX67-NEXT: s_waitcnt lgkmcnt(0)1782; GFX67-NEXT: s_lshr_b32 s2, s0, 161783; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01784; GFX67-NEXT: s_lshr_b32 s0, s1, 161785; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s21786; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s11787; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s01788; GFX67-NEXT: v_add_f32_e32 v0, v0, v21789; GFX67-NEXT: v_add_f32_e32 v1, v1, v31790; GFX67-NEXT: ; return to shader part epilog1791;1792; GFX8-LABEL: load_v2f16:1793; GFX8: ; %bb.0:1794; GFX8-NEXT: s_mov_b32 s2, s11795; GFX8-NEXT: s_mov_b32 s3, 01796; GFX8-NEXT: s_mov_b32 s1, s31797; GFX8-NEXT: s_load_dword s2, s[2:3], 0x81798; GFX8-NEXT: s_load_dword s0, s[0:1], 0x01799; GFX8-NEXT: s_waitcnt lgkmcnt(0)1800; GFX8-NEXT: s_lshr_b32 s1, s2, 161801; GFX8-NEXT: s_lshr_b32 s3, s0, 161802; GFX8-NEXT: v_mov_b32_e32 v0, s11803; GFX8-NEXT: v_mov_b32_e32 v1, s31804; GFX8-NEXT: v_add_f16_sdwa v0, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1805; GFX8-NEXT: v_mov_b32_e32 v1, s21806; GFX8-NEXT: v_add_f16_e32 v1, s0, v11807; GFX8-NEXT: v_or_b32_e32 v0, v1, v01808; GFX8-NEXT: ; return to shader part epilog1809;1810; GFX9-LABEL: load_v2f16:1811; GFX9: ; %bb.0:1812; GFX9-NEXT: s_mov_b32 s2, s11813; GFX9-NEXT: s_mov_b32 s3, 01814; GFX9-NEXT: s_mov_b32 s1, s31815; GFX9-NEXT: s_load_dword s4, s[2:3], 0x81816; GFX9-NEXT: s_load_dword s5, s[0:1], 0x01817; GFX9-NEXT: s_waitcnt lgkmcnt(0)1818; GFX9-NEXT: v_mov_b32_e32 v0, s41819; GFX9-NEXT: v_pk_add_f16 v0, s5, v01820; GFX9-NEXT: ; return to shader part epilog1821 %gep1 = getelementptr inbounds <2 x half>, ptr addrspace(6) %p1, i32 21822 %r0 = load <2 x half>, ptr addrspace(6) %p01823 %r1 = load <2 x half>, ptr addrspace(6) %gep11824 %r = fadd <2 x half> %r0, %r11825 ret <2 x half> %r1826}1827 1828define amdgpu_vs <3 x half> @load_v3f16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1829; GFX67-LABEL: load_v3f16:1830; GFX67: ; %bb.0:1831; GFX67-NEXT: s_mov_b32 s3, 01832; GFX67-NEXT: s_mov_b32 s2, s11833; GFX67-NEXT: s_mov_b32 s1, s31834; GFX67-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01835; GFX67-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x41836; GFX67-NEXT: s_waitcnt lgkmcnt(0)1837; GFX67-NEXT: s_lshr_b32 s4, s0, 161838; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01839; GFX67-NEXT: s_lshr_b32 s0, s2, 161840; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s11841; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s41842; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s21843; GFX67-NEXT: v_cvt_f32_f16_e32 v4, s31844; GFX67-NEXT: v_cvt_f32_f16_e32 v5, s01845; GFX67-NEXT: v_add_f32_e32 v0, v0, v21846; GFX67-NEXT: v_add_f32_e32 v2, v1, v41847; GFX67-NEXT: v_add_f32_e32 v1, v3, v51848; GFX67-NEXT: ; return to shader part epilog1849;1850; GFX8-LABEL: load_v3f16:1851; GFX8: ; %bb.0:1852; GFX8-NEXT: s_mov_b32 s3, 01853; GFX8-NEXT: s_mov_b32 s2, s11854; GFX8-NEXT: s_mov_b32 s1, s31855; GFX8-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x101856; GFX8-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01857; GFX8-NEXT: s_waitcnt lgkmcnt(0)1858; GFX8-NEXT: v_mov_b32_e32 v0, s31859; GFX8-NEXT: v_add_f16_e32 v1, s1, v01860; GFX8-NEXT: v_mov_b32_e32 v0, s21861; GFX8-NEXT: v_add_f16_e32 v0, s0, v01862; GFX8-NEXT: s_lshr_b32 s1, s2, 161863; GFX8-NEXT: s_lshr_b32 s0, s0, 161864; GFX8-NEXT: v_mov_b32_e32 v2, s11865; GFX8-NEXT: v_mov_b32_e32 v3, s01866; GFX8-NEXT: v_add_f16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1867; GFX8-NEXT: v_or_b32_e32 v0, v0, v21868; GFX8-NEXT: ; return to shader part epilog1869;1870; GFX9-LABEL: load_v3f16:1871; GFX9: ; %bb.0:1872; GFX9-NEXT: s_mov_b32 s2, s11873; GFX9-NEXT: s_mov_b32 s3, 01874; GFX9-NEXT: s_mov_b32 s1, s31875; GFX9-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x101876; GFX9-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x01877; GFX9-NEXT: s_waitcnt lgkmcnt(0)1878; GFX9-NEXT: v_mov_b32_e32 v0, s41879; GFX9-NEXT: v_mov_b32_e32 v1, s51880; GFX9-NEXT: v_pk_add_f16 v0, s6, v01881; GFX9-NEXT: v_pk_add_f16 v1, s7, v11882; GFX9-NEXT: ; return to shader part epilog1883 %gep1 = getelementptr inbounds <3 x half>, ptr addrspace(6) %p1, i32 21884 %r0 = load <3 x half>, ptr addrspace(6) %p01885 %r1 = load <3 x half>, ptr addrspace(6) %gep11886 %r = fadd <3 x half> %r0, %r11887 ret <3 x half> %r1888}1889 1890define amdgpu_vs <4 x half> @load_v4f16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1891; GFX67-LABEL: load_v4f16:1892; GFX67: ; %bb.0:1893; GFX67-NEXT: s_mov_b32 s3, 01894; GFX67-NEXT: s_mov_b32 s2, s11895; GFX67-NEXT: s_mov_b32 s1, s31896; GFX67-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01897; GFX67-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x41898; GFX67-NEXT: s_waitcnt lgkmcnt(0)1899; GFX67-NEXT: s_lshr_b32 s4, s1, 161900; GFX67-NEXT: s_lshr_b32 s5, s0, 161901; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s11902; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01903; GFX67-NEXT: s_lshr_b32 s0, s3, 161904; GFX67-NEXT: s_lshr_b32 s1, s2, 161905; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s41906; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s51907; GFX67-NEXT: v_cvt_f32_f16_e32 v4, s21908; GFX67-NEXT: v_cvt_f32_f16_e32 v5, s31909; GFX67-NEXT: v_cvt_f32_f16_e32 v6, s11910; GFX67-NEXT: v_cvt_f32_f16_e32 v7, s01911; GFX67-NEXT: v_add_f32_e32 v0, v0, v41912; GFX67-NEXT: v_add_f32_e32 v2, v2, v51913; GFX67-NEXT: v_add_f32_e32 v1, v1, v61914; GFX67-NEXT: v_add_f32_e32 v3, v3, v71915; GFX67-NEXT: ; return to shader part epilog1916;1917; GFX8-LABEL: load_v4f16:1918; GFX8: ; %bb.0:1919; GFX8-NEXT: s_mov_b32 s3, 01920; GFX8-NEXT: s_mov_b32 s2, s11921; GFX8-NEXT: s_mov_b32 s1, s31922; GFX8-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x101923; GFX8-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01924; GFX8-NEXT: s_waitcnt lgkmcnt(0)1925; GFX8-NEXT: v_mov_b32_e32 v0, s31926; GFX8-NEXT: v_add_f16_e32 v1, s1, v01927; GFX8-NEXT: s_lshr_b32 s3, s3, 161928; GFX8-NEXT: s_lshr_b32 s1, s1, 161929; GFX8-NEXT: v_mov_b32_e32 v0, s31930; GFX8-NEXT: v_mov_b32_e32 v2, s11931; GFX8-NEXT: v_add_f16_sdwa v2, v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1932; GFX8-NEXT: v_mov_b32_e32 v0, s21933; GFX8-NEXT: v_add_f16_e32 v0, s0, v01934; GFX8-NEXT: s_lshr_b32 s1, s2, 161935; GFX8-NEXT: s_lshr_b32 s0, s0, 161936; GFX8-NEXT: v_mov_b32_e32 v3, s11937; GFX8-NEXT: v_mov_b32_e32 v4, s01938; GFX8-NEXT: v_add_f16_sdwa v3, v4, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1939; GFX8-NEXT: v_or_b32_e32 v0, v0, v31940; GFX8-NEXT: v_or_b32_e32 v1, v1, v21941; GFX8-NEXT: ; return to shader part epilog1942;1943; GFX9-LABEL: load_v4f16:1944; GFX9: ; %bb.0:1945; GFX9-NEXT: s_mov_b32 s2, s11946; GFX9-NEXT: s_mov_b32 s3, 01947; GFX9-NEXT: s_mov_b32 s1, s31948; GFX9-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x101949; GFX9-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x01950; GFX9-NEXT: s_waitcnt lgkmcnt(0)1951; GFX9-NEXT: v_mov_b32_e32 v0, s41952; GFX9-NEXT: v_mov_b32_e32 v1, s51953; GFX9-NEXT: v_pk_add_f16 v0, s6, v01954; GFX9-NEXT: v_pk_add_f16 v1, s7, v11955; GFX9-NEXT: ; return to shader part epilog1956 %gep1 = getelementptr inbounds <4 x half>, ptr addrspace(6) %p1, i32 21957 %r0 = load <4 x half>, ptr addrspace(6) %p01958 %r1 = load <4 x half>, ptr addrspace(6) %gep11959 %r = fadd <4 x half> %r0, %r11960 ret <4 x half> %r1961}1962 1963define amdgpu_vs <6 x half> @load_v6f16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {1964; GFX67-LABEL: load_v6f16:1965; GFX67: ; %bb.0:1966; GFX67-NEXT: s_mov_b32 s5, 01967; GFX67-NEXT: s_mov_b32 s4, s11968; GFX67-NEXT: s_mov_b32 s1, s51969; GFX67-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x01970; GFX67-NEXT: s_waitcnt lgkmcnt(0)1971; GFX67-NEXT: s_lshr_b32 s6, s1, 161972; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s61973; GFX67-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x81974; GFX67-NEXT: s_lshr_b32 s3, s2, 161975; GFX67-NEXT: v_cvt_f32_f16_e32 v5, s31976; GFX67-NEXT: s_lshr_b32 s3, s0, 161977; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s01978; GFX67-NEXT: s_waitcnt lgkmcnt(0)1979; GFX67-NEXT: s_lshr_b32 s0, s6, 161980; GFX67-NEXT: v_cvt_f32_f16_e32 v6, s01981; GFX67-NEXT: s_lshr_b32 s0, s5, 161982; GFX67-NEXT: v_cvt_f32_f16_e32 v7, s01983; GFX67-NEXT: s_lshr_b32 s0, s4, 161984; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s31985; GFX67-NEXT: v_cvt_f32_f16_e32 v4, s21986; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s11987; GFX67-NEXT: v_cvt_f32_f16_e32 v8, s41988; GFX67-NEXT: v_cvt_f32_f16_e32 v9, s51989; GFX67-NEXT: v_cvt_f32_f16_e32 v10, s61990; GFX67-NEXT: v_cvt_f32_f16_e32 v11, s01991; GFX67-NEXT: v_add_f32_e32 v0, v0, v81992; GFX67-NEXT: v_add_f32_e32 v2, v2, v91993; GFX67-NEXT: v_add_f32_e32 v4, v4, v101994; GFX67-NEXT: v_add_f32_e32 v1, v1, v111995; GFX67-NEXT: v_add_f32_e32 v3, v3, v71996; GFX67-NEXT: v_add_f32_e32 v5, v5, v61997; GFX67-NEXT: ; return to shader part epilog1998;1999; GFX8-LABEL: load_v6f16:2000; GFX8: ; %bb.0:2001; GFX8-NEXT: s_mov_b32 s3, 02002; GFX8-NEXT: s_mov_b32 s2, s12003; GFX8-NEXT: s_mov_b32 s1, s32004; GFX8-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x202005; GFX8-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x02006; GFX8-NEXT: s_waitcnt lgkmcnt(0)2007; GFX8-NEXT: v_mov_b32_e32 v0, s62008; GFX8-NEXT: v_add_f16_e32 v2, s2, v02009; GFX8-NEXT: s_lshr_b32 s3, s6, 162010; GFX8-NEXT: s_lshr_b32 s2, s2, 162011; GFX8-NEXT: v_mov_b32_e32 v0, s32012; GFX8-NEXT: v_mov_b32_e32 v1, s22013; GFX8-NEXT: v_add_f16_sdwa v3, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2014; GFX8-NEXT: v_mov_b32_e32 v0, s52015; GFX8-NEXT: v_add_f16_e32 v1, s1, v02016; GFX8-NEXT: s_lshr_b32 s2, s5, 162017; GFX8-NEXT: s_lshr_b32 s1, s1, 162018; GFX8-NEXT: v_mov_b32_e32 v0, s22019; GFX8-NEXT: v_mov_b32_e32 v4, s12020; GFX8-NEXT: v_add_f16_sdwa v4, v4, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2021; GFX8-NEXT: v_mov_b32_e32 v0, s42022; GFX8-NEXT: v_add_f16_e32 v0, s0, v02023; GFX8-NEXT: s_lshr_b32 s1, s4, 162024; GFX8-NEXT: s_lshr_b32 s0, s0, 162025; GFX8-NEXT: v_mov_b32_e32 v5, s12026; GFX8-NEXT: v_mov_b32_e32 v6, s02027; GFX8-NEXT: v_add_f16_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2028; GFX8-NEXT: v_or_b32_e32 v0, v0, v52029; GFX8-NEXT: v_or_b32_e32 v1, v1, v42030; GFX8-NEXT: v_or_b32_e32 v2, v2, v32031; GFX8-NEXT: ; return to shader part epilog2032;2033; GFX9-LABEL: load_v6f16:2034; GFX9: ; %bb.0:2035; GFX9-NEXT: s_mov_b32 s2, s12036; GFX9-NEXT: s_mov_b32 s3, 02037; GFX9-NEXT: s_mov_b32 s1, s32038; GFX9-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x202039; GFX9-NEXT: s_load_dwordx4 s[8:11], s[0:1], 0x02040; GFX9-NEXT: s_waitcnt lgkmcnt(0)2041; GFX9-NEXT: v_mov_b32_e32 v0, s42042; GFX9-NEXT: v_mov_b32_e32 v1, s52043; GFX9-NEXT: v_mov_b32_e32 v2, s62044; GFX9-NEXT: v_pk_add_f16 v0, s8, v02045; GFX9-NEXT: v_pk_add_f16 v1, s9, v12046; GFX9-NEXT: v_pk_add_f16 v2, s10, v22047; GFX9-NEXT: ; return to shader part epilog2048 %gep1 = getelementptr inbounds <6 x half>, ptr addrspace(6) %p1, i32 22049 %r0 = load <6 x half>, ptr addrspace(6) %p02050 %r1 = load <6 x half>, ptr addrspace(6) %gep12051 %r = fadd <6 x half> %r0, %r12052 ret <6 x half> %r2053}2054 2055define amdgpu_vs <8 x half> @load_v8f16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {2056; GFX67-LABEL: load_v8f16:2057; GFX67: ; %bb.0:2058; GFX67-NEXT: s_mov_b32 s5, 02059; GFX67-NEXT: s_mov_b32 s4, s12060; GFX67-NEXT: s_mov_b32 s1, s52061; GFX67-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x02062; GFX67-NEXT: s_waitcnt lgkmcnt(0)2063; GFX67-NEXT: s_lshr_b32 s6, s3, 162064; GFX67-NEXT: v_cvt_f32_f16_e32 v7, s62065; GFX67-NEXT: s_lshr_b32 s6, s1, 162066; GFX67-NEXT: s_lshr_b32 s7, s2, 162067; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s62068; GFX67-NEXT: s_lshr_b32 s6, s0, 162069; GFX67-NEXT: v_cvt_f32_f16_e32 v5, s72070; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s62071; GFX67-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x82072; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s02073; GFX67-NEXT: v_cvt_f32_f16_e32 v6, s32074; GFX67-NEXT: v_cvt_f32_f16_e32 v4, s22075; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s12076; GFX67-NEXT: s_waitcnt lgkmcnt(0)2077; GFX67-NEXT: s_lshr_b32 s0, s7, 162078; GFX67-NEXT: v_cvt_f32_f16_e32 v8, s02079; GFX67-NEXT: s_lshr_b32 s0, s6, 162080; GFX67-NEXT: v_cvt_f32_f16_e32 v9, s02081; GFX67-NEXT: s_lshr_b32 s0, s5, 162082; GFX67-NEXT: v_cvt_f32_f16_e32 v10, s02083; GFX67-NEXT: s_lshr_b32 s0, s4, 162084; GFX67-NEXT: v_cvt_f32_f16_e32 v11, s02085; GFX67-NEXT: v_cvt_f32_f16_e32 v12, s42086; GFX67-NEXT: v_cvt_f32_f16_e32 v13, s52087; GFX67-NEXT: v_cvt_f32_f16_e32 v14, s62088; GFX67-NEXT: v_cvt_f32_f16_e32 v15, s72089; GFX67-NEXT: v_add_f32_e32 v0, v0, v122090; GFX67-NEXT: v_add_f32_e32 v2, v2, v132091; GFX67-NEXT: v_add_f32_e32 v4, v4, v142092; GFX67-NEXT: v_add_f32_e32 v6, v6, v152093; GFX67-NEXT: v_add_f32_e32 v1, v1, v112094; GFX67-NEXT: v_add_f32_e32 v3, v3, v102095; GFX67-NEXT: v_add_f32_e32 v5, v5, v92096; GFX67-NEXT: v_add_f32_e32 v7, v7, v82097; GFX67-NEXT: ; return to shader part epilog2098;2099; GFX8-LABEL: load_v8f16:2100; GFX8: ; %bb.0:2101; GFX8-NEXT: s_mov_b32 s3, 02102; GFX8-NEXT: s_mov_b32 s2, s12103; GFX8-NEXT: s_mov_b32 s1, s32104; GFX8-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x202105; GFX8-NEXT: s_load_dwordx4 s[0:3], s[0:1], 0x02106; GFX8-NEXT: s_waitcnt lgkmcnt(0)2107; GFX8-NEXT: v_mov_b32_e32 v0, s72108; GFX8-NEXT: v_add_f16_e32 v3, s3, v02109; GFX8-NEXT: s_lshr_b32 s7, s7, 162110; GFX8-NEXT: s_lshr_b32 s3, s3, 162111; GFX8-NEXT: v_mov_b32_e32 v0, s72112; GFX8-NEXT: v_mov_b32_e32 v1, s32113; GFX8-NEXT: v_add_f16_sdwa v4, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2114; GFX8-NEXT: v_mov_b32_e32 v0, s62115; GFX8-NEXT: v_add_f16_e32 v2, s2, v02116; GFX8-NEXT: s_lshr_b32 s3, s6, 162117; GFX8-NEXT: s_lshr_b32 s2, s2, 162118; GFX8-NEXT: v_mov_b32_e32 v0, s32119; GFX8-NEXT: v_mov_b32_e32 v1, s22120; GFX8-NEXT: v_add_f16_sdwa v5, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2121; GFX8-NEXT: v_mov_b32_e32 v0, s52122; GFX8-NEXT: v_add_f16_e32 v1, s1, v02123; GFX8-NEXT: s_lshr_b32 s2, s5, 162124; GFX8-NEXT: s_lshr_b32 s1, s1, 162125; GFX8-NEXT: v_mov_b32_e32 v0, s22126; GFX8-NEXT: v_mov_b32_e32 v6, s12127; GFX8-NEXT: v_add_f16_sdwa v6, v6, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2128; GFX8-NEXT: v_mov_b32_e32 v0, s42129; GFX8-NEXT: v_add_f16_e32 v0, s0, v02130; GFX8-NEXT: s_lshr_b32 s1, s4, 162131; GFX8-NEXT: s_lshr_b32 s0, s0, 162132; GFX8-NEXT: v_mov_b32_e32 v7, s12133; GFX8-NEXT: v_mov_b32_e32 v8, s02134; GFX8-NEXT: v_add_f16_sdwa v7, v8, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2135; GFX8-NEXT: v_or_b32_e32 v0, v0, v72136; GFX8-NEXT: v_or_b32_e32 v1, v1, v62137; GFX8-NEXT: v_or_b32_e32 v2, v2, v52138; GFX8-NEXT: v_or_b32_e32 v3, v3, v42139; GFX8-NEXT: ; return to shader part epilog2140;2141; GFX9-LABEL: load_v8f16:2142; GFX9: ; %bb.0:2143; GFX9-NEXT: s_mov_b32 s2, s12144; GFX9-NEXT: s_mov_b32 s3, 02145; GFX9-NEXT: s_mov_b32 s1, s32146; GFX9-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x202147; GFX9-NEXT: s_load_dwordx4 s[8:11], s[0:1], 0x02148; GFX9-NEXT: s_waitcnt lgkmcnt(0)2149; GFX9-NEXT: v_mov_b32_e32 v0, s42150; GFX9-NEXT: v_mov_b32_e32 v1, s52151; GFX9-NEXT: v_mov_b32_e32 v2, s62152; GFX9-NEXT: v_mov_b32_e32 v3, s72153; GFX9-NEXT: v_pk_add_f16 v0, s8, v02154; GFX9-NEXT: v_pk_add_f16 v1, s9, v12155; GFX9-NEXT: v_pk_add_f16 v2, s10, v22156; GFX9-NEXT: v_pk_add_f16 v3, s11, v32157; GFX9-NEXT: ; return to shader part epilog2158 %gep1 = getelementptr inbounds <8 x half>, ptr addrspace(6) %p1, i32 22159 %r0 = load <8 x half>, ptr addrspace(6) %p02160 %r1 = load <8 x half>, ptr addrspace(6) %gep12161 %r = fadd <8 x half> %r0, %r12162 ret <8 x half> %r2163}2164 2165define amdgpu_vs <16 x half> @load_v16f16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {2166; GFX67-LABEL: load_v16f16:2167; GFX67: ; %bb.0:2168; GFX67-NEXT: s_mov_b32 s9, 02169; GFX67-NEXT: s_mov_b32 s8, s12170; GFX67-NEXT: s_mov_b32 s1, s92171; GFX67-NEXT: s_load_dwordx8 s[0:7], s[0:1], 0x02172; GFX67-NEXT: s_waitcnt lgkmcnt(0)2173; GFX67-NEXT: s_lshr_b32 s10, s7, 162174; GFX67-NEXT: v_cvt_f32_f16_e32 v15, s102175; GFX67-NEXT: s_lshr_b32 s10, s5, 162176; GFX67-NEXT: v_cvt_f32_f16_e32 v11, s102177; GFX67-NEXT: s_lshr_b32 s10, s4, 162178; GFX67-NEXT: v_cvt_f32_f16_e32 v9, s102179; GFX67-NEXT: s_lshr_b32 s10, s3, 162180; GFX67-NEXT: v_cvt_f32_f16_e32 v7, s102181; GFX67-NEXT: s_lshr_b32 s10, s2, 162182; GFX67-NEXT: v_cvt_f32_f16_e32 v5, s102183; GFX67-NEXT: s_lshr_b32 s10, s1, 162184; GFX67-NEXT: s_lshr_b32 s11, s6, 162185; GFX67-NEXT: v_cvt_f32_f16_e32 v3, s102186; GFX67-NEXT: s_lshr_b32 s10, s0, 162187; GFX67-NEXT: v_cvt_f32_f16_e32 v13, s112188; GFX67-NEXT: v_cvt_f32_f16_e32 v1, s102189; GFX67-NEXT: v_cvt_f32_f16_e32 v14, s72190; GFX67-NEXT: v_cvt_f32_f16_e32 v12, s62191; GFX67-NEXT: v_cvt_f32_f16_e32 v10, s52192; GFX67-NEXT: v_cvt_f32_f16_e32 v8, s42193; GFX67-NEXT: s_load_dwordx8 s[4:11], s[8:9], 0x102194; GFX67-NEXT: v_cvt_f32_f16_e32 v4, s22195; GFX67-NEXT: v_cvt_f32_f16_e32 v2, s12196; GFX67-NEXT: v_cvt_f32_f16_e32 v0, s02197; GFX67-NEXT: v_cvt_f32_f16_e32 v6, s32198; GFX67-NEXT: s_waitcnt lgkmcnt(0)2199; GFX67-NEXT: v_cvt_f32_f16_e32 v17, s42200; GFX67-NEXT: v_cvt_f32_f16_e32 v18, s52201; GFX67-NEXT: v_cvt_f32_f16_e32 v19, s62202; GFX67-NEXT: s_lshr_b32 s4, s4, 162203; GFX67-NEXT: v_add_f32_e32 v0, v0, v172204; GFX67-NEXT: v_cvt_f32_f16_e32 v17, s72205; GFX67-NEXT: v_add_f32_e32 v2, v2, v182206; GFX67-NEXT: v_cvt_f32_f16_e32 v18, s82207; GFX67-NEXT: v_add_f32_e32 v4, v4, v192208; GFX67-NEXT: v_cvt_f32_f16_e32 v19, s92209; GFX67-NEXT: v_add_f32_e32 v6, v6, v172210; GFX67-NEXT: v_cvt_f32_f16_e32 v17, s102211; GFX67-NEXT: v_add_f32_e32 v8, v8, v182212; GFX67-NEXT: v_cvt_f32_f16_e32 v18, s112213; GFX67-NEXT: v_add_f32_e32 v10, v10, v192214; GFX67-NEXT: v_cvt_f32_f16_e32 v19, s42215; GFX67-NEXT: s_lshr_b32 s3, s7, 162216; GFX67-NEXT: s_lshr_b32 s12, s6, 162217; GFX67-NEXT: s_lshr_b32 s13, s5, 162218; GFX67-NEXT: v_add_f32_e32 v12, v12, v172219; GFX67-NEXT: v_cvt_f32_f16_e32 v17, s132220; GFX67-NEXT: v_add_f32_e32 v14, v14, v182221; GFX67-NEXT: v_cvt_f32_f16_e32 v18, s122222; GFX67-NEXT: v_add_f32_e32 v1, v1, v192223; GFX67-NEXT: v_cvt_f32_f16_e32 v19, s32224; GFX67-NEXT: s_lshr_b32 s1, s10, 162225; GFX67-NEXT: s_lshr_b32 s0, s11, 162226; GFX67-NEXT: v_cvt_f32_f16_e32 v16, s12227; GFX67-NEXT: s_lshr_b32 s1, s9, 162228; GFX67-NEXT: s_lshr_b32 s2, s8, 162229; GFX67-NEXT: v_add_f32_e32 v3, v3, v172230; GFX67-NEXT: v_cvt_f32_f16_e32 v17, s22231; GFX67-NEXT: v_add_f32_e32 v5, v5, v182232; GFX67-NEXT: v_cvt_f32_f16_e32 v18, s12233; GFX67-NEXT: v_add_f32_e32 v7, v7, v192234; GFX67-NEXT: v_cvt_f32_f16_e32 v19, s02235; GFX67-NEXT: v_add_f32_e32 v9, v9, v172236; GFX67-NEXT: v_add_f32_e32 v11, v11, v182237; GFX67-NEXT: v_add_f32_e32 v13, v13, v162238; GFX67-NEXT: v_add_f32_e32 v15, v15, v192239; GFX67-NEXT: ; return to shader part epilog2240;2241; GFX8-LABEL: load_v16f16:2242; GFX8: ; %bb.0:2243; GFX8-NEXT: s_mov_b32 s3, 02244; GFX8-NEXT: s_mov_b32 s2, s12245; GFX8-NEXT: s_mov_b32 s1, s32246; GFX8-NEXT: s_load_dwordx8 s[8:15], s[2:3], 0x402247; GFX8-NEXT: s_load_dwordx8 s[0:7], s[0:1], 0x02248; GFX8-NEXT: s_waitcnt lgkmcnt(0)2249; GFX8-NEXT: v_mov_b32_e32 v0, s152250; GFX8-NEXT: v_add_f16_e32 v7, s7, v02251; GFX8-NEXT: s_lshr_b32 s15, s15, 162252; GFX8-NEXT: s_lshr_b32 s7, s7, 162253; GFX8-NEXT: v_mov_b32_e32 v0, s152254; GFX8-NEXT: v_mov_b32_e32 v1, s72255; GFX8-NEXT: v_add_f16_sdwa v8, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2256; GFX8-NEXT: v_mov_b32_e32 v0, s142257; GFX8-NEXT: v_add_f16_e32 v6, s6, v02258; GFX8-NEXT: s_lshr_b32 s7, s14, 162259; GFX8-NEXT: s_lshr_b32 s6, s6, 162260; GFX8-NEXT: v_mov_b32_e32 v0, s72261; GFX8-NEXT: v_mov_b32_e32 v1, s62262; GFX8-NEXT: v_add_f16_sdwa v9, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2263; GFX8-NEXT: v_mov_b32_e32 v0, s132264; GFX8-NEXT: v_add_f16_e32 v5, s5, v02265; GFX8-NEXT: s_lshr_b32 s6, s13, 162266; GFX8-NEXT: s_lshr_b32 s5, s5, 162267; GFX8-NEXT: v_mov_b32_e32 v0, s62268; GFX8-NEXT: v_mov_b32_e32 v1, s52269; GFX8-NEXT: v_add_f16_sdwa v10, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2270; GFX8-NEXT: v_mov_b32_e32 v0, s122271; GFX8-NEXT: v_add_f16_e32 v4, s4, v02272; GFX8-NEXT: s_lshr_b32 s5, s12, 162273; GFX8-NEXT: s_lshr_b32 s4, s4, 162274; GFX8-NEXT: v_mov_b32_e32 v0, s52275; GFX8-NEXT: v_mov_b32_e32 v1, s42276; GFX8-NEXT: v_add_f16_sdwa v11, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2277; GFX8-NEXT: v_mov_b32_e32 v0, s112278; GFX8-NEXT: v_add_f16_e32 v3, s3, v02279; GFX8-NEXT: s_lshr_b32 s4, s11, 162280; GFX8-NEXT: s_lshr_b32 s3, s3, 162281; GFX8-NEXT: v_mov_b32_e32 v0, s42282; GFX8-NEXT: v_mov_b32_e32 v1, s32283; GFX8-NEXT: v_add_f16_sdwa v12, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2284; GFX8-NEXT: v_mov_b32_e32 v0, s102285; GFX8-NEXT: v_add_f16_e32 v2, s2, v02286; GFX8-NEXT: s_lshr_b32 s3, s10, 162287; GFX8-NEXT: s_lshr_b32 s2, s2, 162288; GFX8-NEXT: v_mov_b32_e32 v0, s32289; GFX8-NEXT: v_mov_b32_e32 v1, s22290; GFX8-NEXT: v_add_f16_sdwa v13, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2291; GFX8-NEXT: v_mov_b32_e32 v0, s92292; GFX8-NEXT: v_add_f16_e32 v1, s1, v02293; GFX8-NEXT: s_lshr_b32 s2, s9, 162294; GFX8-NEXT: s_lshr_b32 s1, s1, 162295; GFX8-NEXT: v_mov_b32_e32 v0, s22296; GFX8-NEXT: v_mov_b32_e32 v14, s12297; GFX8-NEXT: v_add_f16_sdwa v14, v14, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2298; GFX8-NEXT: v_mov_b32_e32 v0, s82299; GFX8-NEXT: v_add_f16_e32 v0, s0, v02300; GFX8-NEXT: s_lshr_b32 s1, s8, 162301; GFX8-NEXT: s_lshr_b32 s0, s0, 162302; GFX8-NEXT: v_mov_b32_e32 v15, s12303; GFX8-NEXT: v_mov_b32_e32 v16, s02304; GFX8-NEXT: v_add_f16_sdwa v15, v16, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2305; GFX8-NEXT: v_or_b32_e32 v0, v0, v152306; GFX8-NEXT: v_or_b32_e32 v1, v1, v142307; GFX8-NEXT: v_or_b32_e32 v2, v2, v132308; GFX8-NEXT: v_or_b32_e32 v3, v3, v122309; GFX8-NEXT: v_or_b32_e32 v4, v4, v112310; GFX8-NEXT: v_or_b32_e32 v5, v5, v102311; GFX8-NEXT: v_or_b32_e32 v6, v6, v92312; GFX8-NEXT: v_or_b32_e32 v7, v7, v82313; GFX8-NEXT: ; return to shader part epilog2314;2315; GFX9-LABEL: load_v16f16:2316; GFX9: ; %bb.0:2317; GFX9-NEXT: s_mov_b32 s2, s12318; GFX9-NEXT: s_mov_b32 s3, 02319; GFX9-NEXT: s_mov_b32 s1, s32320; GFX9-NEXT: s_load_dwordx8 s[4:11], s[2:3], 0x402321; GFX9-NEXT: s_load_dwordx8 s[12:19], s[0:1], 0x02322; GFX9-NEXT: s_waitcnt lgkmcnt(0)2323; GFX9-NEXT: v_mov_b32_e32 v0, s42324; GFX9-NEXT: v_mov_b32_e32 v1, s52325; GFX9-NEXT: v_mov_b32_e32 v2, s62326; GFX9-NEXT: v_mov_b32_e32 v3, s72327; GFX9-NEXT: v_mov_b32_e32 v4, s82328; GFX9-NEXT: v_mov_b32_e32 v5, s92329; GFX9-NEXT: v_mov_b32_e32 v6, s102330; GFX9-NEXT: v_mov_b32_e32 v7, s112331; GFX9-NEXT: v_pk_add_f16 v0, s12, v02332; GFX9-NEXT: v_pk_add_f16 v1, s13, v12333; GFX9-NEXT: v_pk_add_f16 v2, s14, v22334; GFX9-NEXT: v_pk_add_f16 v3, s15, v32335; GFX9-NEXT: v_pk_add_f16 v4, s16, v42336; GFX9-NEXT: v_pk_add_f16 v5, s17, v52337; GFX9-NEXT: v_pk_add_f16 v6, s18, v62338; GFX9-NEXT: v_pk_add_f16 v7, s19, v72339; GFX9-NEXT: ; return to shader part epilog2340 %gep1 = getelementptr inbounds <16 x half>, ptr addrspace(6) %p1, i32 22341 %r0 = load <16 x half>, ptr addrspace(6) %p02342 %r1 = load <16 x half>, ptr addrspace(6) %gep12343 %r = fadd <16 x half> %r0, %r12344 ret <16 x half> %r2345}2346 2347; define amdgpu_vs bfloat @load_bf16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {2348; %gep1 = getelementptr inbounds bfloat, ptr addrspace(6) %p1, i32 22349; %r0 = load bfloat, ptr addrspace(6) %p02350; %r1 = load bfloat, ptr addrspace(6) %gep12351; %r = fadd bfloat %r0, %r12352; ret bfloat %r2353; }2354 2355define amdgpu_vs <2 x bfloat> @load_v2bf16(ptr addrspace(6) inreg %p0, ptr addrspace(6) inreg %p1) #0 {2356; GFX67-LABEL: load_v2bf16:2357; GFX67: ; %bb.0:2358; GFX67-NEXT: s_mov_b32 s2, s12359; GFX67-NEXT: s_mov_b32 s3, 02360; GFX67-NEXT: s_mov_b32 s1, s32361; GFX67-NEXT: s_load_dword s2, s[2:3], 0x22362; GFX67-NEXT: s_load_dword s0, s[0:1], 0x02363; GFX67-NEXT: s_waitcnt lgkmcnt(0)2364; GFX67-NEXT: s_and_b32 s1, s2, 0xffff00002365; GFX67-NEXT: s_and_b32 s3, s0, 0xffff00002366; GFX67-NEXT: v_mov_b32_e32 v0, s12367; GFX67-NEXT: s_lshl_b32 s1, s2, 162368; GFX67-NEXT: v_add_f32_e32 v1, s3, v02369; GFX67-NEXT: s_lshl_b32 s0, s0, 162370; GFX67-NEXT: v_mov_b32_e32 v0, s12371; GFX67-NEXT: v_add_f32_e32 v0, s0, v02372; GFX67-NEXT: v_and_b32_e32 v0, 0xffff0000, v02373; GFX67-NEXT: v_and_b32_e32 v1, 0xffff0000, v12374; GFX67-NEXT: ; return to shader part epilog2375;2376; GFX8-LABEL: load_v2bf16:2377; GFX8: ; %bb.0:2378; GFX8-NEXT: s_mov_b32 s2, s12379; GFX8-NEXT: s_mov_b32 s1, 02380; GFX8-NEXT: s_mov_b32 s3, s12381; GFX8-NEXT: s_load_dword s0, s[0:1], 0x02382; GFX8-NEXT: s_load_dword s1, s[2:3], 0x82383; GFX8-NEXT: s_waitcnt lgkmcnt(0)2384; GFX8-NEXT: s_lshl_b32 s2, s0, 162385; GFX8-NEXT: s_lshl_b32 s3, s1, 162386; GFX8-NEXT: v_mov_b32_e32 v0, s32387; GFX8-NEXT: v_add_f32_e32 v0, s2, v02388; GFX8-NEXT: v_bfe_u32 v1, v0, 16, 12389; GFX8-NEXT: v_add_u32_e32 v1, vcc, v1, v02390; GFX8-NEXT: v_add_u32_e32 v1, vcc, 0x7fff, v12391; GFX8-NEXT: v_or_b32_e32 v2, 0x400000, v02392; GFX8-NEXT: v_cmp_u_f32_e32 vcc, v0, v02393; GFX8-NEXT: s_and_b32 s1, s1, 0xffff00002394; GFX8-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc2395; GFX8-NEXT: s_and_b32 s0, s0, 0xffff00002396; GFX8-NEXT: v_mov_b32_e32 v1, s12397; GFX8-NEXT: v_add_f32_e32 v1, s0, v12398; GFX8-NEXT: v_bfe_u32 v2, v1, 16, 12399; GFX8-NEXT: v_add_u32_e32 v2, vcc, v2, v12400; GFX8-NEXT: v_add_u32_e32 v2, vcc, 0x7fff, v22401; GFX8-NEXT: v_or_b32_e32 v3, 0x400000, v12402; GFX8-NEXT: v_cmp_u_f32_e32 vcc, v1, v12403; GFX8-NEXT: v_cndmask_b32_e32 v1, v2, v3, vcc2404; GFX8-NEXT: v_lshrrev_b32_e32 v1, 16, v12405; GFX8-NEXT: v_lshrrev_b64 v[0:1], 16, v[0:1]2406; GFX8-NEXT: v_readfirstlane_b32 s0, v02407; GFX8-NEXT: ; return to shader part epilog2408;2409; GFX9-LABEL: load_v2bf16:2410; GFX9: ; %bb.0:2411; GFX9-NEXT: s_mov_b32 s2, s12412; GFX9-NEXT: s_mov_b32 s1, 02413; GFX9-NEXT: s_mov_b32 s3, s12414; GFX9-NEXT: s_load_dword s4, s[0:1], 0x02415; GFX9-NEXT: s_load_dword s5, s[2:3], 0x82416; GFX9-NEXT: s_waitcnt lgkmcnt(0)2417; GFX9-NEXT: s_and_b32 s0, s4, 0xffff00002418; GFX9-NEXT: s_and_b32 s1, s5, 0xffff00002419; GFX9-NEXT: v_mov_b32_e32 v0, s12420; GFX9-NEXT: v_add_f32_e32 v0, s0, v02421; GFX9-NEXT: v_bfe_u32 v1, v0, 16, 12422; GFX9-NEXT: v_add_u32_e32 v1, v1, v02423; GFX9-NEXT: v_add_u32_e32 v1, 0x7fff, v12424; GFX9-NEXT: v_or_b32_e32 v2, 0x400000, v02425; GFX9-NEXT: v_cmp_u_f32_e32 vcc, v0, v02426; GFX9-NEXT: s_lshl_b32 s0, s5, 162427; GFX9-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc2428; GFX9-NEXT: s_lshl_b32 s1, s4, 162429; GFX9-NEXT: v_mov_b32_e32 v1, s02430; GFX9-NEXT: v_add_f32_e32 v1, s1, v12431; GFX9-NEXT: v_bfe_u32 v2, v1, 16, 12432; GFX9-NEXT: v_add_u32_e32 v2, v2, v12433; GFX9-NEXT: v_add_u32_e32 v2, 0x7fff, v22434; GFX9-NEXT: v_or_b32_e32 v3, 0x400000, v12435; GFX9-NEXT: v_cmp_u_f32_e32 vcc, v1, v12436; GFX9-NEXT: v_cndmask_b32_e32 v1, v2, v3, vcc2437; GFX9-NEXT: v_mov_b32_e32 v2, 0xffff2438; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v02439; GFX9-NEXT: v_and_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12440; GFX9-NEXT: v_lshl_or_b32 v0, v0, 16, v12441; GFX9-NEXT: v_readfirstlane_b32 s0, v02442; GFX9-NEXT: ; return to shader part epilog2443 %gep1 = getelementptr inbounds <2 x bfloat>, ptr addrspace(6) %p1, i32 22444 %r0 = load <2 x bfloat>, ptr addrspace(6) %p02445 %r1 = load <2 x bfloat>, ptr addrspace(6) %gep12446 %r = fadd <2 x bfloat> %r0, %r12447 ret <2 x bfloat> %r2448}2449 2450define amdgpu_vs i32 @load_i32_max_gfx6_offset(ptr addrspace(6) inreg %ptr) #0 {2451; GFX67-LABEL: load_i32_max_gfx6_offset:2452; GFX67: ; %bb.0:2453; GFX67-NEXT: s_mov_b32 s1, 02454; GFX67-NEXT: s_load_dword s0, s[0:1], 0xff2455; GFX67-NEXT: s_waitcnt lgkmcnt(0)2456; GFX67-NEXT: ; return to shader part epilog2457;2458; GFX89-LABEL: load_i32_max_gfx6_offset:2459; GFX89: ; %bb.0:2460; GFX89-NEXT: s_mov_b32 s1, 02461; GFX89-NEXT: s_load_dword s0, s[0:1], 0x3fc2462; GFX89-NEXT: s_waitcnt lgkmcnt(0)2463; GFX89-NEXT: ; return to shader part epilog2464 %gep1 = getelementptr inbounds i32, ptr addrspace(6) %ptr, i32 2552465 %ld = load i32, ptr addrspace(6) %gep12466 ret i32 %ld2467}2468 2469define amdgpu_vs i32 @load_i32_max_gfx6_offset_p1(ptr addrspace(6) inreg %ptr) #0 {2470; GFX67-LABEL: load_i32_max_gfx6_offset_p1:2471; GFX67: ; %bb.0:2472; GFX67-NEXT: s_addk_i32 s0, 0x4002473; GFX67-NEXT: s_mov_b32 s1, 02474; GFX67-NEXT: s_load_dword s0, s[0:1], 0x02475; GFX67-NEXT: s_waitcnt lgkmcnt(0)2476; GFX67-NEXT: ; return to shader part epilog2477;2478; GFX89-LABEL: load_i32_max_gfx6_offset_p1:2479; GFX89: ; %bb.0:2480; GFX89-NEXT: s_mov_b32 s1, 02481; GFX89-NEXT: s_load_dword s0, s[0:1], 0x4002482; GFX89-NEXT: s_waitcnt lgkmcnt(0)2483; GFX89-NEXT: ; return to shader part epilog2484 %gep1 = getelementptr inbounds i32, ptr addrspace(6) %ptr, i32 2562485 %ld = load i32, ptr addrspace(6) %gep12486 ret i32 %ld2487}2488 2489define amdgpu_vs i32 @load_i32_max_gfx8_offset(ptr addrspace(6) inreg %ptr) #0 {2490; GFX67-LABEL: load_i32_max_gfx8_offset:2491; GFX67: ; %bb.0:2492; GFX67-NEXT: s_add_i32 s0, s0, 0xfffff2493; GFX67-NEXT: s_mov_b32 s1, 02494; GFX67-NEXT: s_load_dword s0, s[0:1], 0x02495; GFX67-NEXT: s_waitcnt lgkmcnt(0)2496; GFX67-NEXT: ; return to shader part epilog2497;2498; GFX8-LABEL: load_i32_max_gfx8_offset:2499; GFX8: ; %bb.0:2500; GFX8-NEXT: s_mov_b32 s1, 02501; GFX8-NEXT: s_load_dword s0, s[0:1], 0xfffff2502; GFX8-NEXT: s_waitcnt lgkmcnt(0)2503; GFX8-NEXT: ; return to shader part epilog2504;2505; GFX9-LABEL: load_i32_max_gfx8_offset:2506; GFX9: ; %bb.0:2507; GFX9-NEXT: s_add_i32 s0, s0, 0xfffff2508; GFX9-NEXT: s_mov_b32 s1, 02509; GFX9-NEXT: s_load_dword s0, s[0:1], 0x02510; GFX9-NEXT: s_waitcnt lgkmcnt(0)2511; GFX9-NEXT: ; return to shader part epilog2512 %gep1 = getelementptr inbounds i8, ptr addrspace(6) %ptr, i32 10485752513 %ld = load i32, ptr addrspace(6) %gep12514 ret i32 %ld2515}2516 2517define amdgpu_vs i32 @load_i32_max_gfx8_offset_p1(ptr addrspace(6) inreg %ptr) #0 {2518; GFX67-LABEL: load_i32_max_gfx8_offset_p1:2519; GFX67: ; %bb.0:2520; GFX67-NEXT: s_add_i32 s0, s0, 0x1000002521; GFX67-NEXT: s_mov_b32 s1, 02522; GFX67-NEXT: s_load_dword s0, s[0:1], 0x02523; GFX67-NEXT: s_waitcnt lgkmcnt(0)2524; GFX67-NEXT: ; return to shader part epilog2525;2526; GFX89-LABEL: load_i32_max_gfx8_offset_p1:2527; GFX89: ; %bb.0:2528; GFX89-NEXT: s_add_i32 s0, s0, 0x1000002529; GFX89-NEXT: s_mov_b32 s1, 02530; GFX89-NEXT: s_load_dword s0, s[0:1], 0x02531; GFX89-NEXT: s_waitcnt lgkmcnt(0)2532; GFX89-NEXT: ; return to shader part epilog2533 %gep1 = getelementptr inbounds i8, ptr addrspace(6) %ptr, i32 10485762534 %ld = load i32, ptr addrspace(6) %gep12535 ret i32 %ld2536}2537 2538declare float @llvm.amdgcn.interp.mov(i32, i32, i32, i32) #62539declare <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32, float, <8 x i32>, <4 x i32>, i1, i32, i32) #72540declare float @llvm.amdgcn.struct.ptr.buffer.load.format.f32(ptr addrspace(8), i32, i32, i32, i32) #72541 2542!0 = !{}2543 2544attributes #0 = { nounwind }2545attributes #1 = { nounwind "amdgpu-32bit-address-high-bits"="0" }2546attributes #2 = { nounwind "amdgpu-32bit-address-high-bits"="1" }2547attributes #3 = { nounwind "amdgpu-32bit-address-high-bits"="0xffff8000" }2548attributes #4 = { nounwind "amdgpu-32bit-address-high-bits"="0xfffffff0" }2549attributes #5 = { "InitialPSInputAddr"="45175" }2550attributes #6 = { nounwind readnone speculatable }2551attributes #7 = { nounwind memory(argmem: read) }2552attributes #8 = { nounwind readnone }2553