brintos

brintos / llvm-project-archived public Read only

0
0
Text · 51.8 KiB · b8814b6 Raw
1401 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=amdgcn -mcpu=verde < %s | FileCheck -check-prefixes=GFX6 %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX8 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10 %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11 %s7; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12 %s8 9define amdgpu_kernel void @s_add_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {10; GFX6-LABEL: s_add_i32:11; GFX6:       ; %bb.0:12; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x913; GFX6-NEXT:    s_waitcnt lgkmcnt(0)14; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x015; GFX6-NEXT:    s_mov_b32 s3, 0xf00016; GFX6-NEXT:    s_mov_b32 s2, -117; GFX6-NEXT:    s_waitcnt lgkmcnt(0)18; GFX6-NEXT:    s_add_i32 s4, s4, s519; GFX6-NEXT:    v_mov_b32_e32 v0, s420; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], 021; GFX6-NEXT:    s_endpgm22;23; GFX8-LABEL: s_add_i32:24; GFX8:       ; %bb.0:25; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2426; GFX8-NEXT:    s_waitcnt lgkmcnt(0)27; GFX8-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x028; GFX8-NEXT:    v_mov_b32_e32 v0, s029; GFX8-NEXT:    v_mov_b32_e32 v1, s130; GFX8-NEXT:    s_waitcnt lgkmcnt(0)31; GFX8-NEXT:    s_add_i32 s0, s2, s332; GFX8-NEXT:    v_mov_b32_e32 v2, s033; GFX8-NEXT:    flat_store_dword v[0:1], v234; GFX8-NEXT:    s_endpgm35;36; GFX9-LABEL: s_add_i32:37; GFX9:       ; %bb.0:38; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2439; GFX9-NEXT:    v_mov_b32_e32 v0, 040; GFX9-NEXT:    s_waitcnt lgkmcnt(0)41; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x042; GFX9-NEXT:    s_waitcnt lgkmcnt(0)43; GFX9-NEXT:    s_add_i32 s2, s4, s544; GFX9-NEXT:    v_mov_b32_e32 v1, s245; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]46; GFX9-NEXT:    s_endpgm47;48; GFX10-LABEL: s_add_i32:49; GFX10:       ; %bb.0:50; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2451; GFX10-NEXT:    v_mov_b32_e32 v0, 052; GFX10-NEXT:    s_waitcnt lgkmcnt(0)53; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x054; GFX10-NEXT:    s_waitcnt lgkmcnt(0)55; GFX10-NEXT:    s_add_i32 s2, s4, s556; GFX10-NEXT:    v_mov_b32_e32 v1, s257; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]58; GFX10-NEXT:    s_endpgm59;60; GFX11-LABEL: s_add_i32:61; GFX11:       ; %bb.0:62; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2463; GFX11-NEXT:    s_waitcnt lgkmcnt(0)64; GFX11-NEXT:    s_load_b64 s[2:3], s[2:3], 0x065; GFX11-NEXT:    s_waitcnt lgkmcnt(0)66; GFX11-NEXT:    s_add_i32 s2, s2, s367; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)68; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s269; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]70; GFX11-NEXT:    s_endpgm71;72; GFX12-LABEL: s_add_i32:73; GFX12:       ; %bb.0:74; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2475; GFX12-NEXT:    s_wait_kmcnt 0x076; GFX12-NEXT:    s_load_b64 s[2:3], s[2:3], 0x077; GFX12-NEXT:    s_wait_kmcnt 0x078; GFX12-NEXT:    s_add_co_i32 s2, s2, s379; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)80; GFX12-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s281; GFX12-NEXT:    global_store_b32 v0, v1, s[0:1]82; GFX12-NEXT:    s_endpgm83  %b_ptr = getelementptr i32, ptr addrspace(1) %in, i32 184  %a = load i32, ptr addrspace(1) %in85  %b = load i32, ptr addrspace(1) %b_ptr86  %result = add i32 %a, %b87  store i32 %result, ptr addrspace(1) %out88  ret void89}90 91define amdgpu_kernel void @s_add_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {92; GFX6-LABEL: s_add_v2i32:93; GFX6:       ; %bb.0:94; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x995; GFX6-NEXT:    s_waitcnt lgkmcnt(0)96; GFX6-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x097; GFX6-NEXT:    s_mov_b32 s3, 0xf00098; GFX6-NEXT:    s_mov_b32 s2, -199; GFX6-NEXT:    s_waitcnt lgkmcnt(0)100; GFX6-NEXT:    s_add_i32 s5, s5, s7101; GFX6-NEXT:    s_add_i32 s4, s4, s6102; GFX6-NEXT:    v_mov_b32_e32 v0, s4103; GFX6-NEXT:    v_mov_b32_e32 v1, s5104; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0105; GFX6-NEXT:    s_endpgm106;107; GFX8-LABEL: s_add_v2i32:108; GFX8:       ; %bb.0:109; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24110; GFX8-NEXT:    s_waitcnt lgkmcnt(0)111; GFX8-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0112; GFX8-NEXT:    v_mov_b32_e32 v0, s0113; GFX8-NEXT:    v_mov_b32_e32 v1, s1114; GFX8-NEXT:    s_waitcnt lgkmcnt(0)115; GFX8-NEXT:    s_add_i32 s0, s5, s7116; GFX8-NEXT:    s_add_i32 s1, s4, s6117; GFX8-NEXT:    v_mov_b32_e32 v2, s1118; GFX8-NEXT:    v_mov_b32_e32 v3, s0119; GFX8-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]120; GFX8-NEXT:    s_endpgm121;122; GFX9-LABEL: s_add_v2i32:123; GFX9:       ; %bb.0:124; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24125; GFX9-NEXT:    v_mov_b32_e32 v2, 0126; GFX9-NEXT:    s_waitcnt lgkmcnt(0)127; GFX9-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0128; GFX9-NEXT:    s_waitcnt lgkmcnt(0)129; GFX9-NEXT:    s_add_i32 s2, s5, s7130; GFX9-NEXT:    s_add_i32 s3, s4, s6131; GFX9-NEXT:    v_mov_b32_e32 v0, s3132; GFX9-NEXT:    v_mov_b32_e32 v1, s2133; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]134; GFX9-NEXT:    s_endpgm135;136; GFX10-LABEL: s_add_v2i32:137; GFX10:       ; %bb.0:138; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24139; GFX10-NEXT:    v_mov_b32_e32 v2, 0140; GFX10-NEXT:    s_waitcnt lgkmcnt(0)141; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0142; GFX10-NEXT:    s_waitcnt lgkmcnt(0)143; GFX10-NEXT:    s_add_i32 s2, s4, s6144; GFX10-NEXT:    s_add_i32 s3, s5, s7145; GFX10-NEXT:    v_mov_b32_e32 v0, s2146; GFX10-NEXT:    v_mov_b32_e32 v1, s3147; GFX10-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]148; GFX10-NEXT:    s_endpgm149;150; GFX11-LABEL: s_add_v2i32:151; GFX11:       ; %bb.0:152; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24153; GFX11-NEXT:    s_waitcnt lgkmcnt(0)154; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0155; GFX11-NEXT:    s_waitcnt lgkmcnt(0)156; GFX11-NEXT:    s_add_i32 s2, s4, s6157; GFX11-NEXT:    s_add_i32 s3, s5, s7158; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)159; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3160; GFX11-NEXT:    v_mov_b32_e32 v0, s2161; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]162; GFX11-NEXT:    s_endpgm163;164; GFX12-LABEL: s_add_v2i32:165; GFX12:       ; %bb.0:166; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24167; GFX12-NEXT:    s_wait_kmcnt 0x0168; GFX12-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0169; GFX12-NEXT:    s_wait_kmcnt 0x0170; GFX12-NEXT:    s_add_co_i32 s2, s4, s6171; GFX12-NEXT:    s_add_co_i32 s3, s5, s7172; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)173; GFX12-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3174; GFX12-NEXT:    v_mov_b32_e32 v0, s2175; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]176; GFX12-NEXT:    s_endpgm177  %b_ptr = getelementptr <2 x i32>, ptr addrspace(1) %in, i32 1178  %a = load <2 x i32>, ptr addrspace(1) %in179  %b = load <2 x i32>, ptr addrspace(1) %b_ptr180  %result = add <2 x i32> %a, %b181  store <2 x i32> %result, ptr addrspace(1) %out182  ret void183}184 185define amdgpu_kernel void @s_add_v4i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {186; GFX6-LABEL: s_add_v4i32:187; GFX6:       ; %bb.0:188; GFX6-NEXT:    s_load_dwordx4 s[8:11], s[4:5], 0x9189; GFX6-NEXT:    s_waitcnt lgkmcnt(0)190; GFX6-NEXT:    s_load_dwordx8 s[0:7], s[10:11], 0x0191; GFX6-NEXT:    s_mov_b32 s11, 0xf000192; GFX6-NEXT:    s_mov_b32 s10, -1193; GFX6-NEXT:    s_waitcnt lgkmcnt(0)194; GFX6-NEXT:    s_add_i32 s3, s3, s7195; GFX6-NEXT:    s_add_i32 s2, s2, s6196; GFX6-NEXT:    s_add_i32 s1, s1, s5197; GFX6-NEXT:    s_add_i32 s0, s0, s4198; GFX6-NEXT:    v_mov_b32_e32 v0, s0199; GFX6-NEXT:    v_mov_b32_e32 v1, s1200; GFX6-NEXT:    v_mov_b32_e32 v2, s2201; GFX6-NEXT:    v_mov_b32_e32 v3, s3202; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0203; GFX6-NEXT:    s_endpgm204;205; GFX8-LABEL: s_add_v4i32:206; GFX8:       ; %bb.0:207; GFX8-NEXT:    s_load_dwordx4 s[8:11], s[4:5], 0x24208; GFX8-NEXT:    s_waitcnt lgkmcnt(0)209; GFX8-NEXT:    s_load_dwordx8 s[0:7], s[10:11], 0x0210; GFX8-NEXT:    v_mov_b32_e32 v4, s8211; GFX8-NEXT:    v_mov_b32_e32 v5, s9212; GFX8-NEXT:    s_waitcnt lgkmcnt(0)213; GFX8-NEXT:    s_add_i32 s3, s3, s7214; GFX8-NEXT:    s_add_i32 s2, s2, s6215; GFX8-NEXT:    s_add_i32 s1, s1, s5216; GFX8-NEXT:    s_add_i32 s0, s0, s4217; GFX8-NEXT:    v_mov_b32_e32 v0, s0218; GFX8-NEXT:    v_mov_b32_e32 v1, s1219; GFX8-NEXT:    v_mov_b32_e32 v2, s2220; GFX8-NEXT:    v_mov_b32_e32 v3, s3221; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]222; GFX8-NEXT:    s_endpgm223;224; GFX9-LABEL: s_add_v4i32:225; GFX9:       ; %bb.0:226; GFX9-NEXT:    s_load_dwordx4 s[8:11], s[4:5], 0x24227; GFX9-NEXT:    v_mov_b32_e32 v4, 0228; GFX9-NEXT:    s_waitcnt lgkmcnt(0)229; GFX9-NEXT:    s_load_dwordx8 s[0:7], s[10:11], 0x0230; GFX9-NEXT:    s_waitcnt lgkmcnt(0)231; GFX9-NEXT:    s_add_i32 s3, s3, s7232; GFX9-NEXT:    s_add_i32 s2, s2, s6233; GFX9-NEXT:    s_add_i32 s1, s1, s5234; GFX9-NEXT:    s_add_i32 s0, s0, s4235; GFX9-NEXT:    v_mov_b32_e32 v0, s0236; GFX9-NEXT:    v_mov_b32_e32 v1, s1237; GFX9-NEXT:    v_mov_b32_e32 v2, s2238; GFX9-NEXT:    v_mov_b32_e32 v3, s3239; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[8:9]240; GFX9-NEXT:    s_endpgm241;242; GFX10-LABEL: s_add_v4i32:243; GFX10:       ; %bb.0:244; GFX10-NEXT:    s_load_dwordx4 s[8:11], s[4:5], 0x24245; GFX10-NEXT:    v_mov_b32_e32 v4, 0246; GFX10-NEXT:    s_waitcnt lgkmcnt(0)247; GFX10-NEXT:    s_load_dwordx8 s[0:7], s[10:11], 0x0248; GFX10-NEXT:    s_waitcnt lgkmcnt(0)249; GFX10-NEXT:    s_add_i32 s3, s3, s7250; GFX10-NEXT:    s_add_i32 s2, s2, s6251; GFX10-NEXT:    s_add_i32 s0, s0, s4252; GFX10-NEXT:    s_add_i32 s1, s1, s5253; GFX10-NEXT:    v_mov_b32_e32 v0, s0254; GFX10-NEXT:    v_mov_b32_e32 v1, s1255; GFX10-NEXT:    v_mov_b32_e32 v2, s2256; GFX10-NEXT:    v_mov_b32_e32 v3, s3257; GFX10-NEXT:    global_store_dwordx4 v4, v[0:3], s[8:9]258; GFX10-NEXT:    s_endpgm259;260; GFX11-LABEL: s_add_v4i32:261; GFX11:       ; %bb.0:262; GFX11-NEXT:    s_load_b128 s[8:11], s[4:5], 0x24263; GFX11-NEXT:    s_waitcnt lgkmcnt(0)264; GFX11-NEXT:    s_load_b256 s[0:7], s[10:11], 0x0265; GFX11-NEXT:    s_waitcnt lgkmcnt(0)266; GFX11-NEXT:    s_add_i32 s3, s3, s7267; GFX11-NEXT:    s_add_i32 s2, s2, s6268; GFX11-NEXT:    s_add_i32 s0, s0, s4269; GFX11-NEXT:    s_add_i32 s1, s1, s5270; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)271; GFX11-NEXT:    v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v1, s1272; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v3, s3273; GFX11-NEXT:    v_mov_b32_e32 v2, s2274; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[8:9]275; GFX11-NEXT:    s_endpgm276;277; GFX12-LABEL: s_add_v4i32:278; GFX12:       ; %bb.0:279; GFX12-NEXT:    s_load_b128 s[8:11], s[4:5], 0x24280; GFX12-NEXT:    s_wait_kmcnt 0x0281; GFX12-NEXT:    s_load_b256 s[0:7], s[10:11], 0x0282; GFX12-NEXT:    s_wait_kmcnt 0x0283; GFX12-NEXT:    s_add_co_i32 s3, s3, s7284; GFX12-NEXT:    s_add_co_i32 s2, s2, s6285; GFX12-NEXT:    s_add_co_i32 s0, s0, s4286; GFX12-NEXT:    s_add_co_i32 s1, s1, s5287; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)288; GFX12-NEXT:    v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v1, s1289; GFX12-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v3, s3290; GFX12-NEXT:    v_mov_b32_e32 v2, s2291; GFX12-NEXT:    global_store_b128 v4, v[0:3], s[8:9]292; GFX12-NEXT:    s_endpgm293  %b_ptr = getelementptr <4 x i32>, ptr addrspace(1) %in, i32 1294  %a = load <4 x i32>, ptr addrspace(1) %in295  %b = load <4 x i32>, ptr addrspace(1) %b_ptr296  %result = add <4 x i32> %a, %b297  store <4 x i32> %result, ptr addrspace(1) %out298  ret void299}300 301define amdgpu_kernel void @s_add_v8i32(ptr addrspace(1) %out, <8 x i32> %a, <8 x i32> %b) {302; GFX6-LABEL: s_add_v8i32:303; GFX6:       ; %bb.0: ; %entry304; GFX6-NEXT:    s_load_dwordx16 s[8:23], s[4:5], 0x11305; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9306; GFX6-NEXT:    s_mov_b32 s3, 0xf000307; GFX6-NEXT:    s_mov_b32 s2, -1308; GFX6-NEXT:    s_waitcnt lgkmcnt(0)309; GFX6-NEXT:    s_add_i32 s4, s11, s19310; GFX6-NEXT:    s_add_i32 s5, s10, s18311; GFX6-NEXT:    s_add_i32 s6, s9, s17312; GFX6-NEXT:    s_add_i32 s7, s8, s16313; GFX6-NEXT:    s_add_i32 s8, s15, s23314; GFX6-NEXT:    s_add_i32 s9, s14, s22315; GFX6-NEXT:    s_add_i32 s10, s13, s21316; GFX6-NEXT:    s_add_i32 s11, s12, s20317; GFX6-NEXT:    v_mov_b32_e32 v0, s11318; GFX6-NEXT:    v_mov_b32_e32 v1, s10319; GFX6-NEXT:    v_mov_b32_e32 v2, s9320; GFX6-NEXT:    v_mov_b32_e32 v3, s8321; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16322; GFX6-NEXT:    s_waitcnt expcnt(0)323; GFX6-NEXT:    v_mov_b32_e32 v0, s7324; GFX6-NEXT:    v_mov_b32_e32 v1, s6325; GFX6-NEXT:    v_mov_b32_e32 v2, s5326; GFX6-NEXT:    v_mov_b32_e32 v3, s4327; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0328; GFX6-NEXT:    s_endpgm329;330; GFX8-LABEL: s_add_v8i32:331; GFX8:       ; %bb.0: ; %entry332; GFX8-NEXT:    s_load_dwordx16 s[8:23], s[4:5], 0x44333; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24334; GFX8-NEXT:    s_waitcnt lgkmcnt(0)335; GFX8-NEXT:    s_add_i32 s4, s11, s19336; GFX8-NEXT:    s_add_i32 s5, s10, s18337; GFX8-NEXT:    s_add_i32 s6, s9, s17338; GFX8-NEXT:    s_add_i32 s7, s8, s16339; GFX8-NEXT:    s_add_i32 s2, s15, s23340; GFX8-NEXT:    s_add_i32 s3, s14, s22341; GFX8-NEXT:    s_add_i32 s8, s13, s21342; GFX8-NEXT:    s_add_i32 s9, s12, s20343; GFX8-NEXT:    v_mov_b32_e32 v3, s2344; GFX8-NEXT:    s_add_u32 s2, s0, 16345; GFX8-NEXT:    v_mov_b32_e32 v2, s3346; GFX8-NEXT:    s_addc_u32 s3, s1, 0347; GFX8-NEXT:    v_mov_b32_e32 v5, s3348; GFX8-NEXT:    v_mov_b32_e32 v0, s9349; GFX8-NEXT:    v_mov_b32_e32 v1, s8350; GFX8-NEXT:    v_mov_b32_e32 v4, s2351; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]352; GFX8-NEXT:    v_mov_b32_e32 v5, s1353; GFX8-NEXT:    v_mov_b32_e32 v0, s7354; GFX8-NEXT:    v_mov_b32_e32 v1, s6355; GFX8-NEXT:    v_mov_b32_e32 v2, s5356; GFX8-NEXT:    v_mov_b32_e32 v3, s4357; GFX8-NEXT:    v_mov_b32_e32 v4, s0358; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]359; GFX8-NEXT:    s_endpgm360;361; GFX9-LABEL: s_add_v8i32:362; GFX9:       ; %bb.0: ; %entry363; GFX9-NEXT:    s_load_dwordx16 s[8:23], s[4:5], 0x44364; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24365; GFX9-NEXT:    v_mov_b32_e32 v4, 0366; GFX9-NEXT:    s_waitcnt lgkmcnt(0)367; GFX9-NEXT:    s_add_i32 s4, s9, s17368; GFX9-NEXT:    s_add_i32 s5, s8, s16369; GFX9-NEXT:    s_add_i32 s6, s15, s23370; GFX9-NEXT:    s_add_i32 s7, s14, s22371; GFX9-NEXT:    s_add_i32 s8, s13, s21372; GFX9-NEXT:    s_add_i32 s9, s12, s20373; GFX9-NEXT:    s_add_i32 s2, s11, s19374; GFX9-NEXT:    s_add_i32 s3, s10, s18375; GFX9-NEXT:    v_mov_b32_e32 v0, s9376; GFX9-NEXT:    v_mov_b32_e32 v1, s8377; GFX9-NEXT:    v_mov_b32_e32 v2, s7378; GFX9-NEXT:    v_mov_b32_e32 v3, s6379; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] offset:16380; GFX9-NEXT:    s_nop 0381; GFX9-NEXT:    v_mov_b32_e32 v0, s5382; GFX9-NEXT:    v_mov_b32_e32 v1, s4383; GFX9-NEXT:    v_mov_b32_e32 v2, s3384; GFX9-NEXT:    v_mov_b32_e32 v3, s2385; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1]386; GFX9-NEXT:    s_endpgm387;388; GFX10-LABEL: s_add_v8i32:389; GFX10:       ; %bb.0: ; %entry390; GFX10-NEXT:    s_clause 0x1391; GFX10-NEXT:    s_load_dwordx16 s[8:23], s[4:5], 0x44392; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24393; GFX10-NEXT:    v_mov_b32_e32 v8, 0394; GFX10-NEXT:    s_waitcnt lgkmcnt(0)395; GFX10-NEXT:    s_add_i32 s4, s9, s17396; GFX10-NEXT:    s_add_i32 s5, s8, s16397; GFX10-NEXT:    s_add_i32 s6, s15, s23398; GFX10-NEXT:    s_add_i32 s7, s14, s22399; GFX10-NEXT:    s_add_i32 s8, s12, s20400; GFX10-NEXT:    s_add_i32 s9, s13, s21401; GFX10-NEXT:    s_add_i32 s2, s11, s19402; GFX10-NEXT:    s_add_i32 s3, s10, s18403; GFX10-NEXT:    v_mov_b32_e32 v0, s8404; GFX10-NEXT:    v_mov_b32_e32 v1, s9405; GFX10-NEXT:    v_mov_b32_e32 v2, s7406; GFX10-NEXT:    v_mov_b32_e32 v3, s6407; GFX10-NEXT:    v_mov_b32_e32 v4, s5408; GFX10-NEXT:    v_mov_b32_e32 v5, s4409; GFX10-NEXT:    v_mov_b32_e32 v6, s3410; GFX10-NEXT:    v_mov_b32_e32 v7, s2411; GFX10-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] offset:16412; GFX10-NEXT:    global_store_dwordx4 v8, v[4:7], s[0:1]413; GFX10-NEXT:    s_endpgm414;415; GFX11-LABEL: s_add_v8i32:416; GFX11:       ; %bb.0: ; %entry417; GFX11-NEXT:    s_clause 0x1418; GFX11-NEXT:    s_load_b512 s[8:23], s[4:5], 0x44419; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24420; GFX11-NEXT:    s_waitcnt lgkmcnt(0)421; GFX11-NEXT:    s_add_i32 s4, s9, s17422; GFX11-NEXT:    s_add_i32 s5, s8, s16423; GFX11-NEXT:    s_add_i32 s6, s15, s23424; GFX11-NEXT:    s_add_i32 s7, s14, s22425; GFX11-NEXT:    s_add_i32 s8, s12, s20426; GFX11-NEXT:    s_add_i32 s9, s13, s21427; GFX11-NEXT:    s_add_i32 s2, s11, s19428; GFX11-NEXT:    s_add_i32 s3, s10, s18429; GFX11-NEXT:    v_dual_mov_b32 v8, 0 :: v_dual_mov_b32 v1, s9430; GFX11-NEXT:    v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v3, s6431; GFX11-NEXT:    v_dual_mov_b32 v2, s7 :: v_dual_mov_b32 v5, s4432; GFX11-NEXT:    v_dual_mov_b32 v4, s5 :: v_dual_mov_b32 v7, s2433; GFX11-NEXT:    v_mov_b32_e32 v6, s3434; GFX11-NEXT:    s_clause 0x1435; GFX11-NEXT:    global_store_b128 v8, v[0:3], s[0:1] offset:16436; GFX11-NEXT:    global_store_b128 v8, v[4:7], s[0:1]437; GFX11-NEXT:    s_endpgm438;439; GFX12-LABEL: s_add_v8i32:440; GFX12:       ; %bb.0: ; %entry441; GFX12-NEXT:    s_clause 0x1442; GFX12-NEXT:    s_load_b512 s[8:23], s[4:5], 0x44443; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24444; GFX12-NEXT:    s_wait_kmcnt 0x0445; GFX12-NEXT:    s_add_co_i32 s4, s9, s17446; GFX12-NEXT:    s_add_co_i32 s5, s8, s16447; GFX12-NEXT:    s_add_co_i32 s6, s15, s23448; GFX12-NEXT:    s_add_co_i32 s7, s14, s22449; GFX12-NEXT:    s_add_co_i32 s8, s12, s20450; GFX12-NEXT:    s_add_co_i32 s9, s13, s21451; GFX12-NEXT:    s_add_co_i32 s2, s11, s19452; GFX12-NEXT:    s_add_co_i32 s3, s10, s18453; GFX12-NEXT:    v_dual_mov_b32 v8, 0 :: v_dual_mov_b32 v1, s9454; GFX12-NEXT:    v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v3, s6455; GFX12-NEXT:    v_dual_mov_b32 v2, s7 :: v_dual_mov_b32 v5, s4456; GFX12-NEXT:    v_dual_mov_b32 v4, s5 :: v_dual_mov_b32 v7, s2457; GFX12-NEXT:    v_mov_b32_e32 v6, s3458; GFX12-NEXT:    s_clause 0x1459; GFX12-NEXT:    global_store_b128 v8, v[0:3], s[0:1] offset:16460; GFX12-NEXT:    global_store_b128 v8, v[4:7], s[0:1]461; GFX12-NEXT:    s_endpgm462entry:463  %0 = add <8 x i32> %a, %b464  store <8 x i32> %0, ptr addrspace(1) %out465  ret void466}467 468define amdgpu_kernel void @s_add_v16i32(ptr addrspace(1) %out, <16 x i32> %a, <16 x i32> %b) {469; GFX6-LABEL: s_add_v16i32:470; GFX6:       ; %bb.0: ; %entry471; GFX6-NEXT:    s_load_dwordx16 s[8:23], s[4:5], 0x19472; GFX6-NEXT:    s_load_dwordx16 s[36:51], s[4:5], 0x29473; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9474; GFX6-NEXT:    s_mov_b32 s3, 0xf000475; GFX6-NEXT:    s_mov_b32 s2, -1476; GFX6-NEXT:    s_waitcnt lgkmcnt(0)477; GFX6-NEXT:    s_add_i32 s6, s11, s39478; GFX6-NEXT:    s_add_i32 s7, s10, s38479; GFX6-NEXT:    s_add_i32 s10, s15, s43480; GFX6-NEXT:    s_add_i32 s11, s14, s42481; GFX6-NEXT:    s_add_i32 s14, s19, s47482; GFX6-NEXT:    s_add_i32 s15, s18, s46483; GFX6-NEXT:    s_add_i32 s18, s23, s51484; GFX6-NEXT:    s_add_i32 s19, s22, s50485; GFX6-NEXT:    s_add_i32 s21, s21, s49486; GFX6-NEXT:    s_add_i32 s20, s20, s48487; GFX6-NEXT:    s_add_i32 s17, s17, s45488; GFX6-NEXT:    s_add_i32 s16, s16, s44489; GFX6-NEXT:    v_mov_b32_e32 v0, s20490; GFX6-NEXT:    v_mov_b32_e32 v1, s21491; GFX6-NEXT:    v_mov_b32_e32 v2, s19492; GFX6-NEXT:    v_mov_b32_e32 v3, s18493; GFX6-NEXT:    s_add_i32 s13, s13, s41494; GFX6-NEXT:    s_add_i32 s12, s12, s40495; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48496; GFX6-NEXT:    s_waitcnt expcnt(0)497; GFX6-NEXT:    v_mov_b32_e32 v0, s16498; GFX6-NEXT:    v_mov_b32_e32 v1, s17499; GFX6-NEXT:    v_mov_b32_e32 v2, s15500; GFX6-NEXT:    v_mov_b32_e32 v3, s14501; GFX6-NEXT:    s_add_i32 s9, s9, s37502; GFX6-NEXT:    s_add_i32 s8, s8, s36503; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32504; GFX6-NEXT:    s_waitcnt expcnt(0)505; GFX6-NEXT:    v_mov_b32_e32 v0, s12506; GFX6-NEXT:    v_mov_b32_e32 v1, s13507; GFX6-NEXT:    v_mov_b32_e32 v2, s11508; GFX6-NEXT:    v_mov_b32_e32 v3, s10509; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16510; GFX6-NEXT:    s_waitcnt expcnt(0)511; GFX6-NEXT:    v_mov_b32_e32 v0, s8512; GFX6-NEXT:    v_mov_b32_e32 v1, s9513; GFX6-NEXT:    v_mov_b32_e32 v2, s7514; GFX6-NEXT:    v_mov_b32_e32 v3, s6515; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0516; GFX6-NEXT:    s_endpgm517;518; GFX8-LABEL: s_add_v16i32:519; GFX8:       ; %bb.0: ; %entry520; GFX8-NEXT:    s_load_dwordx16 s[8:23], s[4:5], 0x64521; GFX8-NEXT:    s_load_dwordx16 s[36:51], s[4:5], 0xa4522; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24523; GFX8-NEXT:    s_waitcnt lgkmcnt(0)524; GFX8-NEXT:    s_add_i32 s4, s11, s39525; GFX8-NEXT:    s_add_i32 s5, s10, s38526; GFX8-NEXT:    s_add_i32 s6, s9, s37527; GFX8-NEXT:    s_add_i32 s7, s8, s36528; GFX8-NEXT:    s_add_i32 s8, s15, s43529; GFX8-NEXT:    s_add_i32 s9, s14, s42530; GFX8-NEXT:    s_add_i32 s10, s13, s41531; GFX8-NEXT:    s_add_i32 s11, s12, s40532; GFX8-NEXT:    s_add_i32 s12, s19, s47533; GFX8-NEXT:    s_add_i32 s13, s18, s46534; GFX8-NEXT:    s_add_i32 s14, s17, s45535; GFX8-NEXT:    s_add_i32 s15, s16, s44536; GFX8-NEXT:    s_add_i32 s2, s23, s51537; GFX8-NEXT:    s_add_i32 s3, s22, s50538; GFX8-NEXT:    s_add_i32 s16, s21, s49539; GFX8-NEXT:    s_add_i32 s17, s20, s48540; GFX8-NEXT:    v_mov_b32_e32 v3, s2541; GFX8-NEXT:    s_add_u32 s2, s0, 48542; GFX8-NEXT:    v_mov_b32_e32 v2, s3543; GFX8-NEXT:    s_addc_u32 s3, s1, 0544; GFX8-NEXT:    v_mov_b32_e32 v5, s3545; GFX8-NEXT:    v_mov_b32_e32 v4, s2546; GFX8-NEXT:    s_add_u32 s2, s0, 32547; GFX8-NEXT:    v_mov_b32_e32 v0, s17548; GFX8-NEXT:    v_mov_b32_e32 v1, s16549; GFX8-NEXT:    s_addc_u32 s3, s1, 0550; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]551; GFX8-NEXT:    v_mov_b32_e32 v5, s3552; GFX8-NEXT:    v_mov_b32_e32 v4, s2553; GFX8-NEXT:    s_add_u32 s2, s0, 16554; GFX8-NEXT:    v_mov_b32_e32 v0, s15555; GFX8-NEXT:    v_mov_b32_e32 v1, s14556; GFX8-NEXT:    v_mov_b32_e32 v2, s13557; GFX8-NEXT:    v_mov_b32_e32 v3, s12558; GFX8-NEXT:    s_addc_u32 s3, s1, 0559; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]560; GFX8-NEXT:    v_mov_b32_e32 v5, s3561; GFX8-NEXT:    v_mov_b32_e32 v0, s11562; GFX8-NEXT:    v_mov_b32_e32 v1, s10563; GFX8-NEXT:    v_mov_b32_e32 v2, s9564; GFX8-NEXT:    v_mov_b32_e32 v3, s8565; GFX8-NEXT:    v_mov_b32_e32 v4, s2566; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]567; GFX8-NEXT:    v_mov_b32_e32 v5, s1568; GFX8-NEXT:    v_mov_b32_e32 v0, s7569; GFX8-NEXT:    v_mov_b32_e32 v1, s6570; GFX8-NEXT:    v_mov_b32_e32 v2, s5571; GFX8-NEXT:    v_mov_b32_e32 v3, s4572; GFX8-NEXT:    v_mov_b32_e32 v4, s0573; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]574; GFX8-NEXT:    s_endpgm575;576; GFX9-LABEL: s_add_v16i32:577; GFX9:       ; %bb.0: ; %entry578; GFX9-NEXT:    s_load_dwordx16 s[8:23], s[4:5], 0x64579; GFX9-NEXT:    s_load_dwordx16 s[36:51], s[4:5], 0xa4580; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24581; GFX9-NEXT:    v_mov_b32_e32 v4, 0582; GFX9-NEXT:    s_waitcnt lgkmcnt(0)583; GFX9-NEXT:    s_add_i32 s4, s9, s37584; GFX9-NEXT:    s_add_i32 s5, s8, s36585; GFX9-NEXT:    s_add_i32 s6, s15, s43586; GFX9-NEXT:    s_add_i32 s7, s14, s42587; GFX9-NEXT:    s_add_i32 s8, s13, s41588; GFX9-NEXT:    s_add_i32 s9, s12, s40589; GFX9-NEXT:    s_add_i32 s12, s17, s45590; GFX9-NEXT:    s_add_i32 s13, s16, s44591; GFX9-NEXT:    s_add_i32 s14, s23, s51592; GFX9-NEXT:    s_add_i32 s15, s22, s50593; GFX9-NEXT:    s_add_i32 s16, s21, s49594; GFX9-NEXT:    s_add_i32 s17, s20, s48595; GFX9-NEXT:    s_add_i32 s2, s11, s39596; GFX9-NEXT:    s_add_i32 s3, s10, s38597; GFX9-NEXT:    s_add_i32 s10, s19, s47598; GFX9-NEXT:    s_add_i32 s11, s18, s46599; GFX9-NEXT:    v_mov_b32_e32 v0, s17600; GFX9-NEXT:    v_mov_b32_e32 v1, s16601; GFX9-NEXT:    v_mov_b32_e32 v2, s15602; GFX9-NEXT:    v_mov_b32_e32 v3, s14603; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] offset:48604; GFX9-NEXT:    s_nop 0605; GFX9-NEXT:    v_mov_b32_e32 v0, s13606; GFX9-NEXT:    v_mov_b32_e32 v1, s12607; GFX9-NEXT:    v_mov_b32_e32 v2, s11608; GFX9-NEXT:    v_mov_b32_e32 v3, s10609; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] offset:32610; GFX9-NEXT:    s_nop 0611; GFX9-NEXT:    v_mov_b32_e32 v0, s9612; GFX9-NEXT:    v_mov_b32_e32 v1, s8613; GFX9-NEXT:    v_mov_b32_e32 v2, s7614; GFX9-NEXT:    v_mov_b32_e32 v3, s6615; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] offset:16616; GFX9-NEXT:    s_nop 0617; GFX9-NEXT:    v_mov_b32_e32 v0, s5618; GFX9-NEXT:    v_mov_b32_e32 v1, s4619; GFX9-NEXT:    v_mov_b32_e32 v2, s3620; GFX9-NEXT:    v_mov_b32_e32 v3, s2621; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1]622; GFX9-NEXT:    s_endpgm623;624; GFX10-LABEL: s_add_v16i32:625; GFX10:       ; %bb.0: ; %entry626; GFX10-NEXT:    s_clause 0x2627; GFX10-NEXT:    s_load_dwordx16 s[8:23], s[4:5], 0x64628; GFX10-NEXT:    s_load_dwordx16 s[36:51], s[4:5], 0xa4629; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24630; GFX10-NEXT:    v_mov_b32_e32 v16, 0631; GFX10-NEXT:    s_waitcnt lgkmcnt(0)632; GFX10-NEXT:    s_add_i32 s4, s9, s37633; GFX10-NEXT:    s_add_i32 s5, s8, s36634; GFX10-NEXT:    s_add_i32 s6, s15, s43635; GFX10-NEXT:    s_add_i32 s7, s14, s42636; GFX10-NEXT:    s_add_i32 s8, s13, s41637; GFX10-NEXT:    s_add_i32 s9, s12, s40638; GFX10-NEXT:    s_add_i32 s12, s17, s45639; GFX10-NEXT:    s_add_i32 s13, s16, s44640; GFX10-NEXT:    s_add_i32 s14, s23, s51641; GFX10-NEXT:    s_add_i32 s15, s22, s50642; GFX10-NEXT:    s_add_i32 s16, s20, s48643; GFX10-NEXT:    s_add_i32 s17, s21, s49644; GFX10-NEXT:    s_add_i32 s2, s11, s39645; GFX10-NEXT:    s_add_i32 s3, s10, s38646; GFX10-NEXT:    s_add_i32 s10, s19, s47647; GFX10-NEXT:    s_add_i32 s11, s18, s46648; GFX10-NEXT:    v_mov_b32_e32 v0, s16649; GFX10-NEXT:    v_mov_b32_e32 v1, s17650; GFX10-NEXT:    v_mov_b32_e32 v2, s15651; GFX10-NEXT:    v_mov_b32_e32 v3, s14652; GFX10-NEXT:    v_mov_b32_e32 v4, s13653; GFX10-NEXT:    v_mov_b32_e32 v5, s12654; GFX10-NEXT:    v_mov_b32_e32 v6, s11655; GFX10-NEXT:    v_mov_b32_e32 v7, s10656; GFX10-NEXT:    v_mov_b32_e32 v8, s9657; GFX10-NEXT:    v_mov_b32_e32 v9, s8658; GFX10-NEXT:    v_mov_b32_e32 v10, s7659; GFX10-NEXT:    v_mov_b32_e32 v11, s6660; GFX10-NEXT:    v_mov_b32_e32 v12, s5661; GFX10-NEXT:    v_mov_b32_e32 v13, s4662; GFX10-NEXT:    v_mov_b32_e32 v14, s3663; GFX10-NEXT:    v_mov_b32_e32 v15, s2664; GFX10-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1] offset:48665; GFX10-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:32666; GFX10-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:16667; GFX10-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1]668; GFX10-NEXT:    s_endpgm669;670; GFX11-LABEL: s_add_v16i32:671; GFX11:       ; %bb.0: ; %entry672; GFX11-NEXT:    s_clause 0x2673; GFX11-NEXT:    s_load_b512 s[8:23], s[4:5], 0x64674; GFX11-NEXT:    s_load_b512 s[36:51], s[4:5], 0xa4675; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24676; GFX11-NEXT:    s_waitcnt lgkmcnt(0)677; GFX11-NEXT:    s_add_i32 s4, s9, s37678; GFX11-NEXT:    s_add_i32 s5, s8, s36679; GFX11-NEXT:    s_add_i32 s6, s15, s43680; GFX11-NEXT:    s_add_i32 s7, s14, s42681; GFX11-NEXT:    s_add_i32 s8, s13, s41682; GFX11-NEXT:    s_add_i32 s9, s12, s40683; GFX11-NEXT:    s_add_i32 s12, s17, s45684; GFX11-NEXT:    s_add_i32 s13, s16, s44685; GFX11-NEXT:    s_add_i32 s14, s23, s51686; GFX11-NEXT:    s_add_i32 s15, s22, s50687; GFX11-NEXT:    s_add_i32 s16, s20, s48688; GFX11-NEXT:    s_add_i32 s17, s21, s49689; GFX11-NEXT:    s_add_i32 s2, s11, s39690; GFX11-NEXT:    s_add_i32 s3, s10, s38691; GFX11-NEXT:    s_add_i32 s10, s19, s47692; GFX11-NEXT:    s_add_i32 s11, s18, s46693; GFX11-NEXT:    v_dual_mov_b32 v16, 0 :: v_dual_mov_b32 v1, s17694; GFX11-NEXT:    v_dual_mov_b32 v0, s16 :: v_dual_mov_b32 v3, s14695; GFX11-NEXT:    v_dual_mov_b32 v2, s15 :: v_dual_mov_b32 v5, s12696; GFX11-NEXT:    v_dual_mov_b32 v4, s13 :: v_dual_mov_b32 v7, s10697; GFX11-NEXT:    v_dual_mov_b32 v6, s11 :: v_dual_mov_b32 v9, s8698; GFX11-NEXT:    v_dual_mov_b32 v8, s9 :: v_dual_mov_b32 v11, s6699; GFX11-NEXT:    v_dual_mov_b32 v10, s7 :: v_dual_mov_b32 v13, s4700; GFX11-NEXT:    v_dual_mov_b32 v12, s5 :: v_dual_mov_b32 v15, s2701; GFX11-NEXT:    v_mov_b32_e32 v14, s3702; GFX11-NEXT:    s_clause 0x3703; GFX11-NEXT:    global_store_b128 v16, v[0:3], s[0:1] offset:48704; GFX11-NEXT:    global_store_b128 v16, v[4:7], s[0:1] offset:32705; GFX11-NEXT:    global_store_b128 v16, v[8:11], s[0:1] offset:16706; GFX11-NEXT:    global_store_b128 v16, v[12:15], s[0:1]707; GFX11-NEXT:    s_endpgm708;709; GFX12-LABEL: s_add_v16i32:710; GFX12:       ; %bb.0: ; %entry711; GFX12-NEXT:    s_clause 0x2712; GFX12-NEXT:    s_load_b512 s[8:23], s[4:5], 0x64713; GFX12-NEXT:    s_load_b512 s[36:51], s[4:5], 0xa4714; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24715; GFX12-NEXT:    s_wait_kmcnt 0x0716; GFX12-NEXT:    s_add_co_i32 s4, s9, s37717; GFX12-NEXT:    s_add_co_i32 s5, s8, s36718; GFX12-NEXT:    s_add_co_i32 s6, s15, s43719; GFX12-NEXT:    s_add_co_i32 s7, s14, s42720; GFX12-NEXT:    s_add_co_i32 s8, s13, s41721; GFX12-NEXT:    s_add_co_i32 s9, s12, s40722; GFX12-NEXT:    s_add_co_i32 s12, s17, s45723; GFX12-NEXT:    s_add_co_i32 s13, s16, s44724; GFX12-NEXT:    s_add_co_i32 s14, s23, s51725; GFX12-NEXT:    s_add_co_i32 s15, s22, s50726; GFX12-NEXT:    s_add_co_i32 s16, s20, s48727; GFX12-NEXT:    s_add_co_i32 s17, s21, s49728; GFX12-NEXT:    s_add_co_i32 s2, s11, s39729; GFX12-NEXT:    s_add_co_i32 s3, s10, s38730; GFX12-NEXT:    s_add_co_i32 s10, s19, s47731; GFX12-NEXT:    s_add_co_i32 s11, s18, s46732; GFX12-NEXT:    v_dual_mov_b32 v16, 0 :: v_dual_mov_b32 v1, s17733; GFX12-NEXT:    v_dual_mov_b32 v0, s16 :: v_dual_mov_b32 v3, s14734; GFX12-NEXT:    v_dual_mov_b32 v2, s15 :: v_dual_mov_b32 v5, s12735; GFX12-NEXT:    v_dual_mov_b32 v4, s13 :: v_dual_mov_b32 v7, s10736; GFX12-NEXT:    v_dual_mov_b32 v6, s11 :: v_dual_mov_b32 v9, s8737; GFX12-NEXT:    v_dual_mov_b32 v8, s9 :: v_dual_mov_b32 v11, s6738; GFX12-NEXT:    v_dual_mov_b32 v10, s7 :: v_dual_mov_b32 v13, s4739; GFX12-NEXT:    v_dual_mov_b32 v12, s5 :: v_dual_mov_b32 v15, s2740; GFX12-NEXT:    v_mov_b32_e32 v14, s3741; GFX12-NEXT:    s_clause 0x3742; GFX12-NEXT:    global_store_b128 v16, v[0:3], s[0:1] offset:48743; GFX12-NEXT:    global_store_b128 v16, v[4:7], s[0:1] offset:32744; GFX12-NEXT:    global_store_b128 v16, v[8:11], s[0:1] offset:16745; GFX12-NEXT:    global_store_b128 v16, v[12:15], s[0:1]746; GFX12-NEXT:    s_endpgm747entry:748  %0 = add <16 x i32> %a, %b749  store <16 x i32> %0, ptr addrspace(1) %out750  ret void751}752 753define amdgpu_kernel void @v_add_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {754; GFX6-LABEL: v_add_i32:755; GFX6:       ; %bb.0:756; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9757; GFX6-NEXT:    s_mov_b32 s7, 0xf000758; GFX6-NEXT:    s_mov_b32 s10, 0759; GFX6-NEXT:    s_mov_b32 s11, s7760; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0761; GFX6-NEXT:    s_waitcnt lgkmcnt(0)762; GFX6-NEXT:    s_mov_b64 s[8:9], s[2:3]763; GFX6-NEXT:    v_mov_b32_e32 v1, 0764; GFX6-NEXT:    buffer_load_dword v2, v[0:1], s[8:11], 0 addr64 glc765; GFX6-NEXT:    s_waitcnt vmcnt(0)766; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[8:11], 0 addr64 offset:4 glc767; GFX6-NEXT:    s_waitcnt vmcnt(0)768; GFX6-NEXT:    s_mov_b32 s6, -1769; GFX6-NEXT:    s_mov_b32 s4, s0770; GFX6-NEXT:    s_mov_b32 s5, s1771; GFX6-NEXT:    v_add_i32_e32 v0, vcc, v2, v0772; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0773; GFX6-NEXT:    s_endpgm774;775; GFX8-LABEL: v_add_i32:776; GFX8:       ; %bb.0:777; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24778; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 2, v0779; GFX8-NEXT:    s_waitcnt lgkmcnt(0)780; GFX8-NEXT:    v_mov_b32_e32 v1, s3781; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v0782; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc783; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v0784; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc785; GFX8-NEXT:    flat_load_dword v4, v[0:1] glc786; GFX8-NEXT:    s_waitcnt vmcnt(0)787; GFX8-NEXT:    flat_load_dword v2, v[2:3] glc788; GFX8-NEXT:    s_waitcnt vmcnt(0)789; GFX8-NEXT:    v_mov_b32_e32 v0, s0790; GFX8-NEXT:    v_mov_b32_e32 v1, s1791; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v4, v2792; GFX8-NEXT:    flat_store_dword v[0:1], v2793; GFX8-NEXT:    s_endpgm794;795; GFX9-LABEL: v_add_i32:796; GFX9:       ; %bb.0:797; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24798; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0799; GFX9-NEXT:    s_waitcnt lgkmcnt(0)800; GFX9-NEXT:    global_load_dword v1, v0, s[2:3] glc801; GFX9-NEXT:    s_waitcnt vmcnt(0)802; GFX9-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc803; GFX9-NEXT:    s_waitcnt vmcnt(0)804; GFX9-NEXT:    v_mov_b32_e32 v0, 0805; GFX9-NEXT:    v_add_u32_e32 v1, v1, v2806; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]807; GFX9-NEXT:    s_endpgm808;809; GFX10-LABEL: v_add_i32:810; GFX10:       ; %bb.0:811; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24812; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0813; GFX10-NEXT:    s_waitcnt lgkmcnt(0)814; GFX10-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc815; GFX10-NEXT:    s_waitcnt vmcnt(0)816; GFX10-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc817; GFX10-NEXT:    s_waitcnt vmcnt(0)818; GFX10-NEXT:    v_mov_b32_e32 v0, 0819; GFX10-NEXT:    v_add_nc_u32_e32 v1, v1, v2820; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]821; GFX10-NEXT:    s_endpgm822;823; GFX11-LABEL: v_add_i32:824; GFX11:       ; %bb.0:825; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24826; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0827; GFX11-NEXT:    v_mov_b32_e32 v2, 0828; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)829; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0830; GFX11-NEXT:    s_waitcnt lgkmcnt(0)831; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3] glc dlc832; GFX11-NEXT:    s_waitcnt vmcnt(0)833; GFX11-NEXT:    global_load_b32 v0, v0, s[2:3] offset:4 glc dlc834; GFX11-NEXT:    s_waitcnt vmcnt(0)835; GFX11-NEXT:    v_add_nc_u32_e32 v0, v1, v0836; GFX11-NEXT:    global_store_b32 v2, v0, s[0:1]837; GFX11-NEXT:    s_endpgm838;839; GFX12-LABEL: v_add_i32:840; GFX12:       ; %bb.0:841; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24842; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0843; GFX12-NEXT:    v_mov_b32_e32 v2, 0844; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)845; GFX12-NEXT:    v_lshlrev_b32_e32 v0, 2, v0846; GFX12-NEXT:    s_wait_kmcnt 0x0847; GFX12-NEXT:    global_load_b32 v1, v0, s[2:3] scope:SCOPE_SYS848; GFX12-NEXT:    s_wait_loadcnt 0x0849; GFX12-NEXT:    global_load_b32 v0, v0, s[2:3] offset:4 scope:SCOPE_SYS850; GFX12-NEXT:    s_wait_loadcnt 0x0851; GFX12-NEXT:    v_add_nc_u32_e32 v0, v1, v0852; GFX12-NEXT:    global_store_b32 v2, v0, s[0:1]853; GFX12-NEXT:    s_endpgm854  %tid = call i32 @llvm.amdgcn.workitem.id.x()855  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i32 %tid856  %b_ptr = getelementptr i32, ptr addrspace(1) %gep, i32 1857  %a = load volatile i32, ptr addrspace(1) %gep858  %b = load volatile i32, ptr addrspace(1) %b_ptr859  %result = add i32 %a, %b860  store i32 %result, ptr addrspace(1) %out861  ret void862}863 864define amdgpu_kernel void @v_add_imm_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {865; GFX6-LABEL: v_add_imm_i32:866; GFX6:       ; %bb.0:867; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9868; GFX6-NEXT:    s_mov_b32 s7, 0xf000869; GFX6-NEXT:    s_mov_b32 s10, 0870; GFX6-NEXT:    s_mov_b32 s11, s7871; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0872; GFX6-NEXT:    s_waitcnt lgkmcnt(0)873; GFX6-NEXT:    s_mov_b64 s[8:9], s[2:3]874; GFX6-NEXT:    v_mov_b32_e32 v1, 0875; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[8:11], 0 addr64 glc876; GFX6-NEXT:    s_waitcnt vmcnt(0)877; GFX6-NEXT:    s_mov_b32 s6, -1878; GFX6-NEXT:    s_mov_b32 s4, s0879; GFX6-NEXT:    s_mov_b32 s5, s1880; GFX6-NEXT:    v_add_i32_e32 v0, vcc, 0x7b, v0881; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0882; GFX6-NEXT:    s_endpgm883;884; GFX8-LABEL: v_add_imm_i32:885; GFX8:       ; %bb.0:886; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24887; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 2, v0888; GFX8-NEXT:    s_waitcnt lgkmcnt(0)889; GFX8-NEXT:    v_mov_b32_e32 v1, s3890; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v0891; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc892; GFX8-NEXT:    flat_load_dword v2, v[0:1] glc893; GFX8-NEXT:    s_waitcnt vmcnt(0)894; GFX8-NEXT:    v_mov_b32_e32 v0, s0895; GFX8-NEXT:    v_mov_b32_e32 v1, s1896; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7b, v2897; GFX8-NEXT:    flat_store_dword v[0:1], v2898; GFX8-NEXT:    s_endpgm899;900; GFX9-LABEL: v_add_imm_i32:901; GFX9:       ; %bb.0:902; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24903; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0904; GFX9-NEXT:    v_mov_b32_e32 v1, 0905; GFX9-NEXT:    s_waitcnt lgkmcnt(0)906; GFX9-NEXT:    global_load_dword v0, v0, s[2:3] glc907; GFX9-NEXT:    s_waitcnt vmcnt(0)908; GFX9-NEXT:    v_add_u32_e32 v0, 0x7b, v0909; GFX9-NEXT:    global_store_dword v1, v0, s[0:1]910; GFX9-NEXT:    s_endpgm911;912; GFX10-LABEL: v_add_imm_i32:913; GFX10:       ; %bb.0:914; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24915; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0916; GFX10-NEXT:    v_mov_b32_e32 v1, 0917; GFX10-NEXT:    s_waitcnt lgkmcnt(0)918; GFX10-NEXT:    global_load_dword v0, v0, s[2:3] glc dlc919; GFX10-NEXT:    s_waitcnt vmcnt(0)920; GFX10-NEXT:    v_add_nc_u32_e32 v0, 0x7b, v0921; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]922; GFX10-NEXT:    s_endpgm923;924; GFX11-LABEL: v_add_imm_i32:925; GFX11:       ; %bb.0:926; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24927; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0928; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)929; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0930; GFX11-NEXT:    s_waitcnt lgkmcnt(0)931; GFX11-NEXT:    global_load_b32 v0, v0, s[2:3] glc dlc932; GFX11-NEXT:    s_waitcnt vmcnt(0)933; GFX11-NEXT:    v_add_nc_u32_e32 v0, 0x7b, v0934; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]935; GFX11-NEXT:    s_endpgm936;937; GFX12-LABEL: v_add_imm_i32:938; GFX12:       ; %bb.0:939; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24940; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0941; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)942; GFX12-NEXT:    v_lshlrev_b32_e32 v0, 2, v0943; GFX12-NEXT:    s_wait_kmcnt 0x0944; GFX12-NEXT:    global_load_b32 v0, v0, s[2:3] scope:SCOPE_SYS945; GFX12-NEXT:    s_wait_loadcnt 0x0946; GFX12-NEXT:    v_add_nc_u32_e32 v0, 0x7b, v0947; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]948; GFX12-NEXT:    s_endpgm949  %tid = call i32 @llvm.amdgcn.workitem.id.x()950  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i32 %tid951  %b_ptr = getelementptr i32, ptr addrspace(1) %gep, i32 1952  %a = load volatile i32, ptr addrspace(1) %gep953  %result = add i32 %a, 123954  store i32 %result, ptr addrspace(1) %out955  ret void956}957 958define amdgpu_kernel void @add64(ptr addrspace(1) %out, i64 %a, i64 %b) {959; GFX6-LABEL: add64:960; GFX6:       ; %bb.0: ; %entry961; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9962; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd963; GFX6-NEXT:    s_mov_b32 s7, 0xf000964; GFX6-NEXT:    s_mov_b32 s6, -1965; GFX6-NEXT:    s_waitcnt lgkmcnt(0)966; GFX6-NEXT:    s_mov_b32 s4, s0967; GFX6-NEXT:    s_add_u32 s0, s2, s8968; GFX6-NEXT:    s_mov_b32 s5, s1969; GFX6-NEXT:    s_addc_u32 s1, s3, s9970; GFX6-NEXT:    v_mov_b32_e32 v0, s0971; GFX6-NEXT:    v_mov_b32_e32 v1, s1972; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0973; GFX6-NEXT:    s_endpgm974;975; GFX8-LABEL: add64:976; GFX8:       ; %bb.0: ; %entry977; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24978; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34979; GFX8-NEXT:    s_waitcnt lgkmcnt(0)980; GFX8-NEXT:    v_mov_b32_e32 v0, s0981; GFX8-NEXT:    s_add_u32 s0, s2, s4982; GFX8-NEXT:    v_mov_b32_e32 v1, s1983; GFX8-NEXT:    s_addc_u32 s1, s3, s5984; GFX8-NEXT:    v_mov_b32_e32 v3, s1985; GFX8-NEXT:    v_mov_b32_e32 v2, s0986; GFX8-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]987; GFX8-NEXT:    s_endpgm988;989; GFX9-LABEL: add64:990; GFX9:       ; %bb.0: ; %entry991; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24992; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34993; GFX9-NEXT:    v_mov_b32_e32 v2, 0994; GFX9-NEXT:    s_waitcnt lgkmcnt(0)995; GFX9-NEXT:    s_add_u32 s2, s2, s6996; GFX9-NEXT:    s_addc_u32 s3, s3, s7997; GFX9-NEXT:    v_mov_b32_e32 v0, s2998; GFX9-NEXT:    v_mov_b32_e32 v1, s3999; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1000; GFX9-NEXT:    s_endpgm1001;1002; GFX10-LABEL: add64:1003; GFX10:       ; %bb.0: ; %entry1004; GFX10-NEXT:    s_clause 0x11005; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241006; GFX10-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341007; GFX10-NEXT:    v_mov_b32_e32 v2, 01008; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1009; GFX10-NEXT:    s_add_u32 s2, s2, s61010; GFX10-NEXT:    s_addc_u32 s3, s3, s71011; GFX10-NEXT:    v_mov_b32_e32 v0, s21012; GFX10-NEXT:    v_mov_b32_e32 v1, s31013; GFX10-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1014; GFX10-NEXT:    s_endpgm1015;1016; GFX11-LABEL: add64:1017; GFX11:       ; %bb.0: ; %entry1018; GFX11-NEXT:    s_clause 0x11019; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241020; GFX11-NEXT:    s_load_b64 s[4:5], s[4:5], 0x341021; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1022; GFX11-NEXT:    s_add_u32 s2, s2, s41023; GFX11-NEXT:    s_addc_u32 s3, s3, s51024; GFX11-NEXT:    v_mov_b32_e32 v0, s21025; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31026; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1027; GFX11-NEXT:    s_endpgm1028;1029; GFX12-LABEL: add64:1030; GFX12:       ; %bb.0: ; %entry1031; GFX12-NEXT:    s_clause 0x11032; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241033; GFX12-NEXT:    s_load_b64 s[4:5], s[4:5], 0x341034; GFX12-NEXT:    s_wait_kmcnt 0x01035; GFX12-NEXT:    s_add_nc_u64 s[2:3], s[2:3], s[4:5]1036; GFX12-NEXT:    v_mov_b32_e32 v2, 01037; GFX12-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31038; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1039; GFX12-NEXT:    s_endpgm1040entry:1041  %add = add i64 %a, %b1042  store i64 %add, ptr addrspace(1) %out1043  ret void1044}1045 1046; The v_addc_u32 and v_add_i32 instruction can't read SGPRs, because they1047; use VCC.  The test is designed so that %a will be stored in an SGPR and1048; %0 will be stored in a VGPR, so the comiler will be forced to copy %a1049; to a VGPR before doing the add.1050define amdgpu_kernel void @add64_sgpr_vgpr(ptr addrspace(1) %out, i64 %a, ptr addrspace(1) %in) {1051; GFX6-LABEL: add64_sgpr_vgpr:1052; GFX6:       ; %bb.0: ; %entry1053; GFX6-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0xd1054; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91055; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1056; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[6:7], 0x01057; GFX6-NEXT:    s_mov_b32 s4, s01058; GFX6-NEXT:    s_mov_b32 s5, s11059; GFX6-NEXT:    s_mov_b32 s7, 0xf0001060; GFX6-NEXT:    s_mov_b32 s6, -11061; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1062; GFX6-NEXT:    s_add_u32 s0, s2, s81063; GFX6-NEXT:    s_addc_u32 s1, s3, s91064; GFX6-NEXT:    v_mov_b32_e32 v0, s01065; GFX6-NEXT:    v_mov_b32_e32 v1, s11066; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01067; GFX6-NEXT:    s_endpgm1068;1069; GFX8-LABEL: add64_sgpr_vgpr:1070; GFX8:       ; %bb.0: ; %entry1071; GFX8-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341072; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241073; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1074; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x01075; GFX8-NEXT:    v_mov_b32_e32 v0, s01076; GFX8-NEXT:    v_mov_b32_e32 v1, s11077; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1078; GFX8-NEXT:    s_add_u32 s0, s2, s41079; GFX8-NEXT:    s_addc_u32 s1, s3, s51080; GFX8-NEXT:    v_mov_b32_e32 v3, s11081; GFX8-NEXT:    v_mov_b32_e32 v2, s01082; GFX8-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]1083; GFX8-NEXT:    s_endpgm1084;1085; GFX9-LABEL: add64_sgpr_vgpr:1086; GFX9:       ; %bb.0: ; %entry1087; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341088; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241089; GFX9-NEXT:    v_mov_b32_e32 v2, 01090; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1091; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x01092; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1093; GFX9-NEXT:    s_add_u32 s2, s2, s41094; GFX9-NEXT:    s_addc_u32 s3, s3, s51095; GFX9-NEXT:    v_mov_b32_e32 v0, s21096; GFX9-NEXT:    v_mov_b32_e32 v1, s31097; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1098; GFX9-NEXT:    s_endpgm1099;1100; GFX10-LABEL: add64_sgpr_vgpr:1101; GFX10:       ; %bb.0: ; %entry1102; GFX10-NEXT:    s_clause 0x11103; GFX10-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341104; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241105; GFX10-NEXT:    v_mov_b32_e32 v2, 01106; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1107; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x01108; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1109; GFX10-NEXT:    s_add_u32 s2, s2, s41110; GFX10-NEXT:    s_addc_u32 s3, s3, s51111; GFX10-NEXT:    v_mov_b32_e32 v0, s21112; GFX10-NEXT:    v_mov_b32_e32 v1, s31113; GFX10-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1114; GFX10-NEXT:    s_endpgm1115;1116; GFX11-LABEL: add64_sgpr_vgpr:1117; GFX11:       ; %bb.0: ; %entry1118; GFX11-NEXT:    s_clause 0x11119; GFX11-NEXT:    s_load_b64 s[6:7], s[4:5], 0x341120; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241121; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1122; GFX11-NEXT:    s_load_b64 s[4:5], s[6:7], 0x01123; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1124; GFX11-NEXT:    s_add_u32 s2, s2, s41125; GFX11-NEXT:    s_addc_u32 s3, s3, s51126; GFX11-NEXT:    v_mov_b32_e32 v0, s21127; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31128; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1129; GFX11-NEXT:    s_endpgm1130;1131; GFX12-LABEL: add64_sgpr_vgpr:1132; GFX12:       ; %bb.0: ; %entry1133; GFX12-NEXT:    s_clause 0x11134; GFX12-NEXT:    s_load_b64 s[6:7], s[4:5], 0x341135; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241136; GFX12-NEXT:    s_wait_kmcnt 0x01137; GFX12-NEXT:    s_load_b64 s[4:5], s[6:7], 0x01138; GFX12-NEXT:    s_wait_kmcnt 0x01139; GFX12-NEXT:    s_add_nc_u64 s[2:3], s[2:3], s[4:5]1140; GFX12-NEXT:    v_mov_b32_e32 v2, 01141; GFX12-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31142; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1143; GFX12-NEXT:    s_endpgm1144entry:1145  %0 = load i64, ptr addrspace(1) %in1146  %1 = add i64 %a, %01147  store i64 %1, ptr addrspace(1) %out1148  ret void1149}1150 1151; Test i64 add inside a branch.1152define amdgpu_kernel void @add64_in_branch(ptr addrspace(1) %out, ptr addrspace(1) %in, i64 %a, i64 %b, i64 %c) {1153; GFX6-LABEL: add64_in_branch:1154; GFX6:       ; %bb.0: ; %entry1155; GFX6-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x91156; GFX6-NEXT:    s_mov_b64 s[8:9], 01157; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1158; GFX6-NEXT:    v_cmp_ne_u64_e64 s[10:11], s[4:5], 01159; GFX6-NEXT:    s_and_b64 vcc, exec, s[10:11]1160; GFX6-NEXT:    s_cbranch_vccz .LBB9_41161; GFX6-NEXT:  ; %bb.1: ; %else1162; GFX6-NEXT:    s_add_u32 s4, s4, s61163; GFX6-NEXT:    s_addc_u32 s5, s5, s71164; GFX6-NEXT:    s_andn2_b64 vcc, exec, s[8:9]1165; GFX6-NEXT:    s_cbranch_vccnz .LBB9_31166; GFX6-NEXT:  .LBB9_2: ; %if1167; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x01168; GFX6-NEXT:  .LBB9_3: ; %endif1169; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1170; GFX6-NEXT:    v_mov_b32_e32 v0, s41171; GFX6-NEXT:    s_mov_b32 s3, 0xf0001172; GFX6-NEXT:    s_mov_b32 s2, -11173; GFX6-NEXT:    v_mov_b32_e32 v1, s51174; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01175; GFX6-NEXT:    s_endpgm1176; GFX6-NEXT:  .LBB9_4:1177; GFX6-NEXT:    ; implicit-def: $sgpr4_sgpr51178; GFX6-NEXT:    s_branch .LBB9_21179;1180; GFX8-LABEL: add64_in_branch:1181; GFX8:       ; %bb.0: ; %entry1182; GFX8-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x241183; GFX8-NEXT:    s_mov_b64 s[8:9], 01184; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1185; GFX8-NEXT:    s_cmp_lg_u64 s[4:5], 01186; GFX8-NEXT:    s_cbranch_scc0 .LBB9_41187; GFX8-NEXT:  ; %bb.1: ; %else1188; GFX8-NEXT:    s_add_u32 s4, s4, s61189; GFX8-NEXT:    s_addc_u32 s5, s5, s71190; GFX8-NEXT:    s_andn2_b64 vcc, exec, s[8:9]1191; GFX8-NEXT:    s_cbranch_vccnz .LBB9_31192; GFX8-NEXT:  .LBB9_2: ; %if1193; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x01194; GFX8-NEXT:  .LBB9_3: ; %endif1195; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1196; GFX8-NEXT:    v_mov_b32_e32 v2, s41197; GFX8-NEXT:    v_mov_b32_e32 v0, s01198; GFX8-NEXT:    v_mov_b32_e32 v1, s11199; GFX8-NEXT:    v_mov_b32_e32 v3, s51200; GFX8-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]1201; GFX8-NEXT:    s_endpgm1202; GFX8-NEXT:  .LBB9_4:1203; GFX8-NEXT:    ; implicit-def: $sgpr4_sgpr51204; GFX8-NEXT:    s_branch .LBB9_21205;1206; GFX9-LABEL: add64_in_branch:1207; GFX9:       ; %bb.0: ; %entry1208; GFX9-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x241209; GFX9-NEXT:    s_mov_b64 s[2:3], 01210; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1211; GFX9-NEXT:    s_cmp_lg_u64 s[12:13], 01212; GFX9-NEXT:    s_cbranch_scc0 .LBB9_41213; GFX9-NEXT:  ; %bb.1: ; %else1214; GFX9-NEXT:    s_add_u32 s0, s12, s141215; GFX9-NEXT:    s_addc_u32 s1, s13, s151216; GFX9-NEXT:    s_andn2_b64 vcc, exec, s[2:3]1217; GFX9-NEXT:    s_cbranch_vccnz .LBB9_31218; GFX9-NEXT:  .LBB9_2: ; %if1219; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[10:11], 0x01220; GFX9-NEXT:  .LBB9_3: ; %endif1221; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1222; GFX9-NEXT:    v_mov_b32_e32 v0, s01223; GFX9-NEXT:    v_mov_b32_e32 v2, 01224; GFX9-NEXT:    v_mov_b32_e32 v1, s11225; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[8:9]1226; GFX9-NEXT:    s_endpgm1227; GFX9-NEXT:  .LBB9_4:1228; GFX9-NEXT:    ; implicit-def: $sgpr0_sgpr11229; GFX9-NEXT:    s_branch .LBB9_21230;1231; GFX10-LABEL: add64_in_branch:1232; GFX10:       ; %bb.0: ; %entry1233; GFX10-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x241234; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1235; GFX10-NEXT:    s_cmp_lg_u64 s[12:13], 01236; GFX10-NEXT:    s_cbranch_scc0 .LBB9_41237; GFX10-NEXT:  ; %bb.1: ; %else1238; GFX10-NEXT:    s_add_u32 s0, s12, s141239; GFX10-NEXT:    s_addc_u32 s1, s13, s151240; GFX10-NEXT:    s_cbranch_execnz .LBB9_31241; GFX10-NEXT:  .LBB9_2: ; %if1242; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[10:11], 0x01243; GFX10-NEXT:  .LBB9_3: ; %endif1244; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1245; GFX10-NEXT:    v_mov_b32_e32 v0, s01246; GFX10-NEXT:    v_mov_b32_e32 v2, 01247; GFX10-NEXT:    v_mov_b32_e32 v1, s11248; GFX10-NEXT:    global_store_dwordx2 v2, v[0:1], s[8:9]1249; GFX10-NEXT:    s_endpgm1250; GFX10-NEXT:  .LBB9_4:1251; GFX10-NEXT:    ; implicit-def: $sgpr0_sgpr11252; GFX10-NEXT:    s_branch .LBB9_21253;1254; GFX11-LABEL: add64_in_branch:1255; GFX11:       ; %bb.0: ; %entry1256; GFX11-NEXT:    s_load_b256 s[0:7], s[4:5], 0x241257; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1258; GFX11-NEXT:    s_cmp_lg_u64 s[4:5], 01259; GFX11-NEXT:    s_cbranch_scc0 .LBB9_41260; GFX11-NEXT:  ; %bb.1: ; %else1261; GFX11-NEXT:    s_add_u32 s4, s4, s61262; GFX11-NEXT:    s_addc_u32 s5, s5, s71263; GFX11-NEXT:    s_cbranch_execnz .LBB9_31264; GFX11-NEXT:  .LBB9_2: ; %if1265; GFX11-NEXT:    s_load_b64 s[4:5], s[2:3], 0x01266; GFX11-NEXT:  .LBB9_3: ; %endif1267; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1268; GFX11-NEXT:    v_mov_b32_e32 v0, s41269; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s51270; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1271; GFX11-NEXT:    s_endpgm1272; GFX11-NEXT:  .LBB9_4:1273; GFX11-NEXT:    ; implicit-def: $sgpr4_sgpr51274; GFX11-NEXT:    s_branch .LBB9_21275;1276; GFX12-LABEL: add64_in_branch:1277; GFX12:       ; %bb.0: ; %entry1278; GFX12-NEXT:    s_load_b256 s[0:7], s[4:5], 0x241279; GFX12-NEXT:    s_wait_kmcnt 0x01280; GFX12-NEXT:    s_cmp_lg_u64 s[4:5], 01281; GFX12-NEXT:    s_cbranch_scc0 .LBB9_41282; GFX12-NEXT:  ; %bb.1: ; %else1283; GFX12-NEXT:    s_add_nc_u64 s[4:5], s[4:5], s[6:7]1284; GFX12-NEXT:    s_cbranch_execnz .LBB9_31285; GFX12-NEXT:  .LBB9_2: ; %if1286; GFX12-NEXT:    s_load_b64 s[4:5], s[2:3], 0x01287; GFX12-NEXT:  .LBB9_3: ; %endif1288; GFX12-NEXT:    s_wait_kmcnt 0x01289; GFX12-NEXT:    v_mov_b32_e32 v0, s41290; GFX12-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s51291; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1292; GFX12-NEXT:    s_endpgm1293; GFX12-NEXT:  .LBB9_4:1294; GFX12-NEXT:    ; implicit-def: $sgpr4_sgpr51295; GFX12-NEXT:    s_branch .LBB9_21296entry:1297  %0 = icmp eq i64 %a, 01298  br i1 %0, label %if, label %else1299 1300if:1301  %1 = load i64, ptr addrspace(1) %in1302  br label %endif1303 1304else:1305  %2 = add i64 %a, %b1306  br label %endif1307 1308endif:1309  %3 = phi i64 [%1, %if], [%2, %else]1310  store i64 %3, ptr addrspace(1) %out1311  ret void1312}1313 1314; Make sure the VOP3 form of add is initially selected. Otherwise pair1315; of opies from/to VCC would be necessary1316define amdgpu_ps void @add_select_vop3(i32 inreg %s, i32 %v) {1317; GFX6-LABEL: add_select_vop3:1318; GFX6:       ; %bb.0:1319; GFX6-NEXT:    v_add_i32_e64 v0, s[0:1], s0, v01320; GFX6-NEXT:    s_mov_b32 m0, -11321; GFX6-NEXT:    ;;#ASMSTART1322; GFX6-NEXT:    ; def vcc1323; GFX6-NEXT:    ;;#ASMEND1324; GFX6-NEXT:    ds_write_b32 v0, v01325; GFX6-NEXT:    ;;#ASMSTART1326; GFX6-NEXT:    ; use vcc1327; GFX6-NEXT:    ;;#ASMEND1328; GFX6-NEXT:    s_endpgm1329;1330; GFX8-LABEL: add_select_vop3:1331; GFX8:       ; %bb.0:1332; GFX8-NEXT:    v_add_u32_e64 v0, s[0:1], s0, v01333; GFX8-NEXT:    s_mov_b32 m0, -11334; GFX8-NEXT:    ;;#ASMSTART1335; GFX8-NEXT:    ; def vcc1336; GFX8-NEXT:    ;;#ASMEND1337; GFX8-NEXT:    ds_write_b32 v0, v01338; GFX8-NEXT:    ;;#ASMSTART1339; GFX8-NEXT:    ; use vcc1340; GFX8-NEXT:    ;;#ASMEND1341; GFX8-NEXT:    s_endpgm1342;1343; GFX9-LABEL: add_select_vop3:1344; GFX9:       ; %bb.0:1345; GFX9-NEXT:    v_add_u32_e32 v0, s0, v01346; GFX9-NEXT:    ;;#ASMSTART1347; GFX9-NEXT:    ; def vcc1348; GFX9-NEXT:    ;;#ASMEND1349; GFX9-NEXT:    ds_write_b32 v0, v01350; GFX9-NEXT:    ;;#ASMSTART1351; GFX9-NEXT:    ; use vcc1352; GFX9-NEXT:    ;;#ASMEND1353; GFX9-NEXT:    s_endpgm1354;1355; GFX10-LABEL: add_select_vop3:1356; GFX10:       ; %bb.0:1357; GFX10-NEXT:    v_add_nc_u32_e32 v0, s0, v01358; GFX10-NEXT:    ;;#ASMSTART1359; GFX10-NEXT:    ; def vcc1360; GFX10-NEXT:    ;;#ASMEND1361; GFX10-NEXT:    ds_write_b32 v0, v01362; GFX10-NEXT:    ;;#ASMSTART1363; GFX10-NEXT:    ; use vcc1364; GFX10-NEXT:    ;;#ASMEND1365; GFX10-NEXT:    s_endpgm1366;1367; GFX11-LABEL: add_select_vop3:1368; GFX11:       ; %bb.0:1369; GFX11-NEXT:    v_add_nc_u32_e32 v0, s0, v01370; GFX11-NEXT:    ;;#ASMSTART1371; GFX11-NEXT:    ; def vcc1372; GFX11-NEXT:    ;;#ASMEND1373; GFX11-NEXT:    ds_store_b32 v0, v01374; GFX11-NEXT:    ;;#ASMSTART1375; GFX11-NEXT:    ; use vcc1376; GFX11-NEXT:    ;;#ASMEND1377; GFX11-NEXT:    s_endpgm1378;1379; GFX12-LABEL: add_select_vop3:1380; GFX12:       ; %bb.0:1381; GFX12-NEXT:    v_add_nc_u32_e32 v0, s0, v01382; GFX12-NEXT:    ;;#ASMSTART1383; GFX12-NEXT:    ; def vcc1384; GFX12-NEXT:    ;;#ASMEND1385; GFX12-NEXT:    ds_store_b32 v0, v01386; GFX12-NEXT:    ;;#ASMSTART1387; GFX12-NEXT:    ; use vcc1388; GFX12-NEXT:    ;;#ASMEND1389; GFX12-NEXT:    s_endpgm1390  %vcc = call i64 asm sideeffect "; def vcc", "={vcc}"()1391  %sub = add i32 %v, %s1392  store i32 %sub, ptr addrspace(3) poison1393  call void asm sideeffect "; use vcc", "{vcc}"(i64 %vcc)1394  ret void1395}1396 1397declare i32 @llvm.amdgcn.workitem.id.x() #11398 1399attributes #0 = { nounwind }1400attributes #1 = { nounwind readnone speculatable }1401