brintos

brintos / llvm-project-archived public Read only

0
0
Text · 42.1 KiB · d10ef70 Raw
1094 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=verde < %s | FileCheck -check-prefixes=GFX6 %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji < %s | FileCheck -check-prefixes=GFX8 %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9 %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX12,GFX12-TRUE16 %s6; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX12,GFX12-FAKE16 %s7 8declare i32 @llvm.amdgcn.workitem.id.x() nounwind readnone speculatable9 10define amdgpu_kernel void @s_sub_i32(ptr addrspace(1) %out, i32 %a, i32 %b) {11; GFX6-LABEL: s_sub_i32:12; GFX6:       ; %bb.0:13; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x914; GFX6-NEXT:    s_waitcnt lgkmcnt(0)15; GFX6-NEXT:    s_mov_b64 s[4:5], s[2:3]16; GFX6-NEXT:    s_sub_i32 s4, s4, s517; GFX6-NEXT:    s_mov_b32 s3, 0xf00018; GFX6-NEXT:    s_mov_b32 s2, -119; 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_sub_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_sub_i32 s2, s2, s328; GFX8-NEXT:    v_mov_b32_e32 v0, s029; GFX8-NEXT:    v_mov_b32_e32 v1, s130; GFX8-NEXT:    v_mov_b32_e32 v2, s231; GFX8-NEXT:    flat_store_dword v[0:1], v232; GFX8-NEXT:    s_endpgm33;34; GFX9-LABEL: s_sub_i32:35; GFX9:       ; %bb.0:36; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2437; GFX9-NEXT:    v_mov_b32_e32 v0, 038; GFX9-NEXT:    s_waitcnt lgkmcnt(0)39; GFX9-NEXT:    s_sub_i32 s2, s2, s340; GFX9-NEXT:    v_mov_b32_e32 v1, s241; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]42; GFX9-NEXT:    s_endpgm43;44; GFX12-LABEL: s_sub_i32:45; GFX12:       ; %bb.0:46; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2447; GFX12-NEXT:    s_wait_kmcnt 0x048; GFX12-NEXT:    s_sub_co_i32 s2, s2, s349; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)50; GFX12-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s251; GFX12-NEXT:    global_store_b32 v0, v1, s[0:1]52; GFX12-NEXT:    s_endpgm53  %result = sub i32 %a, %b54  store i32 %result, ptr addrspace(1) %out55  ret void56}57 58define amdgpu_kernel void @s_sub_imm_i32(ptr addrspace(1) %out, i32 %a) {59; GFX6-LABEL: s_sub_imm_i32:60; GFX6:       ; %bb.0:61; GFX6-NEXT:    s_load_dword s6, s[4:5], 0xb62; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x963; GFX6-NEXT:    s_mov_b32 s3, 0xf00064; GFX6-NEXT:    s_mov_b32 s2, -165; GFX6-NEXT:    s_waitcnt lgkmcnt(0)66; GFX6-NEXT:    s_sub_i32 s4, 0x4d2, s667; GFX6-NEXT:    v_mov_b32_e32 v0, s468; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], 069; GFX6-NEXT:    s_endpgm70;71; GFX8-LABEL: s_sub_imm_i32:72; GFX8:       ; %bb.0:73; GFX8-NEXT:    s_load_dword s2, s[4:5], 0x2c74; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2475; GFX8-NEXT:    s_waitcnt lgkmcnt(0)76; GFX8-NEXT:    s_sub_i32 s2, 0x4d2, s277; GFX8-NEXT:    v_mov_b32_e32 v0, s078; GFX8-NEXT:    v_mov_b32_e32 v1, s179; GFX8-NEXT:    v_mov_b32_e32 v2, s280; GFX8-NEXT:    flat_store_dword v[0:1], v281; GFX8-NEXT:    s_endpgm82;83; GFX9-LABEL: s_sub_imm_i32:84; GFX9:       ; %bb.0:85; GFX9-NEXT:    s_load_dword s2, s[4:5], 0x2c86; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2487; GFX9-NEXT:    v_mov_b32_e32 v0, 088; GFX9-NEXT:    s_waitcnt lgkmcnt(0)89; GFX9-NEXT:    s_sub_i32 s2, 0x4d2, s290; GFX9-NEXT:    v_mov_b32_e32 v1, s291; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]92; GFX9-NEXT:    s_endpgm93;94; GFX12-LABEL: s_sub_imm_i32:95; GFX12:       ; %bb.0:96; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x2497; GFX12-NEXT:    s_wait_kmcnt 0x098; GFX12-NEXT:    s_sub_co_i32 s2, 0x4d2, s299; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)100; GFX12-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2101; GFX12-NEXT:    global_store_b32 v0, v1, s[0:1]102; GFX12-NEXT:    s_endpgm103  %result = sub i32 1234, %a104  store i32 %result, ptr addrspace(1) %out105  ret void106}107 108define amdgpu_kernel void @test_sub_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {109; GFX6-LABEL: test_sub_i32:110; GFX6:       ; %bb.0:111; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9112; GFX6-NEXT:    s_mov_b32 s7, 0xf000113; GFX6-NEXT:    s_mov_b32 s6, -1114; GFX6-NEXT:    s_mov_b32 s10, s6115; GFX6-NEXT:    s_mov_b32 s11, s7116; GFX6-NEXT:    s_waitcnt lgkmcnt(0)117; GFX6-NEXT:    s_mov_b32 s8, s2118; GFX6-NEXT:    s_mov_b32 s9, s3119; GFX6-NEXT:    buffer_load_dwordx2 v[0:1], off, s[8:11], 0120; GFX6-NEXT:    s_mov_b32 s4, s0121; GFX6-NEXT:    s_mov_b32 s5, s1122; GFX6-NEXT:    s_waitcnt vmcnt(0)123; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1124; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0125; GFX6-NEXT:    s_endpgm126;127; GFX8-LABEL: test_sub_i32:128; GFX8:       ; %bb.0:129; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24130; GFX8-NEXT:    s_waitcnt lgkmcnt(0)131; GFX8-NEXT:    v_mov_b32_e32 v0, s2132; GFX8-NEXT:    v_mov_b32_e32 v1, s3133; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]134; GFX8-NEXT:    v_mov_b32_e32 v2, s0135; GFX8-NEXT:    v_mov_b32_e32 v3, s1136; GFX8-NEXT:    s_waitcnt vmcnt(0)137; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v0, v1138; GFX8-NEXT:    flat_store_dword v[2:3], v0139; GFX8-NEXT:    s_endpgm140;141; GFX9-LABEL: test_sub_i32:142; GFX9:       ; %bb.0:143; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24144; GFX9-NEXT:    v_mov_b32_e32 v2, 0145; GFX9-NEXT:    s_waitcnt lgkmcnt(0)146; GFX9-NEXT:    global_load_dwordx2 v[0:1], v2, s[2:3]147; GFX9-NEXT:    s_waitcnt vmcnt(0)148; GFX9-NEXT:    v_sub_u32_e32 v0, v0, v1149; GFX9-NEXT:    global_store_dword v2, v0, s[0:1]150; GFX9-NEXT:    s_endpgm151;152; GFX12-LABEL: test_sub_i32:153; GFX12:       ; %bb.0:154; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24155; GFX12-NEXT:    v_mov_b32_e32 v2, 0156; GFX12-NEXT:    s_wait_kmcnt 0x0157; GFX12-NEXT:    global_load_b64 v[0:1], v2, s[2:3]158; GFX12-NEXT:    s_wait_loadcnt 0x0159; GFX12-NEXT:    v_sub_nc_u32_e32 v0, v0, v1160; GFX12-NEXT:    global_store_b32 v2, v0, s[0:1]161; GFX12-NEXT:    s_endpgm162  %b_ptr = getelementptr i32, ptr addrspace(1) %in, i32 1163  %a = load i32, ptr addrspace(1) %in164  %b = load i32, ptr addrspace(1) %b_ptr165  %result = sub i32 %a, %b166  store i32 %result, ptr addrspace(1) %out167  ret void168}169 170define amdgpu_kernel void @test_sub_imm_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {171; GFX6-LABEL: test_sub_imm_i32:172; GFX6:       ; %bb.0:173; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9174; GFX6-NEXT:    s_mov_b32 s7, 0xf000175; GFX6-NEXT:    s_mov_b32 s6, -1176; GFX6-NEXT:    s_mov_b32 s10, s6177; GFX6-NEXT:    s_mov_b32 s11, s7178; GFX6-NEXT:    s_waitcnt lgkmcnt(0)179; GFX6-NEXT:    s_mov_b32 s8, s2180; GFX6-NEXT:    s_mov_b32 s9, s3181; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 0182; GFX6-NEXT:    s_mov_b32 s4, s0183; GFX6-NEXT:    s_mov_b32 s5, s1184; GFX6-NEXT:    s_waitcnt vmcnt(0)185; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, 0x7b, v0186; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0187; GFX6-NEXT:    s_endpgm188;189; GFX8-LABEL: test_sub_imm_i32:190; GFX8:       ; %bb.0:191; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24192; GFX8-NEXT:    s_waitcnt lgkmcnt(0)193; GFX8-NEXT:    v_mov_b32_e32 v0, s2194; GFX8-NEXT:    v_mov_b32_e32 v1, s3195; GFX8-NEXT:    flat_load_dword v2, v[0:1]196; GFX8-NEXT:    v_mov_b32_e32 v0, s0197; GFX8-NEXT:    v_mov_b32_e32 v1, s1198; GFX8-NEXT:    s_waitcnt vmcnt(0)199; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, 0x7b, v2200; GFX8-NEXT:    flat_store_dword v[0:1], v2201; GFX8-NEXT:    s_endpgm202;203; GFX9-LABEL: test_sub_imm_i32:204; GFX9:       ; %bb.0:205; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24206; GFX9-NEXT:    v_mov_b32_e32 v0, 0207; GFX9-NEXT:    s_waitcnt lgkmcnt(0)208; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]209; GFX9-NEXT:    s_waitcnt vmcnt(0)210; GFX9-NEXT:    v_sub_u32_e32 v1, 0x7b, v1211; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]212; GFX9-NEXT:    s_endpgm213;214; GFX12-LABEL: test_sub_imm_i32:215; GFX12:       ; %bb.0:216; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24217; GFX12-NEXT:    v_mov_b32_e32 v0, 0218; GFX12-NEXT:    s_wait_kmcnt 0x0219; GFX12-NEXT:    global_load_b32 v1, v0, s[2:3]220; GFX12-NEXT:    s_wait_loadcnt 0x0221; GFX12-NEXT:    v_sub_nc_u32_e32 v1, 0x7b, v1222; GFX12-NEXT:    global_store_b32 v0, v1, s[0:1]223; GFX12-NEXT:    s_endpgm224  %a = load i32, ptr addrspace(1) %in225  %result = sub i32 123, %a226  store i32 %result, ptr addrspace(1) %out227  ret void228}229 230define amdgpu_kernel void @test_sub_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {231; GFX6-LABEL: test_sub_v2i32:232; GFX6:       ; %bb.0:233; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9234; GFX6-NEXT:    s_mov_b32 s7, 0xf000235; GFX6-NEXT:    s_mov_b32 s6, -1236; GFX6-NEXT:    s_mov_b32 s10, s6237; GFX6-NEXT:    s_mov_b32 s11, s7238; GFX6-NEXT:    s_waitcnt lgkmcnt(0)239; GFX6-NEXT:    s_mov_b32 s8, s2240; GFX6-NEXT:    s_mov_b32 s9, s3241; GFX6-NEXT:    buffer_load_dwordx4 v[0:3], off, s[8:11], 0242; GFX6-NEXT:    s_mov_b32 s4, s0243; GFX6-NEXT:    s_mov_b32 s5, s1244; GFX6-NEXT:    s_waitcnt vmcnt(0)245; GFX6-NEXT:    v_sub_i32_e32 v1, vcc, v1, v3246; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v2247; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0248; GFX6-NEXT:    s_endpgm249;250; GFX8-LABEL: test_sub_v2i32:251; GFX8:       ; %bb.0:252; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24253; GFX8-NEXT:    s_waitcnt lgkmcnt(0)254; GFX8-NEXT:    v_mov_b32_e32 v0, s2255; GFX8-NEXT:    v_mov_b32_e32 v1, s3256; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]257; GFX8-NEXT:    v_mov_b32_e32 v4, s0258; GFX8-NEXT:    v_mov_b32_e32 v5, s1259; GFX8-NEXT:    s_waitcnt vmcnt(0)260; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, v1, v3261; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v0, v2262; GFX8-NEXT:    flat_store_dwordx2 v[4:5], v[0:1]263; GFX8-NEXT:    s_endpgm264;265; GFX9-LABEL: test_sub_v2i32:266; GFX9:       ; %bb.0:267; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24268; GFX9-NEXT:    v_mov_b32_e32 v4, 0269; GFX9-NEXT:    s_waitcnt lgkmcnt(0)270; GFX9-NEXT:    global_load_dwordx4 v[0:3], v4, s[2:3]271; GFX9-NEXT:    s_waitcnt vmcnt(0)272; GFX9-NEXT:    v_sub_u32_e32 v1, v1, v3273; GFX9-NEXT:    v_sub_u32_e32 v0, v0, v2274; GFX9-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1]275; GFX9-NEXT:    s_endpgm276;277; GFX12-LABEL: test_sub_v2i32:278; GFX12:       ; %bb.0:279; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24280; GFX12-NEXT:    v_mov_b32_e32 v4, 0281; GFX12-NEXT:    s_wait_kmcnt 0x0282; GFX12-NEXT:    global_load_b128 v[0:3], v4, s[2:3]283; GFX12-NEXT:    s_wait_loadcnt 0x0284; GFX12-NEXT:    v_sub_nc_u32_e32 v1, v1, v3285; GFX12-NEXT:    v_sub_nc_u32_e32 v0, v0, v2286; GFX12-NEXT:    global_store_b64 v4, v[0:1], s[0:1]287; GFX12-NEXT:    s_endpgm288  %b_ptr = getelementptr <2 x i32>, ptr addrspace(1) %in, i32 1289  %a = load <2 x i32>, ptr addrspace(1) %in290  %b = load <2 x i32>, ptr addrspace(1) %b_ptr291  %result = sub <2 x i32> %a, %b292  store <2 x i32> %result, ptr addrspace(1) %out293  ret void294}295 296define amdgpu_kernel void @test_sub_v4i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {297; GFX6-LABEL: test_sub_v4i32:298; GFX6:       ; %bb.0:299; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9300; GFX6-NEXT:    s_mov_b32 s7, 0xf000301; GFX6-NEXT:    s_mov_b32 s6, -1302; GFX6-NEXT:    s_mov_b32 s10, s6303; GFX6-NEXT:    s_mov_b32 s11, s7304; GFX6-NEXT:    s_waitcnt lgkmcnt(0)305; GFX6-NEXT:    s_mov_b32 s8, s2306; GFX6-NEXT:    s_mov_b32 s9, s3307; GFX6-NEXT:    buffer_load_dwordx4 v[0:3], off, s[8:11], 0308; GFX6-NEXT:    buffer_load_dwordx4 v[4:7], off, s[8:11], 0 offset:16309; GFX6-NEXT:    s_mov_b32 s4, s0310; GFX6-NEXT:    s_mov_b32 s5, s1311; GFX6-NEXT:    s_waitcnt vmcnt(0)312; GFX6-NEXT:    v_sub_i32_e32 v3, vcc, v3, v7313; GFX6-NEXT:    v_sub_i32_e32 v2, vcc, v2, v6314; GFX6-NEXT:    v_sub_i32_e32 v1, vcc, v1, v5315; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v4316; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0317; GFX6-NEXT:    s_endpgm318;319; GFX8-LABEL: test_sub_v4i32:320; GFX8:       ; %bb.0:321; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24322; GFX8-NEXT:    s_waitcnt lgkmcnt(0)323; GFX8-NEXT:    v_mov_b32_e32 v0, s2324; GFX8-NEXT:    v_mov_b32_e32 v1, s3325; GFX8-NEXT:    s_add_u32 s2, s2, 16326; GFX8-NEXT:    s_addc_u32 s3, s3, 0327; GFX8-NEXT:    v_mov_b32_e32 v5, s3328; GFX8-NEXT:    v_mov_b32_e32 v4, s2329; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]330; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]331; GFX8-NEXT:    v_mov_b32_e32 v8, s0332; GFX8-NEXT:    v_mov_b32_e32 v9, s1333; GFX8-NEXT:    s_waitcnt vmcnt(0)334; GFX8-NEXT:    v_sub_u32_e32 v3, vcc, v3, v7335; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, v2, v6336; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, v1, v5337; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v0, v4338; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]339; GFX8-NEXT:    s_endpgm340;341; GFX9-LABEL: test_sub_v4i32:342; GFX9:       ; %bb.0:343; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24344; GFX9-NEXT:    v_mov_b32_e32 v8, 0345; GFX9-NEXT:    s_waitcnt lgkmcnt(0)346; GFX9-NEXT:    global_load_dwordx4 v[0:3], v8, s[2:3] offset:16347; GFX9-NEXT:    global_load_dwordx4 v[4:7], v8, s[2:3]348; GFX9-NEXT:    s_waitcnt vmcnt(0)349; GFX9-NEXT:    v_sub_u32_e32 v3, v7, v3350; GFX9-NEXT:    v_sub_u32_e32 v2, v6, v2351; GFX9-NEXT:    v_sub_u32_e32 v1, v5, v1352; GFX9-NEXT:    v_sub_u32_e32 v0, v4, v0353; GFX9-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1]354; GFX9-NEXT:    s_endpgm355;356; GFX12-LABEL: test_sub_v4i32:357; GFX12:       ; %bb.0:358; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24359; GFX12-NEXT:    v_mov_b32_e32 v8, 0360; GFX12-NEXT:    s_wait_kmcnt 0x0361; GFX12-NEXT:    s_clause 0x1362; GFX12-NEXT:    global_load_b128 v[0:3], v8, s[2:3] offset:16363; GFX12-NEXT:    global_load_b128 v[4:7], v8, s[2:3]364; GFX12-NEXT:    s_wait_loadcnt 0x0365; GFX12-NEXT:    v_sub_nc_u32_e32 v3, v7, v3366; GFX12-NEXT:    v_sub_nc_u32_e32 v2, v6, v2367; GFX12-NEXT:    v_sub_nc_u32_e32 v1, v5, v1368; GFX12-NEXT:    v_sub_nc_u32_e32 v0, v4, v0369; GFX12-NEXT:    global_store_b128 v8, v[0:3], s[0:1]370; GFX12-NEXT:    s_endpgm371  %b_ptr = getelementptr <4 x i32>, ptr addrspace(1) %in, i32 1372  %a = load <4 x i32>, ptr addrspace(1) %in373  %b = load <4 x i32>, ptr addrspace(1) %b_ptr374  %result = sub <4 x i32> %a, %b375  store <4 x i32> %result, ptr addrspace(1) %out376  ret void377}378 379define amdgpu_kernel void @test_sub_i16(ptr addrspace(1) %out, ptr addrspace(1) %in) {380; GFX6-LABEL: test_sub_i16:381; GFX6:       ; %bb.0:382; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9383; GFX6-NEXT:    s_mov_b32 s7, 0xf000384; GFX6-NEXT:    s_mov_b32 s10, 0385; GFX6-NEXT:    s_mov_b32 s11, s7386; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 1, v0387; GFX6-NEXT:    s_waitcnt lgkmcnt(0)388; GFX6-NEXT:    s_mov_b64 s[8:9], s[2:3]389; GFX6-NEXT:    v_mov_b32_e32 v1, 0390; GFX6-NEXT:    buffer_load_ushort v2, v[0:1], s[8:11], 0 addr64 glc391; GFX6-NEXT:    s_waitcnt vmcnt(0)392; GFX6-NEXT:    buffer_load_ushort v0, v[0:1], s[8:11], 0 addr64 offset:2 glc393; GFX6-NEXT:    s_waitcnt vmcnt(0)394; GFX6-NEXT:    s_mov_b32 s6, -1395; GFX6-NEXT:    s_mov_b32 s4, s0396; GFX6-NEXT:    s_mov_b32 s5, s1397; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v2, v0398; GFX6-NEXT:    buffer_store_short v0, off, s[4:7], 0399; GFX6-NEXT:    s_endpgm400;401; GFX8-LABEL: test_sub_i16:402; GFX8:       ; %bb.0:403; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24404; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 1, v0405; GFX8-NEXT:    s_waitcnt lgkmcnt(0)406; GFX8-NEXT:    v_mov_b32_e32 v1, s3407; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v0408; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc409; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 2, v0410; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc411; GFX8-NEXT:    flat_load_ushort v4, v[0:1] glc412; GFX8-NEXT:    s_waitcnt vmcnt(0)413; GFX8-NEXT:    flat_load_ushort v2, v[2:3] glc414; GFX8-NEXT:    s_waitcnt vmcnt(0)415; GFX8-NEXT:    v_mov_b32_e32 v0, s0416; GFX8-NEXT:    v_mov_b32_e32 v1, s1417; GFX8-NEXT:    v_sub_u16_e32 v2, v4, v2418; GFX8-NEXT:    flat_store_short v[0:1], v2419; GFX8-NEXT:    s_endpgm420;421; GFX9-LABEL: test_sub_i16:422; GFX9:       ; %bb.0:423; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24424; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 1, v0425; GFX9-NEXT:    s_waitcnt lgkmcnt(0)426; GFX9-NEXT:    global_load_ushort v1, v0, s[2:3] glc427; GFX9-NEXT:    s_waitcnt vmcnt(0)428; GFX9-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc429; GFX9-NEXT:    s_waitcnt vmcnt(0)430; GFX9-NEXT:    v_mov_b32_e32 v0, 0431; GFX9-NEXT:    v_sub_u16_e32 v1, v1, v2432; GFX9-NEXT:    global_store_short v0, v1, s[0:1]433; GFX9-NEXT:    s_endpgm434;435; GFX12-TRUE16-LABEL: test_sub_i16:436; GFX12-TRUE16:       ; %bb.0:437; GFX12-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24438; GFX12-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0439; GFX12-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)440; GFX12-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v0441; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0442; GFX12-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3] scope:SCOPE_SYS443; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0444; GFX12-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[2:3] offset:2 scope:SCOPE_SYS445; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0446; GFX12-TRUE16-NEXT:    v_mov_b32_e32 v1, 0447; GFX12-TRUE16-NEXT:    v_sub_nc_u16 v0.l, v0.l, v0.h448; GFX12-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]449; GFX12-TRUE16-NEXT:    s_endpgm450;451; GFX12-FAKE16-LABEL: test_sub_i16:452; GFX12-FAKE16:       ; %bb.0:453; GFX12-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24454; GFX12-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0455; GFX12-FAKE16-NEXT:    v_mov_b32_e32 v2, 0456; GFX12-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)457; GFX12-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v0458; GFX12-FAKE16-NEXT:    s_wait_kmcnt 0x0459; GFX12-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] scope:SCOPE_SYS460; GFX12-FAKE16-NEXT:    s_wait_loadcnt 0x0461; GFX12-FAKE16-NEXT:    global_load_u16 v0, v0, s[2:3] offset:2 scope:SCOPE_SYS462; GFX12-FAKE16-NEXT:    s_wait_loadcnt 0x0463; GFX12-FAKE16-NEXT:    v_sub_nc_u16 v0, v1, v0464; GFX12-FAKE16-NEXT:    global_store_b16 v2, v0, s[0:1]465; GFX12-FAKE16-NEXT:    s_endpgm466  %tid = call i32 @llvm.amdgcn.workitem.id.x()467  %gep = getelementptr i16, ptr addrspace(1) %in, i32 %tid468  %b_ptr = getelementptr i16, ptr addrspace(1) %gep, i32 1469  %a = load volatile i16, ptr addrspace(1) %gep470  %b = load volatile i16, ptr addrspace(1) %b_ptr471  %result = sub i16 %a, %b472  store i16 %result, ptr addrspace(1) %out473  ret void474}475 476define amdgpu_kernel void @test_sub_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %in) {477; GFX6-LABEL: test_sub_v2i16:478; GFX6:       ; %bb.0:479; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9480; GFX6-NEXT:    s_mov_b32 s7, 0xf000481; GFX6-NEXT:    s_mov_b32 s10, 0482; GFX6-NEXT:    s_mov_b32 s11, s7483; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0484; GFX6-NEXT:    s_waitcnt lgkmcnt(0)485; GFX6-NEXT:    s_mov_b64 s[8:9], s[2:3]486; GFX6-NEXT:    v_mov_b32_e32 v1, 0487; GFX6-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[8:11], 0 addr64488; GFX6-NEXT:    s_mov_b32 s6, -1489; GFX6-NEXT:    s_mov_b32 s4, s0490; GFX6-NEXT:    s_mov_b32 s5, s1491; GFX6-NEXT:    s_waitcnt vmcnt(0)492; GFX6-NEXT:    v_lshrrev_b32_e32 v2, 16, v0493; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v1494; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1495; GFX6-NEXT:    v_sub_i32_e32 v1, vcc, v2, v3496; GFX6-NEXT:    v_and_b32_e32 v0, 0xffff, v0497; GFX6-NEXT:    v_lshlrev_b32_e32 v1, 16, v1498; GFX6-NEXT:    v_or_b32_e32 v0, v0, v1499; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0500; GFX6-NEXT:    s_endpgm501;502; GFX8-LABEL: test_sub_v2i16:503; GFX8:       ; %bb.0:504; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24505; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 2, v0506; GFX8-NEXT:    s_waitcnt lgkmcnt(0)507; GFX8-NEXT:    v_mov_b32_e32 v1, s3508; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v0509; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc510; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]511; GFX8-NEXT:    v_mov_b32_e32 v2, s0512; GFX8-NEXT:    v_mov_b32_e32 v3, s1513; GFX8-NEXT:    s_waitcnt vmcnt(0)514; GFX8-NEXT:    v_sub_u16_e32 v4, v0, v1515; GFX8-NEXT:    v_sub_u16_sdwa v0, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1516; GFX8-NEXT:    v_or_b32_e32 v0, v4, v0517; GFX8-NEXT:    flat_store_dword v[2:3], v0518; GFX8-NEXT:    s_endpgm519;520; GFX9-LABEL: test_sub_v2i16:521; GFX9:       ; %bb.0:522; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24523; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0524; GFX9-NEXT:    v_mov_b32_e32 v2, 0525; GFX9-NEXT:    s_waitcnt lgkmcnt(0)526; GFX9-NEXT:    global_load_dwordx2 v[0:1], v0, s[2:3]527; GFX9-NEXT:    s_waitcnt vmcnt(0)528; GFX9-NEXT:    v_pk_sub_i16 v0, v0, v1529; GFX9-NEXT:    global_store_dword v2, v0, s[0:1]530; GFX9-NEXT:    s_endpgm531;532; GFX12-LABEL: test_sub_v2i16:533; GFX12:       ; %bb.0:534; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24535; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0536; GFX12-NEXT:    v_mov_b32_e32 v2, 0537; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)538; GFX12-NEXT:    v_lshlrev_b32_e32 v0, 2, v0539; GFX12-NEXT:    s_wait_kmcnt 0x0540; GFX12-NEXT:    global_load_b64 v[0:1], v0, s[2:3]541; GFX12-NEXT:    s_wait_loadcnt 0x0542; GFX12-NEXT:    v_pk_sub_i16 v0, v0, v1543; GFX12-NEXT:    global_store_b32 v2, v0, s[0:1]544; GFX12-NEXT:    s_endpgm545  %tid = call i32 @llvm.amdgcn.workitem.id.x()546  %gep = getelementptr <2 x i16>, ptr addrspace(1) %in, i32 %tid547  %b_ptr = getelementptr <2 x i16>, ptr addrspace(1) %gep, i16 1548  %a = load <2 x i16>, ptr addrspace(1) %gep549  %b = load <2 x i16>, ptr addrspace(1) %b_ptr550  %result = sub <2 x i16> %a, %b551  store <2 x i16> %result, ptr addrspace(1) %out552  ret void553}554 555define amdgpu_kernel void @test_sub_v4i16(ptr addrspace(1) %out, ptr addrspace(1) %in) {556; GFX6-LABEL: test_sub_v4i16:557; GFX6:       ; %bb.0:558; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9559; GFX6-NEXT:    s_mov_b32 s7, 0xf000560; GFX6-NEXT:    s_mov_b32 s10, 0561; GFX6-NEXT:    s_mov_b32 s11, s7562; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 3, v0563; GFX6-NEXT:    s_waitcnt lgkmcnt(0)564; GFX6-NEXT:    s_mov_b64 s[8:9], s[2:3]565; GFX6-NEXT:    v_mov_b32_e32 v1, 0566; GFX6-NEXT:    buffer_load_dwordx4 v[0:3], v[0:1], s[8:11], 0 addr64567; GFX6-NEXT:    s_mov_b32 s6, -1568; GFX6-NEXT:    s_mov_b32 s4, s0569; GFX6-NEXT:    s_mov_b32 s5, s1570; GFX6-NEXT:    s_waitcnt vmcnt(0)571; GFX6-NEXT:    v_lshrrev_b32_e32 v4, 16, v0572; GFX6-NEXT:    v_lshrrev_b32_e32 v5, 16, v1573; GFX6-NEXT:    v_lshrrev_b32_e32 v6, 16, v2574; GFX6-NEXT:    v_lshrrev_b32_e32 v7, 16, v3575; GFX6-NEXT:    v_sub_i32_e32 v1, vcc, v1, v3576; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v2577; GFX6-NEXT:    v_sub_i32_e32 v2, vcc, v5, v7578; GFX6-NEXT:    v_sub_i32_e32 v3, vcc, v4, v6579; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff, v1580; GFX6-NEXT:    v_and_b32_e32 v0, 0xffff, v0581; GFX6-NEXT:    v_lshlrev_b32_e32 v2, 16, v2582; GFX6-NEXT:    v_lshlrev_b32_e32 v3, 16, v3583; GFX6-NEXT:    v_or_b32_e32 v1, v1, v2584; GFX6-NEXT:    v_or_b32_e32 v0, v0, v3585; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0586; GFX6-NEXT:    s_endpgm587;588; GFX8-LABEL: test_sub_v4i16:589; GFX8:       ; %bb.0:590; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24591; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 3, v0592; GFX8-NEXT:    s_waitcnt lgkmcnt(0)593; GFX8-NEXT:    v_mov_b32_e32 v1, s3594; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v0595; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc596; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]597; GFX8-NEXT:    v_mov_b32_e32 v4, s0598; GFX8-NEXT:    v_mov_b32_e32 v5, s1599; GFX8-NEXT:    s_waitcnt vmcnt(0)600; GFX8-NEXT:    v_sub_u16_e32 v6, v1, v3601; GFX8-NEXT:    v_sub_u16_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1602; GFX8-NEXT:    v_sub_u16_e32 v3, v0, v2603; GFX8-NEXT:    v_sub_u16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1604; GFX8-NEXT:    v_or_b32_e32 v1, v6, v1605; GFX8-NEXT:    v_or_b32_e32 v0, v3, v0606; GFX8-NEXT:    flat_store_dwordx2 v[4:5], v[0:1]607; GFX8-NEXT:    s_endpgm608;609; GFX9-LABEL: test_sub_v4i16:610; GFX9:       ; %bb.0:611; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24612; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 3, v0613; GFX9-NEXT:    v_mov_b32_e32 v4, 0614; GFX9-NEXT:    s_waitcnt lgkmcnt(0)615; GFX9-NEXT:    global_load_dwordx4 v[0:3], v0, s[2:3]616; GFX9-NEXT:    s_waitcnt vmcnt(0)617; GFX9-NEXT:    v_pk_sub_i16 v1, v1, v3618; GFX9-NEXT:    v_pk_sub_i16 v0, v0, v2619; GFX9-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1]620; GFX9-NEXT:    s_endpgm621;622; GFX12-LABEL: test_sub_v4i16:623; GFX12:       ; %bb.0:624; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24625; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0626; GFX12-NEXT:    v_mov_b32_e32 v4, 0627; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)628; GFX12-NEXT:    v_lshlrev_b32_e32 v0, 3, v0629; GFX12-NEXT:    s_wait_kmcnt 0x0630; GFX12-NEXT:    global_load_b128 v[0:3], v0, s[2:3]631; GFX12-NEXT:    s_wait_loadcnt 0x0632; GFX12-NEXT:    v_pk_sub_i16 v1, v1, v3633; GFX12-NEXT:    v_pk_sub_i16 v0, v0, v2634; GFX12-NEXT:    global_store_b64 v4, v[0:1], s[0:1]635; GFX12-NEXT:    s_endpgm636  %tid = call i32 @llvm.amdgcn.workitem.id.x()637  %gep = getelementptr <4 x i16>, ptr addrspace(1) %in, i32 %tid638  %b_ptr = getelementptr <4 x i16>, ptr addrspace(1) %gep, i16 1639  %a = load <4 x i16>, ptr addrspace(1) %gep640  %b = load <4 x i16>, ptr addrspace(1) %b_ptr641  %result = sub <4 x i16> %a, %b642  store <4 x i16> %result, ptr addrspace(1) %out643  ret void644}645 646define amdgpu_kernel void @s_sub_i64(ptr addrspace(1) noalias %out, i64 %a, i64 %b) nounwind {647; GFX6-LABEL: s_sub_i64:648; GFX6:       ; %bb.0:649; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0xb650; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x9651; GFX6-NEXT:    s_mov_b32 s7, 0xf000652; GFX6-NEXT:    s_mov_b32 s6, -1653; GFX6-NEXT:    s_waitcnt lgkmcnt(0)654; GFX6-NEXT:    s_sub_u32 s0, s0, s2655; GFX6-NEXT:    s_subb_u32 s1, s1, s3656; GFX6-NEXT:    v_mov_b32_e32 v0, s0657; GFX6-NEXT:    v_mov_b32_e32 v1, s1658; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0659; GFX6-NEXT:    s_endpgm660;661; GFX8-LABEL: s_sub_i64:662; GFX8:       ; %bb.0:663; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2c664; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x24665; GFX8-NEXT:    s_waitcnt lgkmcnt(0)666; GFX8-NEXT:    s_sub_u32 s0, s0, s2667; GFX8-NEXT:    s_subb_u32 s1, s1, s3668; GFX8-NEXT:    v_mov_b32_e32 v0, s4669; GFX8-NEXT:    v_mov_b32_e32 v3, s1670; GFX8-NEXT:    v_mov_b32_e32 v1, s5671; GFX8-NEXT:    v_mov_b32_e32 v2, s0672; GFX8-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]673; GFX8-NEXT:    s_endpgm674;675; GFX9-LABEL: s_sub_i64:676; GFX9:       ; %bb.0:677; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2c678; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24679; GFX9-NEXT:    v_mov_b32_e32 v2, 0680; GFX9-NEXT:    s_waitcnt lgkmcnt(0)681; GFX9-NEXT:    s_sub_u32 s0, s0, s2682; GFX9-NEXT:    s_subb_u32 s1, s1, s3683; GFX9-NEXT:    v_mov_b32_e32 v0, s0684; GFX9-NEXT:    v_mov_b32_e32 v1, s1685; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[6:7]686; GFX9-NEXT:    s_endpgm687;688; GFX12-LABEL: s_sub_i64:689; GFX12:       ; %bb.0:690; GFX12-NEXT:    s_clause 0x1691; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2c692; GFX12-NEXT:    s_load_b64 s[4:5], s[4:5], 0x24693; GFX12-NEXT:    s_wait_kmcnt 0x0694; GFX12-NEXT:    s_sub_nc_u64 s[0:1], s[0:1], s[2:3]695; GFX12-NEXT:    v_mov_b32_e32 v2, 0696; GFX12-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1697; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[4:5]698; GFX12-NEXT:    s_endpgm699  %result = sub i64 %a, %b700  store i64 %result, ptr addrspace(1) %out, align 8701  ret void702}703 704define amdgpu_kernel void @v_sub_i64(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %inA, ptr addrspace(1) noalias %inB) nounwind {705; GFX6-LABEL: v_sub_i64:706; GFX6:       ; %bb.0:707; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9708; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd709; GFX6-NEXT:    s_mov_b32 s11, 0xf000710; GFX6-NEXT:    s_mov_b32 s14, 0711; GFX6-NEXT:    s_mov_b32 s15, s11712; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 3, v0713; GFX6-NEXT:    v_mov_b32_e32 v1, 0714; GFX6-NEXT:    s_mov_b64 s[6:7], s[14:15]715; GFX6-NEXT:    s_waitcnt lgkmcnt(0)716; GFX6-NEXT:    s_mov_b64 s[12:13], s[2:3]717; GFX6-NEXT:    buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64718; GFX6-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[12:15], 0 addr64719; GFX6-NEXT:    s_mov_b32 s10, -1720; GFX6-NEXT:    s_mov_b32 s8, s0721; GFX6-NEXT:    s_mov_b32 s9, s1722; GFX6-NEXT:    s_waitcnt vmcnt(0)723; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v2724; GFX6-NEXT:    v_subb_u32_e32 v1, vcc, v1, v3, vcc725; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[8:11], 0726; GFX6-NEXT:    s_endpgm727;728; GFX8-LABEL: v_sub_i64:729; GFX8:       ; %bb.0:730; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24731; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34732; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 3, v0733; GFX8-NEXT:    s_waitcnt lgkmcnt(0)734; GFX8-NEXT:    v_mov_b32_e32 v1, s3735; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v2736; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc737; GFX8-NEXT:    v_mov_b32_e32 v3, s5738; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s4, v2739; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc740; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]741; GFX8-NEXT:    flat_load_dwordx2 v[2:3], v[2:3]742; GFX8-NEXT:    s_waitcnt vmcnt(0)743; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v0, v2744; GFX8-NEXT:    v_subb_u32_e32 v1, vcc, v1, v3, vcc745; GFX8-NEXT:    v_mov_b32_e32 v3, s1746; GFX8-NEXT:    v_mov_b32_e32 v2, s0747; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]748; GFX8-NEXT:    s_endpgm749;750; GFX9-LABEL: v_sub_i64:751; GFX9:       ; %bb.0:752; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24753; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34754; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 3, v0755; GFX9-NEXT:    s_waitcnt lgkmcnt(0)756; GFX9-NEXT:    global_load_dwordx2 v[0:1], v4, s[2:3]757; GFX9-NEXT:    global_load_dwordx2 v[2:3], v4, s[6:7]758; GFX9-NEXT:    v_mov_b32_e32 v4, 0759; GFX9-NEXT:    s_waitcnt vmcnt(0)760; GFX9-NEXT:    v_sub_co_u32_e32 v0, vcc, v0, v2761; GFX9-NEXT:    v_subb_co_u32_e32 v1, vcc, v1, v3, vcc762; GFX9-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1]763; GFX9-NEXT:    s_endpgm764;765; GFX12-LABEL: v_sub_i64:766; GFX12:       ; %bb.0:767; GFX12-NEXT:    s_clause 0x1768; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24769; GFX12-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34770; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0771; GFX12-NEXT:    v_mov_b32_e32 v4, 0772; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)773; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 3, v0774; GFX12-NEXT:    s_wait_kmcnt 0x0775; GFX12-NEXT:    s_clause 0x1776; GFX12-NEXT:    global_load_b64 v[0:1], v2, s[2:3]777; GFX12-NEXT:    global_load_b64 v[2:3], v2, s[4:5]778; GFX12-NEXT:    s_wait_loadcnt 0x0779; GFX12-NEXT:    v_sub_co_u32 v0, vcc_lo, v0, v2780; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)781; GFX12-NEXT:    v_sub_co_ci_u32_e64 v1, null, v1, v3, vcc_lo782; GFX12-NEXT:    global_store_b64 v4, v[0:1], s[0:1]783; GFX12-NEXT:    s_endpgm784  %tid = call i32 @llvm.amdgcn.workitem.id.x() readnone785  %a_ptr = getelementptr i64, ptr addrspace(1) %inA, i32 %tid786  %b_ptr = getelementptr i64, ptr addrspace(1) %inB, i32 %tid787  %a = load i64, ptr addrspace(1) %a_ptr788  %b = load i64, ptr addrspace(1) %b_ptr789  %result = sub i64 %a, %b790  store i64 %result, ptr addrspace(1) %out, align 8791  ret void792}793 794define amdgpu_kernel void @v_test_sub_v2i64(ptr addrspace(1) %out, ptr addrspace(1) noalias %inA, ptr addrspace(1) noalias %inB) {795; GFX6-LABEL: v_test_sub_v2i64:796; GFX6:       ; %bb.0:797; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9798; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd799; GFX6-NEXT:    s_mov_b32 s11, 0xf000800; GFX6-NEXT:    s_mov_b32 s14, 0801; GFX6-NEXT:    s_mov_b32 s15, s11802; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 4, v0803; GFX6-NEXT:    v_mov_b32_e32 v5, 0804; GFX6-NEXT:    s_mov_b64 s[6:7], s[14:15]805; GFX6-NEXT:    s_waitcnt lgkmcnt(0)806; GFX6-NEXT:    s_mov_b64 s[12:13], s[2:3]807; GFX6-NEXT:    buffer_load_dwordx4 v[0:3], v[4:5], s[4:7], 0 addr64808; GFX6-NEXT:    buffer_load_dwordx4 v[4:7], v[4:5], s[12:15], 0 addr64809; GFX6-NEXT:    s_mov_b32 s10, -1810; GFX6-NEXT:    s_mov_b32 s8, s0811; GFX6-NEXT:    s_mov_b32 s9, s1812; GFX6-NEXT:    s_waitcnt vmcnt(0)813; GFX6-NEXT:    v_sub_i32_e32 v2, vcc, v6, v2814; GFX6-NEXT:    v_subb_u32_e32 v3, vcc, v7, v3, vcc815; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v4, v0816; GFX6-NEXT:    v_subb_u32_e32 v1, vcc, v5, v1, vcc817; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0818; GFX6-NEXT:    s_endpgm819;820; GFX8-LABEL: v_test_sub_v2i64:821; GFX8:       ; %bb.0:822; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24823; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34824; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 4, v0825; GFX8-NEXT:    s_waitcnt lgkmcnt(0)826; GFX8-NEXT:    v_mov_b32_e32 v1, s3827; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v2828; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc829; GFX8-NEXT:    v_mov_b32_e32 v3, s5830; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v2831; GFX8-NEXT:    v_addc_u32_e32 v5, vcc, 0, v3, vcc832; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]833; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]834; GFX8-NEXT:    s_waitcnt vmcnt(0)835; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, v2, v6836; GFX8-NEXT:    v_subb_u32_e32 v3, vcc, v3, v7, vcc837; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v0, v4838; GFX8-NEXT:    v_subb_u32_e32 v1, vcc, v1, v5, vcc839; GFX8-NEXT:    v_mov_b32_e32 v5, s1840; GFX8-NEXT:    v_mov_b32_e32 v4, s0841; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]842; GFX8-NEXT:    s_endpgm843;844; GFX9-LABEL: v_test_sub_v2i64:845; GFX9:       ; %bb.0:846; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24847; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34848; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 4, v0849; GFX9-NEXT:    s_waitcnt lgkmcnt(0)850; GFX9-NEXT:    global_load_dwordx4 v[0:3], v8, s[2:3]851; GFX9-NEXT:    global_load_dwordx4 v[4:7], v8, s[6:7]852; GFX9-NEXT:    v_mov_b32_e32 v8, 0853; GFX9-NEXT:    s_waitcnt vmcnt(0)854; GFX9-NEXT:    v_sub_co_u32_e32 v2, vcc, v2, v6855; GFX9-NEXT:    v_subb_co_u32_e32 v3, vcc, v3, v7, vcc856; GFX9-NEXT:    v_sub_co_u32_e32 v0, vcc, v0, v4857; GFX9-NEXT:    v_subb_co_u32_e32 v1, vcc, v1, v5, vcc858; GFX9-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1]859; GFX9-NEXT:    s_endpgm860;861; GFX12-LABEL: v_test_sub_v2i64:862; GFX12:       ; %bb.0:863; GFX12-NEXT:    s_clause 0x1864; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24865; GFX12-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34866; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0867; GFX12-NEXT:    v_mov_b32_e32 v8, 0868; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)869; GFX12-NEXT:    v_lshlrev_b32_e32 v4, 4, v0870; GFX12-NEXT:    s_wait_kmcnt 0x0871; GFX12-NEXT:    s_clause 0x1872; GFX12-NEXT:    global_load_b128 v[0:3], v4, s[2:3]873; GFX12-NEXT:    global_load_b128 v[4:7], v4, s[4:5]874; GFX12-NEXT:    s_wait_loadcnt 0x0875; GFX12-NEXT:    v_sub_co_u32 v2, vcc_lo, v2, v6876; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)877; GFX12-NEXT:    v_sub_co_ci_u32_e64 v3, null, v3, v7, vcc_lo878; GFX12-NEXT:    v_sub_co_u32 v0, vcc_lo, v0, v4879; GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)880; GFX12-NEXT:    v_sub_co_ci_u32_e64 v1, null, v1, v5, vcc_lo881; GFX12-NEXT:    global_store_b128 v8, v[0:3], s[0:1]882; GFX12-NEXT:    s_endpgm883  %tid = call i32 @llvm.amdgcn.workitem.id.x() readnone884  %a_ptr = getelementptr <2 x i64>, ptr addrspace(1) %inA, i32 %tid885  %b_ptr = getelementptr <2 x i64>, ptr addrspace(1) %inB, i32 %tid886  %a = load <2 x i64>, ptr addrspace(1) %a_ptr887  %b = load <2 x i64>, ptr addrspace(1) %b_ptr888  %result = sub <2 x i64> %a, %b889  store <2 x i64> %result, ptr addrspace(1) %out890  ret void891}892 893define amdgpu_kernel void @v_test_sub_v4i64(ptr addrspace(1) %out, ptr addrspace(1) noalias %inA, ptr addrspace(1) noalias %inB) {894; GFX6-LABEL: v_test_sub_v4i64:895; GFX6:       ; %bb.0:896; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9897; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd898; GFX6-NEXT:    s_mov_b32 s11, 0xf000899; GFX6-NEXT:    s_mov_b32 s14, 0900; GFX6-NEXT:    s_mov_b32 s15, s11901; GFX6-NEXT:    s_waitcnt lgkmcnt(0)902; GFX6-NEXT:    s_mov_b64 s[12:13], s[2:3]903; GFX6-NEXT:    v_lshlrev_b32_e32 v12, 5, v0904; GFX6-NEXT:    v_mov_b32_e32 v13, 0905; GFX6-NEXT:    s_mov_b64 s[6:7], s[14:15]906; GFX6-NEXT:    buffer_load_dwordx4 v[0:3], v[12:13], s[12:15], 0 addr64907; GFX6-NEXT:    buffer_load_dwordx4 v[4:7], v[12:13], s[4:7], 0 addr64908; GFX6-NEXT:    buffer_load_dwordx4 v[8:11], v[12:13], s[4:7], 0 addr64 offset:16909; GFX6-NEXT:    buffer_load_dwordx4 v[12:15], v[12:13], s[12:15], 0 addr64 offset:16910; GFX6-NEXT:    s_mov_b32 s10, -1911; GFX6-NEXT:    s_mov_b32 s8, s0912; GFX6-NEXT:    s_mov_b32 s9, s1913; GFX6-NEXT:    s_waitcnt vmcnt(2)914; GFX6-NEXT:    v_sub_i32_e32 v2, vcc, v2, v6915; GFX6-NEXT:    v_subb_u32_e32 v3, vcc, v3, v7, vcc916; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v4917; GFX6-NEXT:    v_subb_u32_e32 v1, vcc, v1, v5, vcc918; GFX6-NEXT:    s_waitcnt vmcnt(0)919; GFX6-NEXT:    v_sub_i32_e32 v6, vcc, v14, v10920; GFX6-NEXT:    v_subb_u32_e32 v7, vcc, v15, v11, vcc921; GFX6-NEXT:    v_sub_i32_e32 v4, vcc, v12, v8922; GFX6-NEXT:    v_subb_u32_e32 v5, vcc, v13, v9, vcc923; GFX6-NEXT:    buffer_store_dwordx4 v[4:7], off, s[8:11], 0 offset:16924; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0925; GFX6-NEXT:    s_endpgm926;927; GFX8-LABEL: v_test_sub_v4i64:928; GFX8:       ; %bb.0:929; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24930; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34931; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 5, v0932; GFX8-NEXT:    s_waitcnt lgkmcnt(0)933; GFX8-NEXT:    v_mov_b32_e32 v1, s3934; GFX8-NEXT:    v_add_u32_e32 v8, vcc, s2, v0935; GFX8-NEXT:    v_addc_u32_e32 v9, vcc, 0, v1, vcc936; GFX8-NEXT:    v_mov_b32_e32 v1, s5937; GFX8-NEXT:    v_add_u32_e32 v12, vcc, s4, v0938; GFX8-NEXT:    v_addc_u32_e32 v13, vcc, 0, v1, vcc939; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[8:9]940; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[12:13]941; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 16, v8942; GFX8-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc943; GFX8-NEXT:    v_add_u32_e32 v12, vcc, 16, v12944; GFX8-NEXT:    v_addc_u32_e32 v13, vcc, 0, v13, vcc945; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[8:9]946; GFX8-NEXT:    flat_load_dwordx4 v[12:15], v[12:13]947; GFX8-NEXT:    v_mov_b32_e32 v17, s1948; GFX8-NEXT:    v_mov_b32_e32 v16, s0949; GFX8-NEXT:    s_add_u32 s0, s0, 16950; GFX8-NEXT:    s_addc_u32 s1, s1, 0951; GFX8-NEXT:    s_waitcnt vmcnt(2)952; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, v2, v6953; GFX8-NEXT:    v_subb_u32_e32 v3, vcc, v3, v7, vcc954; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v0, v4955; GFX8-NEXT:    v_subb_u32_e32 v1, vcc, v1, v5, vcc956; GFX8-NEXT:    flat_store_dwordx4 v[16:17], v[0:3]957; GFX8-NEXT:    s_waitcnt vmcnt(1)958; GFX8-NEXT:    v_sub_u32_e32 v6, vcc, v10, v14959; GFX8-NEXT:    v_subb_u32_e32 v7, vcc, v11, v15, vcc960; GFX8-NEXT:    v_sub_u32_e32 v4, vcc, v8, v12961; GFX8-NEXT:    v_mov_b32_e32 v0, s0962; GFX8-NEXT:    v_subb_u32_e32 v5, vcc, v9, v13, vcc963; GFX8-NEXT:    v_mov_b32_e32 v1, s1964; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]965; GFX8-NEXT:    s_endpgm966;967; GFX9-LABEL: v_test_sub_v4i64:968; GFX9:       ; %bb.0:969; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34970; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24971; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 5, v0972; GFX9-NEXT:    s_waitcnt lgkmcnt(0)973; GFX9-NEXT:    global_load_dwordx4 v[0:3], v16, s[6:7]974; GFX9-NEXT:    global_load_dwordx4 v[4:7], v16, s[2:3]975; GFX9-NEXT:    global_load_dwordx4 v[8:11], v16, s[2:3] offset:16976; GFX9-NEXT:    global_load_dwordx4 v[12:15], v16, s[6:7] offset:16977; GFX9-NEXT:    v_mov_b32_e32 v16, 0978; GFX9-NEXT:    s_waitcnt vmcnt(2)979; GFX9-NEXT:    v_sub_co_u32_e32 v2, vcc, v6, v2980; GFX9-NEXT:    v_subb_co_u32_e32 v3, vcc, v7, v3, vcc981; GFX9-NEXT:    v_sub_co_u32_e32 v0, vcc, v4, v0982; GFX9-NEXT:    v_subb_co_u32_e32 v1, vcc, v5, v1, vcc983; GFX9-NEXT:    s_waitcnt vmcnt(0)984; GFX9-NEXT:    v_sub_co_u32_e32 v6, vcc, v10, v14985; GFX9-NEXT:    v_subb_co_u32_e32 v7, vcc, v11, v15, vcc986; GFX9-NEXT:    v_sub_co_u32_e32 v4, vcc, v8, v12987; GFX9-NEXT:    v_subb_co_u32_e32 v5, vcc, v9, v13, vcc988; GFX9-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16989; GFX9-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]990; GFX9-NEXT:    s_endpgm991;992; GFX12-LABEL: v_test_sub_v4i64:993; GFX12:       ; %bb.0:994; GFX12-NEXT:    s_clause 0x1995; GFX12-NEXT:    s_load_b64 s[6:7], s[4:5], 0x34996; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24997; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0998; GFX12-NEXT:    v_mov_b32_e32 v16, 0999; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)1000; GFX12-NEXT:    v_lshlrev_b32_e32 v12, 5, v01001; GFX12-NEXT:    s_wait_kmcnt 0x01002; GFX12-NEXT:    s_clause 0x31003; GFX12-NEXT:    global_load_b128 v[0:3], v12, s[6:7]1004; GFX12-NEXT:    global_load_b128 v[4:7], v12, s[2:3]1005; GFX12-NEXT:    global_load_b128 v[8:11], v12, s[2:3] offset:161006; GFX12-NEXT:    global_load_b128 v[12:15], v12, s[6:7] offset:161007; GFX12-NEXT:    s_wait_loadcnt 0x21008; GFX12-NEXT:    v_sub_co_u32 v2, vcc_lo, v6, v21009; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)1010; GFX12-NEXT:    v_sub_co_ci_u32_e64 v3, null, v7, v3, vcc_lo1011; GFX12-NEXT:    s_wait_loadcnt 0x01012; GFX12-NEXT:    v_sub_co_u32 v10, vcc_lo, v10, v141013; GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)1014; GFX12-NEXT:    v_sub_co_ci_u32_e64 v11, null, v11, v15, vcc_lo1015; GFX12-NEXT:    v_sub_co_u32 v8, vcc_lo, v8, v121016; GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)1017; GFX12-NEXT:    v_sub_co_ci_u32_e64 v9, null, v9, v13, vcc_lo1018; GFX12-NEXT:    v_sub_co_u32 v0, vcc_lo, v4, v01019; GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)1020; GFX12-NEXT:    v_sub_co_ci_u32_e64 v1, null, v5, v1, vcc_lo1021; GFX12-NEXT:    s_clause 0x11022; GFX12-NEXT:    global_store_b128 v16, v[8:11], s[0:1] offset:161023; GFX12-NEXT:    global_store_b128 v16, v[0:3], s[0:1]1024; GFX12-NEXT:    s_endpgm1025  %tid = call i32 @llvm.amdgcn.workitem.id.x() readnone1026  %a_ptr = getelementptr <4 x i64>, ptr addrspace(1) %inA, i32 %tid1027  %b_ptr = getelementptr <4 x i64>, ptr addrspace(1) %inB, i32 %tid1028  %a = load <4 x i64>, ptr addrspace(1) %a_ptr1029  %b = load <4 x i64>, ptr addrspace(1) %b_ptr1030  %result = sub <4 x i64> %a, %b1031  store <4 x i64> %result, ptr addrspace(1) %out1032  ret void1033}1034 1035; Make sure the VOP3 form of sub is initially selected. Otherwise pair1036; of opies from/to VCC would be necessary1037 1038define amdgpu_ps void @sub_select_vop3(i32 inreg %s, i32 %v) {1039; GFX6-LABEL: sub_select_vop3:1040; GFX6:       ; %bb.0:1041; GFX6-NEXT:    v_subrev_i32_e64 v0, s[0:1], s0, v01042; GFX6-NEXT:    s_mov_b32 m0, -11043; GFX6-NEXT:    ;;#ASMSTART1044; GFX6-NEXT:    ; def vcc1045; GFX6-NEXT:    ;;#ASMEND1046; GFX6-NEXT:    ds_write_b32 v0, v01047; GFX6-NEXT:    ;;#ASMSTART1048; GFX6-NEXT:    ; use vcc1049; GFX6-NEXT:    ;;#ASMEND1050; GFX6-NEXT:    s_endpgm1051;1052; GFX8-LABEL: sub_select_vop3:1053; GFX8:       ; %bb.0:1054; GFX8-NEXT:    v_subrev_u32_e64 v0, s[0:1], s0, v01055; GFX8-NEXT:    s_mov_b32 m0, -11056; GFX8-NEXT:    ;;#ASMSTART1057; GFX8-NEXT:    ; def vcc1058; GFX8-NEXT:    ;;#ASMEND1059; GFX8-NEXT:    ds_write_b32 v0, v01060; GFX8-NEXT:    ;;#ASMSTART1061; GFX8-NEXT:    ; use vcc1062; GFX8-NEXT:    ;;#ASMEND1063; GFX8-NEXT:    s_endpgm1064;1065; GFX9-LABEL: sub_select_vop3:1066; GFX9:       ; %bb.0:1067; GFX9-NEXT:    v_subrev_u32_e32 v0, s0, v01068; GFX9-NEXT:    ;;#ASMSTART1069; GFX9-NEXT:    ; def vcc1070; GFX9-NEXT:    ;;#ASMEND1071; GFX9-NEXT:    ds_write_b32 v0, v01072; GFX9-NEXT:    ;;#ASMSTART1073; GFX9-NEXT:    ; use vcc1074; GFX9-NEXT:    ;;#ASMEND1075; GFX9-NEXT:    s_endpgm1076;1077; GFX12-LABEL: sub_select_vop3:1078; GFX12:       ; %bb.0:1079; GFX12-NEXT:    v_subrev_nc_u32_e32 v0, s0, v01080; GFX12-NEXT:    ;;#ASMSTART1081; GFX12-NEXT:    ; def vcc1082; GFX12-NEXT:    ;;#ASMEND1083; GFX12-NEXT:    ds_store_b32 v0, v01084; GFX12-NEXT:    ;;#ASMSTART1085; GFX12-NEXT:    ; use vcc1086; GFX12-NEXT:    ;;#ASMEND1087; GFX12-NEXT:    s_endpgm1088  %vcc = call i64 asm sideeffect "; def vcc", "={vcc}"()1089  %sub = sub i32 %v, %s1090  store i32 %sub, ptr addrspace(3) poison1091  call void asm sideeffect "; use vcc", "{vcc}"(i64 %vcc)1092  ret void1093}1094