brintos

brintos / llvm-project-archived public Read only

0
0
Text · 187.7 KiB · b538d60 Raw
4413 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn < %s | FileCheck --check-prefixes=SI,SI-SDAG %s3; RUN: llc -global-isel=1 -mtriple=amdgcn < %s | FileCheck --check-prefixes=SI,SI-GISEL %s4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck --check-prefixes=VI,VI-SDAG %s5; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck --check-prefixes=VI,VI-GISEL %s6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck --check-prefixes=GFX9,GFX9-SDAG %s7; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck --check-prefixes=GFX9,GFX9-GISEL %s8; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck --check-prefixes=GFX10,GFX10-SDAG %s9; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck --check-prefixes=GFX10,GFX10-GISEL %s10; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck --check-prefixes=GFX11,GFX11-SDAG,GFX11-SDAG-TRUE16 %s11; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck --check-prefixes=GFX11,GFX11-SDAG,GFX11-SDAG-FAKE16 %s12; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck --check-prefixes=GFX11,GFX11-GISEL,GFX11-GISEL-TRUE16 %s13; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck --check-prefixes=GFX11,GFX11-GISEL,GFX11-GISEL-FAKE16 %s14 15; Test that add/sub with a constant is swapped to sub/add with negated16; constant to minimize code size.17 18define amdgpu_kernel void @v_test_i32_x_sub_64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {19; SI-SDAG-LABEL: v_test_i32_x_sub_64:20; SI-SDAG:       ; %bb.0:21; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x922; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf00023; SI-SDAG-NEXT:    s_mov_b32 s6, 024; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v025; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 026; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)27; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]28; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr6429; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]30; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)31; SI-SDAG-NEXT:    v_subrev_i32_e32 v2, vcc, 64, v232; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr6433; SI-SDAG-NEXT:    s_endpgm34;35; SI-GISEL-LABEL: v_test_i32_x_sub_64:36; SI-GISEL:       ; %bb.0:37; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x938; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v039; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 040; SI-GISEL-NEXT:    s_mov_b32 s6, 041; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf00042; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)43; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]44; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr6445; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)46; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffc0, v247; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]48; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr6449; SI-GISEL-NEXT:    s_endpgm50;51; VI-SDAG-LABEL: v_test_i32_x_sub_64:52; VI-SDAG:       ; %bb.0:53; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2454; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v055; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)56; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s357; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v258; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc59; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]60; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s161; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v262; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc63; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)64; VI-SDAG-NEXT:    v_subrev_u32_e32 v2, vcc, 64, v365; VI-SDAG-NEXT:    flat_store_dword v[0:1], v266; VI-SDAG-NEXT:    s_endpgm67;68; VI-GISEL-LABEL: v_test_i32_x_sub_64:69; VI-GISEL:       ; %bb.0:70; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2471; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v072; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)73; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s274; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s375; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v276; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc77; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]78; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s079; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s180; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v281; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc82; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)83; VI-GISEL-NEXT:    v_add_u32_e32 v2, vcc, 0xffffffc0, v384; VI-GISEL-NEXT:    flat_store_dword v[0:1], v285; VI-GISEL-NEXT:    s_endpgm86;87; GFX9-SDAG-LABEL: v_test_i32_x_sub_64:88; GFX9-SDAG:       ; %bb.0:89; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2490; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v091; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)92; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]93; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)94; GFX9-SDAG-NEXT:    v_subrev_u32_e32 v1, 64, v195; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]96; GFX9-SDAG-NEXT:    s_endpgm97;98; GFX9-GISEL-LABEL: v_test_i32_x_sub_64:99; GFX9-GISEL:       ; %bb.0:100; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24101; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0102; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)103; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]104; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)105; GFX9-GISEL-NEXT:    v_add_u32_e32 v1, 0xffffffc0, v1106; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]107; GFX9-GISEL-NEXT:    s_endpgm108;109; GFX10-SDAG-LABEL: v_test_i32_x_sub_64:110; GFX10-SDAG:       ; %bb.0:111; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24112; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0113; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)114; GFX10-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]115; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)116; GFX10-SDAG-NEXT:    v_subrev_nc_u32_e32 v1, 64, v1117; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]118; GFX10-SDAG-NEXT:    s_endpgm119;120; GFX10-GISEL-LABEL: v_test_i32_x_sub_64:121; GFX10-GISEL:       ; %bb.0:122; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24123; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0124; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)125; GFX10-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]126; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)127; GFX10-GISEL-NEXT:    v_add_nc_u32_e32 v1, 0xffffffc0, v1128; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]129; GFX10-GISEL-NEXT:    s_endpgm130;131; GFX11-SDAG-LABEL: v_test_i32_x_sub_64:132; GFX11-SDAG:       ; %bb.0:133; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24134; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0135; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)136; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0137; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)138; GFX11-SDAG-NEXT:    global_load_b32 v1, v0, s[2:3]139; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)140; GFX11-SDAG-NEXT:    v_subrev_nc_u32_e32 v1, 64, v1141; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]142; GFX11-SDAG-NEXT:    s_endpgm143;144; GFX11-GISEL-LABEL: v_test_i32_x_sub_64:145; GFX11-GISEL:       ; %bb.0:146; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24147; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0148; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)149; GFX11-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0150; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)151; GFX11-GISEL-NEXT:    global_load_b32 v1, v0, s[2:3]152; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)153; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v1, 0xffffffc0, v1154; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[0:1]155; GFX11-GISEL-NEXT:    s_endpgm156  %tid = call i32 @llvm.amdgcn.workitem.id.x()157  %tid.ext = sext i32 %tid to i64158  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext159  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext160  %x = load i32, ptr addrspace(1) %gep161  %result = sub i32 %x, 64162  store i32 %result, ptr addrspace(1) %gep.out163  ret void164}165 166define amdgpu_kernel void @v_test_i32_x_sub_64_multi_use(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {167; SI-SDAG-LABEL: v_test_i32_x_sub_64_multi_use:168; SI-SDAG:       ; %bb.0:169; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9170; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000171; SI-SDAG-NEXT:    s_mov_b32 s6, 0172; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0173; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0174; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)175; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]176; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc177; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)178; SI-SDAG-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 glc179; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)180; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]181; SI-SDAG-NEXT:    v_subrev_i32_e32 v2, vcc, 64, v2182; SI-SDAG-NEXT:    v_subrev_i32_e32 v3, vcc, 64, v3183; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64184; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)185; SI-SDAG-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr64186; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)187; SI-SDAG-NEXT:    s_endpgm188;189; SI-GISEL-LABEL: v_test_i32_x_sub_64_multi_use:190; SI-GISEL:       ; %bb.0:191; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9192; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0193; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0194; SI-GISEL-NEXT:    s_mov_b32 s6, 0195; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000196; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)197; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]198; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc199; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)200; SI-GISEL-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 glc201; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)202; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]203; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffc0, v2204; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffffc0, v3205; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64206; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)207; SI-GISEL-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr64208; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)209; SI-GISEL-NEXT:    s_endpgm210;211; VI-SDAG-LABEL: v_test_i32_x_sub_64_multi_use:212; VI-SDAG:       ; %bb.0:213; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24214; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v0215; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)216; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s3217; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v2218; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc219; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1] glc220; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)221; VI-SDAG-NEXT:    flat_load_dword v4, v[0:1] glc222; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)223; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s1224; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v2225; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc226; VI-SDAG-NEXT:    v_subrev_u32_e32 v2, vcc, 64, v3227; VI-SDAG-NEXT:    v_subrev_u32_e32 v3, vcc, 64, v4228; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2229; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)230; VI-SDAG-NEXT:    flat_store_dword v[0:1], v3231; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)232; VI-SDAG-NEXT:    s_endpgm233;234; VI-GISEL-LABEL: v_test_i32_x_sub_64_multi_use:235; VI-GISEL:       ; %bb.0:236; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24237; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v0238; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)239; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s2240; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s3241; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2242; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc243; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1] glc244; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)245; VI-GISEL-NEXT:    flat_load_dword v4, v[0:1] glc246; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)247; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s0248; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s1249; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2250; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc251; VI-GISEL-NEXT:    v_add_u32_e32 v2, vcc, 0xffffffc0, v3252; VI-GISEL-NEXT:    v_add_u32_e32 v3, vcc, 0xffffffc0, v4253; VI-GISEL-NEXT:    flat_store_dword v[0:1], v2254; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)255; VI-GISEL-NEXT:    flat_store_dword v[0:1], v3256; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)257; VI-GISEL-NEXT:    s_endpgm258;259; GFX9-SDAG-LABEL: v_test_i32_x_sub_64_multi_use:260; GFX9-SDAG:       ; %bb.0:261; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24262; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0263; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)264; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3] glc265; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)266; GFX9-SDAG-NEXT:    global_load_dword v2, v0, s[2:3] glc267; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)268; GFX9-SDAG-NEXT:    v_subrev_u32_e32 v1, 64, v1269; GFX9-SDAG-NEXT:    v_subrev_u32_e32 v2, 64, v2270; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]271; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)272; GFX9-SDAG-NEXT:    global_store_dword v0, v2, s[0:1]273; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)274; GFX9-SDAG-NEXT:    s_endpgm275;276; GFX9-GISEL-LABEL: v_test_i32_x_sub_64_multi_use:277; GFX9-GISEL:       ; %bb.0:278; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24279; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0280; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)281; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3] glc282; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)283; GFX9-GISEL-NEXT:    global_load_dword v2, v0, s[2:3] glc284; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)285; GFX9-GISEL-NEXT:    v_add_u32_e32 v1, 0xffffffc0, v1286; GFX9-GISEL-NEXT:    v_add_u32_e32 v2, 0xffffffc0, v2287; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]288; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)289; GFX9-GISEL-NEXT:    global_store_dword v0, v2, s[0:1]290; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)291; GFX9-GISEL-NEXT:    s_endpgm292;293; GFX10-SDAG-LABEL: v_test_i32_x_sub_64_multi_use:294; GFX10-SDAG:       ; %bb.0:295; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24296; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0297; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)298; GFX10-SDAG-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc299; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)300; GFX10-SDAG-NEXT:    global_load_dword v2, v0, s[2:3] glc dlc301; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)302; GFX10-SDAG-NEXT:    v_subrev_nc_u32_e32 v1, 64, v1303; GFX10-SDAG-NEXT:    v_subrev_nc_u32_e32 v2, 64, v2304; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]305; GFX10-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0306; GFX10-SDAG-NEXT:    global_store_dword v0, v2, s[0:1]307; GFX10-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0308; GFX10-SDAG-NEXT:    s_endpgm309;310; GFX10-GISEL-LABEL: v_test_i32_x_sub_64_multi_use:311; GFX10-GISEL:       ; %bb.0:312; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24313; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0314; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)315; GFX10-GISEL-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc316; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)317; GFX10-GISEL-NEXT:    global_load_dword v2, v0, s[2:3] glc dlc318; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)319; GFX10-GISEL-NEXT:    v_add_nc_u32_e32 v1, 0xffffffc0, v1320; GFX10-GISEL-NEXT:    v_add_nc_u32_e32 v2, 0xffffffc0, v2321; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]322; GFX10-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0323; GFX10-GISEL-NEXT:    global_store_dword v0, v2, s[0:1]324; GFX10-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0325; GFX10-GISEL-NEXT:    s_endpgm326;327; GFX11-SDAG-LABEL: v_test_i32_x_sub_64_multi_use:328; GFX11-SDAG:       ; %bb.0:329; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24330; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0331; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)332; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0333; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)334; GFX11-SDAG-NEXT:    global_load_b32 v1, v0, s[2:3] glc dlc335; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)336; GFX11-SDAG-NEXT:    global_load_b32 v2, v0, s[2:3] glc dlc337; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)338; GFX11-SDAG-NEXT:    v_subrev_nc_u32_e32 v1, 64, v1339; GFX11-SDAG-NEXT:    v_subrev_nc_u32_e32 v2, 64, v2340; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1] dlc341; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0342; GFX11-SDAG-NEXT:    global_store_b32 v0, v2, s[0:1] dlc343; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0344; GFX11-SDAG-NEXT:    s_endpgm345;346; GFX11-GISEL-LABEL: v_test_i32_x_sub_64_multi_use:347; GFX11-GISEL:       ; %bb.0:348; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24349; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0350; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)351; GFX11-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0352; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)353; GFX11-GISEL-NEXT:    global_load_b32 v1, v0, s[2:3] glc dlc354; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)355; GFX11-GISEL-NEXT:    global_load_b32 v2, v0, s[2:3] glc dlc356; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)357; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v1, 0xffffffc0, v1358; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v2, 0xffffffc0, v2359; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[0:1] dlc360; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0361; GFX11-GISEL-NEXT:    global_store_b32 v0, v2, s[0:1] dlc362; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0363; GFX11-GISEL-NEXT:    s_endpgm364  %tid = call i32 @llvm.amdgcn.workitem.id.x()365  %tid.ext = sext i32 %tid to i64366  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext367  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext368  %x = load volatile i32, ptr addrspace(1) %gep369  %y = load volatile i32, ptr addrspace(1) %gep370  %result0 = sub i32 %x, 64371  %result1 = sub i32 %y, 64372  store volatile i32 %result0, ptr addrspace(1) %gep.out373  store volatile i32 %result1, ptr addrspace(1) %gep.out374  ret void375}376 377define amdgpu_kernel void @v_test_i32_64_sub_x(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {378; SI-SDAG-LABEL: v_test_i32_64_sub_x:379; SI-SDAG:       ; %bb.0:380; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9381; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000382; SI-SDAG-NEXT:    s_mov_b32 s6, 0383; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0384; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0385; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)386; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]387; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64388; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]389; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)390; SI-SDAG-NEXT:    v_sub_i32_e32 v2, vcc, 64, v2391; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64392; SI-SDAG-NEXT:    s_endpgm393;394; SI-GISEL-LABEL: v_test_i32_64_sub_x:395; SI-GISEL:       ; %bb.0:396; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9397; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0398; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0399; SI-GISEL-NEXT:    s_mov_b32 s6, 0400; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000401; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)402; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]403; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64404; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)405; SI-GISEL-NEXT:    v_sub_i32_e32 v2, vcc, 64, v2406; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]407; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64408; SI-GISEL-NEXT:    s_endpgm409;410; VI-SDAG-LABEL: v_test_i32_64_sub_x:411; VI-SDAG:       ; %bb.0:412; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24413; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v0414; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)415; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s3416; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v2417; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc418; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]419; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s1420; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v2421; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc422; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)423; VI-SDAG-NEXT:    v_sub_u32_e32 v2, vcc, 64, v3424; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2425; VI-SDAG-NEXT:    s_endpgm426;427; VI-GISEL-LABEL: v_test_i32_64_sub_x:428; VI-GISEL:       ; %bb.0:429; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24430; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v0431; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)432; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s2433; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s3434; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2435; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc436; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]437; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s0438; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s1439; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2440; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc441; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)442; VI-GISEL-NEXT:    v_sub_u32_e32 v2, vcc, 64, v3443; VI-GISEL-NEXT:    flat_store_dword v[0:1], v2444; VI-GISEL-NEXT:    s_endpgm445;446; GFX9-LABEL: v_test_i32_64_sub_x:447; GFX9:       ; %bb.0:448; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24449; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0450; GFX9-NEXT:    s_waitcnt lgkmcnt(0)451; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]452; GFX9-NEXT:    s_waitcnt vmcnt(0)453; GFX9-NEXT:    v_sub_u32_e32 v1, 64, v1454; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]455; GFX9-NEXT:    s_endpgm456;457; GFX10-LABEL: v_test_i32_64_sub_x:458; GFX10:       ; %bb.0:459; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24460; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0461; GFX10-NEXT:    s_waitcnt lgkmcnt(0)462; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]463; GFX10-NEXT:    s_waitcnt vmcnt(0)464; GFX10-NEXT:    v_sub_nc_u32_e32 v1, 64, v1465; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]466; GFX10-NEXT:    s_endpgm467;468; GFX11-LABEL: v_test_i32_64_sub_x:469; GFX11:       ; %bb.0:470; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24471; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0472; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)473; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0474; GFX11-NEXT:    s_waitcnt lgkmcnt(0)475; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]476; GFX11-NEXT:    s_waitcnt vmcnt(0)477; GFX11-NEXT:    v_sub_nc_u32_e32 v1, 64, v1478; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]479; GFX11-NEXT:    s_endpgm480  %tid = call i32 @llvm.amdgcn.workitem.id.x()481  %tid.ext = sext i32 %tid to i64482  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext483  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext484  %x = load i32, ptr addrspace(1) %gep485  %result = sub i32 64, %x486  store i32 %result, ptr addrspace(1) %gep.out487  ret void488}489 490define amdgpu_kernel void @v_test_i32_x_sub_65(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {491; SI-SDAG-LABEL: v_test_i32_x_sub_65:492; SI-SDAG:       ; %bb.0:493; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9494; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000495; SI-SDAG-NEXT:    s_mov_b32 s6, 0496; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0497; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0498; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)499; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]500; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64501; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]502; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)503; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffbf, v2504; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64505; SI-SDAG-NEXT:    s_endpgm506;507; SI-GISEL-LABEL: v_test_i32_x_sub_65:508; SI-GISEL:       ; %bb.0:509; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9510; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0511; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0512; SI-GISEL-NEXT:    s_mov_b32 s6, 0513; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000514; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)515; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]516; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64517; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)518; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffbf, v2519; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]520; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64521; SI-GISEL-NEXT:    s_endpgm522;523; VI-SDAG-LABEL: v_test_i32_x_sub_65:524; VI-SDAG:       ; %bb.0:525; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24526; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v0527; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)528; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s3529; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v2530; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc531; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]532; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s1533; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v2534; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc535; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)536; VI-SDAG-NEXT:    v_add_u32_e32 v2, vcc, 0xffffffbf, v3537; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2538; VI-SDAG-NEXT:    s_endpgm539;540; VI-GISEL-LABEL: v_test_i32_x_sub_65:541; VI-GISEL:       ; %bb.0:542; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24543; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v0544; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)545; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s2546; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s3547; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2548; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc549; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]550; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s0551; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s1552; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2553; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc554; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)555; VI-GISEL-NEXT:    v_add_u32_e32 v2, vcc, 0xffffffbf, v3556; VI-GISEL-NEXT:    flat_store_dword v[0:1], v2557; VI-GISEL-NEXT:    s_endpgm558;559; GFX9-LABEL: v_test_i32_x_sub_65:560; GFX9:       ; %bb.0:561; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24562; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0563; GFX9-NEXT:    s_waitcnt lgkmcnt(0)564; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]565; GFX9-NEXT:    s_waitcnt vmcnt(0)566; GFX9-NEXT:    v_add_u32_e32 v1, 0xffffffbf, v1567; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]568; GFX9-NEXT:    s_endpgm569;570; GFX10-LABEL: v_test_i32_x_sub_65:571; GFX10:       ; %bb.0:572; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24573; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0574; GFX10-NEXT:    s_waitcnt lgkmcnt(0)575; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]576; GFX10-NEXT:    s_waitcnt vmcnt(0)577; GFX10-NEXT:    v_add_nc_u32_e32 v1, 0xffffffbf, v1578; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]579; GFX10-NEXT:    s_endpgm580;581; GFX11-LABEL: v_test_i32_x_sub_65:582; GFX11:       ; %bb.0:583; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24584; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0585; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)586; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0587; GFX11-NEXT:    s_waitcnt lgkmcnt(0)588; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]589; GFX11-NEXT:    s_waitcnt vmcnt(0)590; GFX11-NEXT:    v_add_nc_u32_e32 v1, 0xffffffbf, v1591; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]592; GFX11-NEXT:    s_endpgm593  %tid = call i32 @llvm.amdgcn.workitem.id.x()594  %tid.ext = sext i32 %tid to i64595  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext596  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext597  %x = load i32, ptr addrspace(1) %gep598  %result = sub i32 %x, 65599  store i32 %result, ptr addrspace(1) %gep.out600  ret void601}602 603define amdgpu_kernel void @v_test_i32_65_sub_x(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {604; SI-SDAG-LABEL: v_test_i32_65_sub_x:605; SI-SDAG:       ; %bb.0:606; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9607; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000608; SI-SDAG-NEXT:    s_mov_b32 s6, 0609; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0610; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0611; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)612; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]613; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64614; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]615; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)616; SI-SDAG-NEXT:    v_sub_i32_e32 v2, vcc, 0x41, v2617; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64618; SI-SDAG-NEXT:    s_endpgm619;620; SI-GISEL-LABEL: v_test_i32_65_sub_x:621; SI-GISEL:       ; %bb.0:622; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9623; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0624; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0625; SI-GISEL-NEXT:    s_mov_b32 s6, 0626; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000627; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)628; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]629; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64630; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)631; SI-GISEL-NEXT:    v_sub_i32_e32 v2, vcc, 0x41, v2632; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]633; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64634; SI-GISEL-NEXT:    s_endpgm635;636; VI-SDAG-LABEL: v_test_i32_65_sub_x:637; VI-SDAG:       ; %bb.0:638; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24639; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v0640; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)641; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s3642; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v2643; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc644; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]645; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s1646; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v2647; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc648; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)649; VI-SDAG-NEXT:    v_sub_u32_e32 v2, vcc, 0x41, v3650; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2651; VI-SDAG-NEXT:    s_endpgm652;653; VI-GISEL-LABEL: v_test_i32_65_sub_x:654; VI-GISEL:       ; %bb.0:655; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24656; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v0657; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)658; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s2659; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s3660; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2661; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc662; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]663; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s0664; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s1665; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2666; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc667; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)668; VI-GISEL-NEXT:    v_sub_u32_e32 v2, vcc, 0x41, v3669; VI-GISEL-NEXT:    flat_store_dword v[0:1], v2670; VI-GISEL-NEXT:    s_endpgm671;672; GFX9-LABEL: v_test_i32_65_sub_x:673; GFX9:       ; %bb.0:674; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24675; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0676; GFX9-NEXT:    s_waitcnt lgkmcnt(0)677; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]678; GFX9-NEXT:    s_waitcnt vmcnt(0)679; GFX9-NEXT:    v_sub_u32_e32 v1, 0x41, v1680; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]681; GFX9-NEXT:    s_endpgm682;683; GFX10-LABEL: v_test_i32_65_sub_x:684; GFX10:       ; %bb.0:685; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24686; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0687; GFX10-NEXT:    s_waitcnt lgkmcnt(0)688; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]689; GFX10-NEXT:    s_waitcnt vmcnt(0)690; GFX10-NEXT:    v_sub_nc_u32_e32 v1, 0x41, v1691; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]692; GFX10-NEXT:    s_endpgm693;694; GFX11-LABEL: v_test_i32_65_sub_x:695; GFX11:       ; %bb.0:696; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24697; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0698; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)699; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0700; GFX11-NEXT:    s_waitcnt lgkmcnt(0)701; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]702; GFX11-NEXT:    s_waitcnt vmcnt(0)703; GFX11-NEXT:    v_sub_nc_u32_e32 v1, 0x41, v1704; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]705; GFX11-NEXT:    s_endpgm706  %tid = call i32 @llvm.amdgcn.workitem.id.x()707  %tid.ext = sext i32 %tid to i64708  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext709  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext710  %x = load i32, ptr addrspace(1) %gep711  %result = sub i32 65, %x712  store i32 %result, ptr addrspace(1) %gep.out713  ret void714}715 716define amdgpu_kernel void @v_test_i32_x_sub_neg16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {717; SI-SDAG-LABEL: v_test_i32_x_sub_neg16:718; SI-SDAG:       ; %bb.0:719; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9720; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000721; SI-SDAG-NEXT:    s_mov_b32 s6, 0722; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0723; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0724; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)725; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]726; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64727; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]728; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)729; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 16, v2730; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64731; SI-SDAG-NEXT:    s_endpgm732;733; SI-GISEL-LABEL: v_test_i32_x_sub_neg16:734; SI-GISEL:       ; %bb.0:735; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9736; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0737; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0738; SI-GISEL-NEXT:    s_mov_b32 s6, 0739; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000740; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)741; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]742; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64743; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)744; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 16, v2745; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]746; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64747; SI-GISEL-NEXT:    s_endpgm748;749; VI-SDAG-LABEL: v_test_i32_x_sub_neg16:750; VI-SDAG:       ; %bb.0:751; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24752; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v0753; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)754; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s3755; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v2756; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc757; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]758; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s1759; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v2760; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc761; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)762; VI-SDAG-NEXT:    v_add_u32_e32 v2, vcc, 16, v3763; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2764; VI-SDAG-NEXT:    s_endpgm765;766; VI-GISEL-LABEL: v_test_i32_x_sub_neg16:767; VI-GISEL:       ; %bb.0:768; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24769; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v0770; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)771; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s2772; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s3773; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2774; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc775; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]776; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s0777; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s1778; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2779; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc780; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)781; VI-GISEL-NEXT:    v_add_u32_e32 v2, vcc, 16, v3782; VI-GISEL-NEXT:    flat_store_dword v[0:1], v2783; VI-GISEL-NEXT:    s_endpgm784;785; GFX9-LABEL: v_test_i32_x_sub_neg16:786; GFX9:       ; %bb.0:787; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24788; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0789; GFX9-NEXT:    s_waitcnt lgkmcnt(0)790; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]791; GFX9-NEXT:    s_waitcnt vmcnt(0)792; GFX9-NEXT:    v_add_u32_e32 v1, 16, v1793; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]794; GFX9-NEXT:    s_endpgm795;796; GFX10-LABEL: v_test_i32_x_sub_neg16:797; GFX10:       ; %bb.0:798; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24799; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0800; GFX10-NEXT:    s_waitcnt lgkmcnt(0)801; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]802; GFX10-NEXT:    s_waitcnt vmcnt(0)803; GFX10-NEXT:    v_add_nc_u32_e32 v1, 16, v1804; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]805; GFX10-NEXT:    s_endpgm806;807; GFX11-LABEL: v_test_i32_x_sub_neg16:808; GFX11:       ; %bb.0:809; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24810; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0811; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)812; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0813; GFX11-NEXT:    s_waitcnt lgkmcnt(0)814; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]815; GFX11-NEXT:    s_waitcnt vmcnt(0)816; GFX11-NEXT:    v_add_nc_u32_e32 v1, 16, v1817; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]818; GFX11-NEXT:    s_endpgm819  %tid = call i32 @llvm.amdgcn.workitem.id.x()820  %tid.ext = sext i32 %tid to i64821  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext822  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext823  %x = load i32, ptr addrspace(1) %gep824  %result = sub i32 %x, -16825  store i32 %result, ptr addrspace(1) %gep.out826  ret void827}828 829define amdgpu_kernel void @v_test_i32_neg16_sub_x(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {830; SI-SDAG-LABEL: v_test_i32_neg16_sub_x:831; SI-SDAG:       ; %bb.0:832; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9833; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000834; SI-SDAG-NEXT:    s_mov_b32 s6, 0835; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0836; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0837; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)838; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]839; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64840; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]841; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)842; SI-SDAG-NEXT:    v_sub_i32_e32 v2, vcc, -16, v2843; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64844; SI-SDAG-NEXT:    s_endpgm845;846; SI-GISEL-LABEL: v_test_i32_neg16_sub_x:847; SI-GISEL:       ; %bb.0:848; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9849; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0850; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0851; SI-GISEL-NEXT:    s_mov_b32 s6, 0852; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000853; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)854; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]855; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64856; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)857; SI-GISEL-NEXT:    v_sub_i32_e32 v2, vcc, -16, v2858; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]859; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64860; SI-GISEL-NEXT:    s_endpgm861;862; VI-SDAG-LABEL: v_test_i32_neg16_sub_x:863; VI-SDAG:       ; %bb.0:864; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24865; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v0866; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)867; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s3868; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v2869; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc870; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]871; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s1872; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v2873; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc874; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)875; VI-SDAG-NEXT:    v_sub_u32_e32 v2, vcc, -16, v3876; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2877; VI-SDAG-NEXT:    s_endpgm878;879; VI-GISEL-LABEL: v_test_i32_neg16_sub_x:880; VI-GISEL:       ; %bb.0:881; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24882; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v0883; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)884; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s2885; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s3886; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2887; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc888; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]889; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s0890; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s1891; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2892; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc893; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)894; VI-GISEL-NEXT:    v_sub_u32_e32 v2, vcc, -16, v3895; VI-GISEL-NEXT:    flat_store_dword v[0:1], v2896; VI-GISEL-NEXT:    s_endpgm897;898; GFX9-LABEL: v_test_i32_neg16_sub_x:899; GFX9:       ; %bb.0:900; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24901; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0902; GFX9-NEXT:    s_waitcnt lgkmcnt(0)903; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]904; GFX9-NEXT:    s_waitcnt vmcnt(0)905; GFX9-NEXT:    v_sub_u32_e32 v1, -16, v1906; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]907; GFX9-NEXT:    s_endpgm908;909; GFX10-LABEL: v_test_i32_neg16_sub_x:910; GFX10:       ; %bb.0:911; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24912; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0913; GFX10-NEXT:    s_waitcnt lgkmcnt(0)914; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]915; GFX10-NEXT:    s_waitcnt vmcnt(0)916; GFX10-NEXT:    v_sub_nc_u32_e32 v1, -16, v1917; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]918; GFX10-NEXT:    s_endpgm919;920; GFX11-LABEL: v_test_i32_neg16_sub_x:921; GFX11:       ; %bb.0:922; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24923; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0924; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)925; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0926; GFX11-NEXT:    s_waitcnt lgkmcnt(0)927; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]928; GFX11-NEXT:    s_waitcnt vmcnt(0)929; GFX11-NEXT:    v_sub_nc_u32_e32 v1, -16, v1930; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]931; GFX11-NEXT:    s_endpgm932  %tid = call i32 @llvm.amdgcn.workitem.id.x()933  %tid.ext = sext i32 %tid to i64934  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext935  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext936  %x = load i32, ptr addrspace(1) %gep937  %result = sub i32 -16, %x938  store i32 %result, ptr addrspace(1) %gep.out939  ret void940}941 942define amdgpu_kernel void @v_test_i32_x_sub_neg17(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {943; SI-SDAG-LABEL: v_test_i32_x_sub_neg17:944; SI-SDAG:       ; %bb.0:945; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9946; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000947; SI-SDAG-NEXT:    s_mov_b32 s6, 0948; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0949; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0950; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)951; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]952; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64953; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]954; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)955; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 17, v2956; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64957; SI-SDAG-NEXT:    s_endpgm958;959; SI-GISEL-LABEL: v_test_i32_x_sub_neg17:960; SI-GISEL:       ; %bb.0:961; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9962; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0963; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0964; SI-GISEL-NEXT:    s_mov_b32 s6, 0965; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000966; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)967; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]968; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64969; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)970; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 17, v2971; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]972; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64973; SI-GISEL-NEXT:    s_endpgm974;975; VI-SDAG-LABEL: v_test_i32_x_sub_neg17:976; VI-SDAG:       ; %bb.0:977; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24978; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v0979; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)980; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s3981; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v2982; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc983; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]984; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s1985; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v2986; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc987; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)988; VI-SDAG-NEXT:    v_add_u32_e32 v2, vcc, 17, v3989; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2990; VI-SDAG-NEXT:    s_endpgm991;992; VI-GISEL-LABEL: v_test_i32_x_sub_neg17:993; VI-GISEL:       ; %bb.0:994; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24995; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v0996; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)997; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s2998; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s3999; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21000; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1001; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]1002; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s01003; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s11004; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21005; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1006; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1007; VI-GISEL-NEXT:    v_add_u32_e32 v2, vcc, 17, v31008; VI-GISEL-NEXT:    flat_store_dword v[0:1], v21009; VI-GISEL-NEXT:    s_endpgm1010;1011; GFX9-LABEL: v_test_i32_x_sub_neg17:1012; GFX9:       ; %bb.0:1013; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241014; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v01015; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1016; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]1017; GFX9-NEXT:    s_waitcnt vmcnt(0)1018; GFX9-NEXT:    v_add_u32_e32 v1, 17, v11019; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]1020; GFX9-NEXT:    s_endpgm1021;1022; GFX10-LABEL: v_test_i32_x_sub_neg17:1023; GFX10:       ; %bb.0:1024; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241025; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v01026; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1027; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]1028; GFX10-NEXT:    s_waitcnt vmcnt(0)1029; GFX10-NEXT:    v_add_nc_u32_e32 v1, 17, v11030; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]1031; GFX10-NEXT:    s_endpgm1032;1033; GFX11-LABEL: v_test_i32_x_sub_neg17:1034; GFX11:       ; %bb.0:1035; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241036; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v01037; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)1038; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v01039; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1040; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]1041; GFX11-NEXT:    s_waitcnt vmcnt(0)1042; GFX11-NEXT:    v_add_nc_u32_e32 v1, 17, v11043; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]1044; GFX11-NEXT:    s_endpgm1045  %tid = call i32 @llvm.amdgcn.workitem.id.x()1046  %tid.ext = sext i32 %tid to i641047  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext1048  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext1049  %x = load i32, ptr addrspace(1) %gep1050  %result = sub i32 %x, -171051  store i32 %result, ptr addrspace(1) %gep.out1052  ret void1053}1054 1055define amdgpu_kernel void @v_test_i32_neg17_sub_x(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1056; SI-SDAG-LABEL: v_test_i32_neg17_sub_x:1057; SI-SDAG:       ; %bb.0:1058; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91059; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0001060; SI-SDAG-NEXT:    s_mov_b32 s6, 01061; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v01062; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 01063; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1064; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]1065; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr641066; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]1067; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1068; SI-SDAG-NEXT:    v_sub_i32_e32 v2, vcc, 0xffffffef, v21069; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641070; SI-SDAG-NEXT:    s_endpgm1071;1072; SI-GISEL-LABEL: v_test_i32_neg17_sub_x:1073; SI-GISEL:       ; %bb.0:1074; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91075; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v01076; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 01077; SI-GISEL-NEXT:    s_mov_b32 s6, 01078; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0001079; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1080; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]1081; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr641082; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)1083; SI-GISEL-NEXT:    v_sub_i32_e32 v2, vcc, 0xffffffef, v21084; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]1085; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641086; SI-GISEL-NEXT:    s_endpgm1087;1088; VI-SDAG-LABEL: v_test_i32_neg17_sub_x:1089; VI-SDAG:       ; %bb.0:1090; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241091; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v01092; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1093; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s31094; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v21095; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1096; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]1097; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s11098; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v21099; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1100; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)1101; VI-SDAG-NEXT:    v_sub_u32_e32 v2, vcc, 0xffffffef, v31102; VI-SDAG-NEXT:    flat_store_dword v[0:1], v21103; VI-SDAG-NEXT:    s_endpgm1104;1105; VI-GISEL-LABEL: v_test_i32_neg17_sub_x:1106; VI-GISEL:       ; %bb.0:1107; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241108; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v01109; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1110; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s21111; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s31112; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21113; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1114; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]1115; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s01116; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s11117; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21118; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1119; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1120; VI-GISEL-NEXT:    v_sub_u32_e32 v2, vcc, 0xffffffef, v31121; VI-GISEL-NEXT:    flat_store_dword v[0:1], v21122; VI-GISEL-NEXT:    s_endpgm1123;1124; GFX9-LABEL: v_test_i32_neg17_sub_x:1125; GFX9:       ; %bb.0:1126; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241127; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v01128; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1129; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]1130; GFX9-NEXT:    s_waitcnt vmcnt(0)1131; GFX9-NEXT:    v_sub_u32_e32 v1, 0xffffffef, v11132; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]1133; GFX9-NEXT:    s_endpgm1134;1135; GFX10-LABEL: v_test_i32_neg17_sub_x:1136; GFX10:       ; %bb.0:1137; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241138; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v01139; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1140; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]1141; GFX10-NEXT:    s_waitcnt vmcnt(0)1142; GFX10-NEXT:    v_sub_nc_u32_e32 v1, 0xffffffef, v11143; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]1144; GFX10-NEXT:    s_endpgm1145;1146; GFX11-LABEL: v_test_i32_neg17_sub_x:1147; GFX11:       ; %bb.0:1148; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241149; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v01150; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)1151; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v01152; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1153; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]1154; GFX11-NEXT:    s_waitcnt vmcnt(0)1155; GFX11-NEXT:    v_sub_nc_u32_e32 v1, 0xffffffef, v11156; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]1157; GFX11-NEXT:    s_endpgm1158  %tid = call i32 @llvm.amdgcn.workitem.id.x()1159  %tid.ext = sext i32 %tid to i641160  %gep = getelementptr inbounds i32, ptr addrspace(1) %in, i64 %tid.ext1161  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext1162  %x = load i32, ptr addrspace(1) %gep1163  %result = sub i32 -17, %x1164  store i32 %result, ptr addrspace(1) %gep.out1165  ret void1166}1167 1168define amdgpu_kernel void @s_test_i32_x_sub_64(i32 %x) #0 {1169; SI-LABEL: s_test_i32_x_sub_64:1170; SI:       ; %bb.0:1171; SI-NEXT:    s_load_dword s0, s[4:5], 0x91172; SI-NEXT:    s_waitcnt lgkmcnt(0)1173; SI-NEXT:    s_sub_i32 s0, s0, 641174; SI-NEXT:    ;;#ASMSTART1175; SI-NEXT:    ; use s01176; SI-NEXT:    ;;#ASMEND1177; SI-NEXT:    s_endpgm1178;1179; VI-LABEL: s_test_i32_x_sub_64:1180; VI:       ; %bb.0:1181; VI-NEXT:    s_load_dword s0, s[4:5], 0x241182; VI-NEXT:    s_waitcnt lgkmcnt(0)1183; VI-NEXT:    s_sub_i32 s0, s0, 641184; VI-NEXT:    ;;#ASMSTART1185; VI-NEXT:    ; use s01186; VI-NEXT:    ;;#ASMEND1187; VI-NEXT:    s_endpgm1188;1189; GFX9-LABEL: s_test_i32_x_sub_64:1190; GFX9:       ; %bb.0:1191; GFX9-NEXT:    s_load_dword s0, s[4:5], 0x241192; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1193; GFX9-NEXT:    s_sub_i32 s0, s0, 641194; GFX9-NEXT:    ;;#ASMSTART1195; GFX9-NEXT:    ; use s01196; GFX9-NEXT:    ;;#ASMEND1197; GFX9-NEXT:    s_endpgm1198;1199; GFX10-LABEL: s_test_i32_x_sub_64:1200; GFX10:       ; %bb.0:1201; GFX10-NEXT:    s_load_dword s0, s[4:5], 0x241202; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1203; GFX10-NEXT:    s_sub_i32 s0, s0, 641204; GFX10-NEXT:    ;;#ASMSTART1205; GFX10-NEXT:    ; use s01206; GFX10-NEXT:    ;;#ASMEND1207; GFX10-NEXT:    s_endpgm1208;1209; GFX11-LABEL: s_test_i32_x_sub_64:1210; GFX11:       ; %bb.0:1211; GFX11-NEXT:    s_load_b32 s0, s[4:5], 0x241212; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1213; GFX11-NEXT:    s_sub_i32 s0, s0, 641214; GFX11-NEXT:    ;;#ASMSTART1215; GFX11-NEXT:    ; use s01216; GFX11-NEXT:    ;;#ASMEND1217; GFX11-NEXT:    s_endpgm1218  %result = sub i32 %x, 641219  call void asm sideeffect "; use $0", "s"(i32 %result)1220  ret void1221}1222 1223define amdgpu_kernel void @v_test_i16_x_sub_64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1224; SI-SDAG-LABEL: v_test_i16_x_sub_64:1225; SI-SDAG:       ; %bb.0:1226; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91227; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0001228; SI-SDAG-NEXT:    s_mov_b32 s6, 01229; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 1, v01230; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 01231; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1232; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]1233; SI-SDAG-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr641234; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]1235; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1236; SI-SDAG-NEXT:    v_subrev_i32_e32 v2, vcc, 64, v21237; SI-SDAG-NEXT:    buffer_store_short v2, v[0:1], s[0:3], 0 addr641238; SI-SDAG-NEXT:    s_endpgm1239;1240; SI-GISEL-LABEL: v_test_i16_x_sub_64:1241; SI-GISEL:       ; %bb.0:1242; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91243; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v01244; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 01245; SI-GISEL-NEXT:    s_mov_b32 s6, 01246; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0001247; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1248; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]1249; SI-GISEL-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr641250; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)1251; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffc0, v21252; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]1253; SI-GISEL-NEXT:    buffer_store_short v2, v[0:1], s[0:3], 0 addr641254; SI-GISEL-NEXT:    s_endpgm1255;1256; VI-SDAG-LABEL: v_test_i16_x_sub_64:1257; VI-SDAG:       ; %bb.0:1258; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241259; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 1, v01260; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1261; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s31262; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v21263; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1264; VI-SDAG-NEXT:    flat_load_ushort v3, v[0:1]1265; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s11266; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v21267; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1268; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)1269; VI-SDAG-NEXT:    v_subrev_u16_e32 v2, 64, v31270; VI-SDAG-NEXT:    flat_store_short v[0:1], v21271; VI-SDAG-NEXT:    s_endpgm1272;1273; VI-GISEL-LABEL: v_test_i16_x_sub_64:1274; VI-GISEL:       ; %bb.0:1275; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241276; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 1, v01277; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1278; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s21279; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s31280; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21281; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1282; VI-GISEL-NEXT:    flat_load_ushort v3, v[0:1]1283; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s01284; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s11285; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21286; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1287; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1288; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xffc0, v31289; VI-GISEL-NEXT:    flat_store_short v[0:1], v21290; VI-GISEL-NEXT:    s_endpgm1291;1292; GFX9-SDAG-LABEL: v_test_i16_x_sub_64:1293; GFX9-SDAG:       ; %bb.0:1294; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241295; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 1, v01296; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1297; GFX9-SDAG-NEXT:    global_load_ushort v1, v0, s[2:3]1298; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)1299; GFX9-SDAG-NEXT:    v_subrev_u16_e32 v1, 64, v11300; GFX9-SDAG-NEXT:    global_store_short v0, v1, s[0:1]1301; GFX9-SDAG-NEXT:    s_endpgm1302;1303; GFX9-GISEL-LABEL: v_test_i16_x_sub_64:1304; GFX9-GISEL:       ; %bb.0:1305; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241306; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v01307; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1308; GFX9-GISEL-NEXT:    global_load_ushort v1, v0, s[2:3]1309; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)1310; GFX9-GISEL-NEXT:    v_add_u16_e32 v1, 0xffc0, v11311; GFX9-GISEL-NEXT:    global_store_short v0, v1, s[0:1]1312; GFX9-GISEL-NEXT:    s_endpgm1313;1314; GFX10-SDAG-LABEL: v_test_i16_x_sub_64:1315; GFX10-SDAG:       ; %bb.0:1316; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241317; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 1, v01318; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1319; GFX10-SDAG-NEXT:    global_load_ushort v1, v0, s[2:3]1320; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)1321; GFX10-SDAG-NEXT:    v_sub_nc_u16 v1, v1, 641322; GFX10-SDAG-NEXT:    global_store_short v0, v1, s[0:1]1323; GFX10-SDAG-NEXT:    s_endpgm1324;1325; GFX10-GISEL-LABEL: v_test_i16_x_sub_64:1326; GFX10-GISEL:       ; %bb.0:1327; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241328; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v01329; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1330; GFX10-GISEL-NEXT:    global_load_ushort v1, v0, s[2:3]1331; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)1332; GFX10-GISEL-NEXT:    v_add_nc_u16 v1, 0xffc0, v11333; GFX10-GISEL-NEXT:    global_store_short v0, v1, s[0:1]1334; GFX10-GISEL-NEXT:    s_endpgm1335;1336; GFX11-SDAG-TRUE16-LABEL: v_test_i16_x_sub_64:1337; GFX11-SDAG-TRUE16:       ; %bb.0:1338; GFX11-SDAG-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241339; GFX11-SDAG-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01340; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1341; GFX11-SDAG-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01342; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1343; GFX11-SDAG-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3]1344; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0)1345; GFX11-SDAG-TRUE16-NEXT:    v_sub_nc_u16 v0.l, v0.l, 641346; GFX11-SDAG-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1347; GFX11-SDAG-TRUE16-NEXT:    s_endpgm1348;1349; GFX11-SDAG-FAKE16-LABEL: v_test_i16_x_sub_64:1350; GFX11-SDAG-FAKE16:       ; %bb.0:1351; GFX11-SDAG-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241352; GFX11-SDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01353; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1354; GFX11-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01355; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1356; GFX11-SDAG-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]1357; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0)1358; GFX11-SDAG-FAKE16-NEXT:    v_sub_nc_u16 v1, v1, 641359; GFX11-SDAG-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1360; GFX11-SDAG-FAKE16-NEXT:    s_endpgm1361;1362; GFX11-GISEL-TRUE16-LABEL: v_test_i16_x_sub_64:1363; GFX11-GISEL-TRUE16:       ; %bb.0:1364; GFX11-GISEL-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241365; GFX11-GISEL-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01366; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1367; GFX11-GISEL-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01368; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1369; GFX11-GISEL-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3]1370; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0)1371; GFX11-GISEL-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0xffc0, v0.l1372; GFX11-GISEL-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1373; GFX11-GISEL-TRUE16-NEXT:    s_endpgm1374;1375; GFX11-GISEL-FAKE16-LABEL: v_test_i16_x_sub_64:1376; GFX11-GISEL-FAKE16:       ; %bb.0:1377; GFX11-GISEL-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241378; GFX11-GISEL-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01379; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1380; GFX11-GISEL-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01381; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1382; GFX11-GISEL-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]1383; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0)1384; GFX11-GISEL-FAKE16-NEXT:    v_add_nc_u16 v1, 0xffc0, v11385; GFX11-GISEL-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1386; GFX11-GISEL-FAKE16-NEXT:    s_endpgm1387  %tid = call i32 @llvm.amdgcn.workitem.id.x()1388  %tid.ext = sext i32 %tid to i641389  %gep = getelementptr inbounds i16, ptr addrspace(1) %in, i64 %tid.ext1390  %gep.out = getelementptr inbounds i16, ptr addrspace(1) %out, i64 %tid.ext1391  %x = load i16, ptr addrspace(1) %gep1392  %result = sub i16 %x, 641393  store i16 %result, ptr addrspace(1) %gep.out1394  ret void1395}1396 1397define amdgpu_kernel void @v_test_i16_x_sub_64_zext_to_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1398; SI-SDAG-LABEL: v_test_i16_x_sub_64_zext_to_i32:1399; SI-SDAG:       ; %bb.0:1400; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91401; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0001402; SI-SDAG-NEXT:    s_mov_b32 s6, 01403; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 1, v01404; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 01405; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1406; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]1407; SI-SDAG-NEXT:    buffer_load_ushort v3, v[1:2], s[4:7], 0 addr641408; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]1409; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 2, v01410; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1411; SI-SDAG-NEXT:    v_subrev_i32_e32 v0, vcc, 64, v31412; SI-SDAG-NEXT:    v_and_b32_e32 v0, 0xffff, v01413; SI-SDAG-NEXT:    buffer_store_dword v0, v[1:2], s[0:3], 0 addr641414; SI-SDAG-NEXT:    s_endpgm1415;1416; SI-GISEL-LABEL: v_test_i16_x_sub_64_zext_to_i32:1417; SI-GISEL:       ; %bb.0:1418; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91419; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 1, v01420; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 01421; SI-GISEL-NEXT:    s_mov_b32 s6, 01422; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0001423; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1424; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]1425; SI-GISEL-NEXT:    buffer_load_ushort v3, v[1:2], s[4:7], 0 addr641426; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 2, v01427; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)1428; SI-GISEL-NEXT:    v_add_i32_e32 v0, vcc, 0xffffffc0, v31429; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v01430; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]1431; SI-GISEL-NEXT:    buffer_store_dword v0, v[1:2], s[0:3], 0 addr641432; SI-GISEL-NEXT:    s_endpgm1433;1434; VI-SDAG-LABEL: v_test_i16_x_sub_64_zext_to_i32:1435; VI-SDAG:       ; %bb.0:1436; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241437; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 1, v01438; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v01439; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1440; VI-SDAG-NEXT:    v_mov_b32_e32 v2, s31441; VI-SDAG-NEXT:    v_add_u32_e32 v1, vcc, s2, v11442; VI-SDAG-NEXT:    v_addc_u32_e32 v2, vcc, 0, v2, vcc1443; VI-SDAG-NEXT:    flat_load_ushort v2, v[1:2]1444; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s11445; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v01446; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1447; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)1448; VI-SDAG-NEXT:    v_subrev_u16_e32 v2, 64, v21449; VI-SDAG-NEXT:    flat_store_dword v[0:1], v21450; VI-SDAG-NEXT:    s_endpgm1451;1452; VI-GISEL-LABEL: v_test_i16_x_sub_64_zext_to_i32:1453; VI-GISEL:       ; %bb.0:1454; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241455; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 1, v01456; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1457; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s21458; VI-GISEL-NEXT:    v_mov_b32_e32 v2, s31459; VI-GISEL-NEXT:    v_add_u32_e32 v1, vcc, v1, v31460; VI-GISEL-NEXT:    v_addc_u32_e32 v2, vcc, 0, v2, vcc1461; VI-GISEL-NEXT:    flat_load_ushort v2, v[1:2]1462; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 2, v01463; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s01464; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s11465; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v31466; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1467; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1468; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xffc0, v21469; VI-GISEL-NEXT:    flat_store_dword v[0:1], v21470; VI-GISEL-NEXT:    s_endpgm1471;1472; GFX9-SDAG-LABEL: v_test_i16_x_sub_64_zext_to_i32:1473; GFX9-SDAG:       ; %bb.0:1474; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241475; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 1, v01476; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v01477; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1478; GFX9-SDAG-NEXT:    global_load_ushort v1, v1, s[2:3]1479; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)1480; GFX9-SDAG-NEXT:    v_subrev_u16_e32 v1, 64, v11481; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]1482; GFX9-SDAG-NEXT:    s_endpgm1483;1484; GFX9-GISEL-LABEL: v_test_i16_x_sub_64_zext_to_i32:1485; GFX9-GISEL:       ; %bb.0:1486; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241487; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 1, v01488; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v01489; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1490; GFX9-GISEL-NEXT:    global_load_ushort v1, v1, s[2:3]1491; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)1492; GFX9-GISEL-NEXT:    v_add_u16_e32 v1, 0xffc0, v11493; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]1494; GFX9-GISEL-NEXT:    s_endpgm1495;1496; GFX10-SDAG-LABEL: v_test_i16_x_sub_64_zext_to_i32:1497; GFX10-SDAG:       ; %bb.0:1498; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241499; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 1, v01500; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v01501; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1502; GFX10-SDAG-NEXT:    global_load_ushort v1, v1, s[2:3]1503; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)1504; GFX10-SDAG-NEXT:    v_sub_nc_u16 v1, v1, 641505; GFX10-SDAG-NEXT:    v_and_b32_e32 v1, 0xffff, v11506; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]1507; GFX10-SDAG-NEXT:    s_endpgm1508;1509; GFX10-GISEL-LABEL: v_test_i16_x_sub_64_zext_to_i32:1510; GFX10-GISEL:       ; %bb.0:1511; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241512; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 1, v01513; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v01514; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1515; GFX10-GISEL-NEXT:    global_load_ushort v1, v1, s[2:3]1516; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)1517; GFX10-GISEL-NEXT:    v_add_nc_u16 v1, 0xffc0, v11518; GFX10-GISEL-NEXT:    v_and_b32_e32 v1, 0xffff, v11519; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]1520; GFX10-GISEL-NEXT:    s_endpgm1521;1522; GFX11-SDAG-TRUE16-LABEL: v_test_i16_x_sub_64_zext_to_i32:1523; GFX11-SDAG-TRUE16:       ; %bb.0:1524; GFX11-SDAG-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241525; GFX11-SDAG-TRUE16-NEXT:    v_and_b32_e32 v1, 0x3ff, v01526; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1527; GFX11-SDAG-TRUE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v11528; GFX11-SDAG-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 2, v11529; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1530; GFX11-SDAG-TRUE16-NEXT:    global_load_d16_b16 v0, v0, s[2:3]1531; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0)1532; GFX11-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.h, 01533; GFX11-SDAG-TRUE16-NEXT:    v_sub_nc_u16 v0.l, v0.l, 641534; GFX11-SDAG-TRUE16-NEXT:    global_store_b32 v1, v0, s[0:1]1535; GFX11-SDAG-TRUE16-NEXT:    s_endpgm1536;1537; GFX11-SDAG-FAKE16-LABEL: v_test_i16_x_sub_64_zext_to_i32:1538; GFX11-SDAG-FAKE16:       ; %bb.0:1539; GFX11-SDAG-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241540; GFX11-SDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01541; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1542; GFX11-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01543; GFX11-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 2, v01544; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1545; GFX11-SDAG-FAKE16-NEXT:    global_load_u16 v1, v1, s[2:3]1546; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0)1547; GFX11-SDAG-FAKE16-NEXT:    v_sub_nc_u16 v1, v1, 641548; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1549; GFX11-SDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0xffff, v11550; GFX11-SDAG-FAKE16-NEXT:    global_store_b32 v0, v1, s[0:1]1551; GFX11-SDAG-FAKE16-NEXT:    s_endpgm1552;1553; GFX11-GISEL-TRUE16-LABEL: v_test_i16_x_sub_64_zext_to_i32:1554; GFX11-GISEL-TRUE16:       ; %bb.0:1555; GFX11-GISEL-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241556; GFX11-GISEL-TRUE16-NEXT:    v_and_b32_e32 v1, 0x3ff, v01557; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1558; GFX11-GISEL-TRUE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v11559; GFX11-GISEL-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 2, v11560; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1561; GFX11-GISEL-TRUE16-NEXT:    global_load_d16_b16 v0, v0, s[2:3]1562; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0)1563; GFX11-GISEL-TRUE16-NEXT:    v_mov_b16_e32 v0.h, 01564; GFX11-GISEL-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0xffc0, v0.l1565; GFX11-GISEL-TRUE16-NEXT:    global_store_b32 v1, v0, s[0:1]1566; GFX11-GISEL-TRUE16-NEXT:    s_endpgm1567;1568; GFX11-GISEL-FAKE16-LABEL: v_test_i16_x_sub_64_zext_to_i32:1569; GFX11-GISEL-FAKE16:       ; %bb.0:1570; GFX11-GISEL-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241571; GFX11-GISEL-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01572; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1573; GFX11-GISEL-FAKE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01574; GFX11-GISEL-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 2, v01575; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1576; GFX11-GISEL-FAKE16-NEXT:    global_load_u16 v1, v1, s[2:3]1577; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0)1578; GFX11-GISEL-FAKE16-NEXT:    v_add_nc_u16 v1, 0xffc0, v11579; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1580; GFX11-GISEL-FAKE16-NEXT:    v_and_b32_e32 v1, 0xffff, v11581; GFX11-GISEL-FAKE16-NEXT:    global_store_b32 v0, v1, s[0:1]1582; GFX11-GISEL-FAKE16-NEXT:    s_endpgm1583  %tid = call i32 @llvm.amdgcn.workitem.id.x()1584  %tid.ext = sext i32 %tid to i641585  %gep = getelementptr inbounds i16, ptr addrspace(1) %in, i64 %tid.ext1586  %gep.out = getelementptr inbounds i32, ptr addrspace(1) %out, i64 %tid.ext1587  %x = load i16, ptr addrspace(1) %gep1588  %result = sub i16 %x, 641589  %zext = zext i16 %result to i321590  store i32 %zext, ptr addrspace(1) %gep.out1591  ret void1592}1593 1594define amdgpu_kernel void @v_test_i16_x_sub_64_multi_use(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1595; SI-SDAG-LABEL: v_test_i16_x_sub_64_multi_use:1596; SI-SDAG:       ; %bb.0:1597; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91598; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0001599; SI-SDAG-NEXT:    s_mov_b32 s6, 01600; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 1, v01601; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 01602; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1603; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]1604; SI-SDAG-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 glc1605; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1606; SI-SDAG-NEXT:    buffer_load_ushort v3, v[0:1], s[4:7], 0 addr64 glc1607; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1608; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]1609; SI-SDAG-NEXT:    v_subrev_i32_e32 v2, vcc, 64, v21610; SI-SDAG-NEXT:    v_subrev_i32_e32 v3, vcc, 64, v31611; SI-SDAG-NEXT:    buffer_store_short v2, v[0:1], s[0:3], 0 addr641612; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1613; SI-SDAG-NEXT:    buffer_store_short v3, v[0:1], s[0:3], 0 addr641614; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1615; SI-SDAG-NEXT:    s_endpgm1616;1617; SI-GISEL-LABEL: v_test_i16_x_sub_64_multi_use:1618; SI-GISEL:       ; %bb.0:1619; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91620; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v01621; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 01622; SI-GISEL-NEXT:    s_mov_b32 s6, 01623; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0001624; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1625; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]1626; SI-GISEL-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 glc1627; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)1628; SI-GISEL-NEXT:    buffer_load_ushort v3, v[0:1], s[4:7], 0 addr64 glc1629; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)1630; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]1631; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffc0, v21632; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffffc0, v31633; SI-GISEL-NEXT:    buffer_store_short v2, v[0:1], s[0:3], 0 addr641634; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)1635; SI-GISEL-NEXT:    buffer_store_short v3, v[0:1], s[0:3], 0 addr641636; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)1637; SI-GISEL-NEXT:    s_endpgm1638;1639; VI-SDAG-LABEL: v_test_i16_x_sub_64_multi_use:1640; VI-SDAG:       ; %bb.0:1641; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241642; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 1, v01643; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1644; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s31645; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v21646; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1647; VI-SDAG-NEXT:    flat_load_ushort v3, v[0:1] glc1648; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)1649; VI-SDAG-NEXT:    flat_load_ushort v4, v[0:1] glc1650; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)1651; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s11652; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v21653; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1654; VI-SDAG-NEXT:    v_subrev_u16_e32 v2, 64, v31655; VI-SDAG-NEXT:    v_subrev_u16_e32 v3, 64, v41656; VI-SDAG-NEXT:    flat_store_short v[0:1], v21657; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)1658; VI-SDAG-NEXT:    flat_store_short v[0:1], v31659; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)1660; VI-SDAG-NEXT:    s_endpgm1661;1662; VI-GISEL-LABEL: v_test_i16_x_sub_64_multi_use:1663; VI-GISEL:       ; %bb.0:1664; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241665; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 1, v01666; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1667; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s21668; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s31669; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21670; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1671; VI-GISEL-NEXT:    flat_load_ushort v3, v[0:1] glc1672; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1673; VI-GISEL-NEXT:    flat_load_ushort v4, v[0:1] glc1674; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1675; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s01676; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s11677; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21678; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1679; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xffc0, v31680; VI-GISEL-NEXT:    v_add_u16_e32 v3, 0xffc0, v41681; VI-GISEL-NEXT:    flat_store_short v[0:1], v21682; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1683; VI-GISEL-NEXT:    flat_store_short v[0:1], v31684; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1685; VI-GISEL-NEXT:    s_endpgm1686;1687; GFX9-SDAG-LABEL: v_test_i16_x_sub_64_multi_use:1688; GFX9-SDAG:       ; %bb.0:1689; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241690; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 1, v01691; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1692; GFX9-SDAG-NEXT:    global_load_ushort v1, v0, s[2:3] glc1693; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)1694; GFX9-SDAG-NEXT:    global_load_ushort v2, v0, s[2:3] glc1695; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)1696; GFX9-SDAG-NEXT:    v_subrev_u16_e32 v1, 64, v11697; GFX9-SDAG-NEXT:    v_subrev_u16_e32 v2, 64, v21698; GFX9-SDAG-NEXT:    global_store_short v0, v1, s[0:1]1699; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)1700; GFX9-SDAG-NEXT:    global_store_short v0, v2, s[0:1]1701; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)1702; GFX9-SDAG-NEXT:    s_endpgm1703;1704; GFX9-GISEL-LABEL: v_test_i16_x_sub_64_multi_use:1705; GFX9-GISEL:       ; %bb.0:1706; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241707; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v01708; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1709; GFX9-GISEL-NEXT:    global_load_ushort v1, v0, s[2:3] glc1710; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)1711; GFX9-GISEL-NEXT:    global_load_ushort v2, v0, s[2:3] glc1712; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)1713; GFX9-GISEL-NEXT:    v_add_u16_e32 v1, 0xffc0, v11714; GFX9-GISEL-NEXT:    v_add_u16_e32 v2, 0xffc0, v21715; GFX9-GISEL-NEXT:    global_store_short v0, v1, s[0:1]1716; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)1717; GFX9-GISEL-NEXT:    global_store_short v0, v2, s[0:1]1718; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)1719; GFX9-GISEL-NEXT:    s_endpgm1720;1721; GFX10-SDAG-LABEL: v_test_i16_x_sub_64_multi_use:1722; GFX10-SDAG:       ; %bb.0:1723; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241724; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 1, v01725; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1726; GFX10-SDAG-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc1727; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)1728; GFX10-SDAG-NEXT:    global_load_ushort v2, v0, s[2:3] glc dlc1729; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)1730; GFX10-SDAG-NEXT:    v_sub_nc_u16 v1, v1, 641731; GFX10-SDAG-NEXT:    v_sub_nc_u16 v2, v2, 641732; GFX10-SDAG-NEXT:    global_store_short v0, v1, s[0:1]1733; GFX10-SDAG-NEXT:    s_waitcnt_vscnt null, 0x01734; GFX10-SDAG-NEXT:    global_store_short v0, v2, s[0:1]1735; GFX10-SDAG-NEXT:    s_waitcnt_vscnt null, 0x01736; GFX10-SDAG-NEXT:    s_endpgm1737;1738; GFX10-GISEL-LABEL: v_test_i16_x_sub_64_multi_use:1739; GFX10-GISEL:       ; %bb.0:1740; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241741; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v01742; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1743; GFX10-GISEL-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc1744; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)1745; GFX10-GISEL-NEXT:    global_load_ushort v2, v0, s[2:3] glc dlc1746; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)1747; GFX10-GISEL-NEXT:    v_add_nc_u16 v1, 0xffc0, v11748; GFX10-GISEL-NEXT:    v_add_nc_u16 v2, 0xffc0, v21749; GFX10-GISEL-NEXT:    global_store_short v0, v1, s[0:1]1750; GFX10-GISEL-NEXT:    s_waitcnt_vscnt null, 0x01751; GFX10-GISEL-NEXT:    global_store_short v0, v2, s[0:1]1752; GFX10-GISEL-NEXT:    s_waitcnt_vscnt null, 0x01753; GFX10-GISEL-NEXT:    s_endpgm1754;1755; GFX11-SDAG-TRUE16-LABEL: v_test_i16_x_sub_64_multi_use:1756; GFX11-SDAG-TRUE16:       ; %bb.0:1757; GFX11-SDAG-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241758; GFX11-SDAG-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01759; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1760; GFX11-SDAG-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01761; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1762; GFX11-SDAG-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3] glc dlc1763; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0)1764; GFX11-SDAG-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc1765; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0)1766; GFX11-SDAG-TRUE16-NEXT:    v_sub_nc_u16 v0.l, v0.l, 641767; GFX11-SDAG-TRUE16-NEXT:    v_sub_nc_u16 v0.h, v0.h, 641768; GFX11-SDAG-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1] dlc1769; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x01770; GFX11-SDAG-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1] dlc1771; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x01772; GFX11-SDAG-TRUE16-NEXT:    s_endpgm1773;1774; GFX11-SDAG-FAKE16-LABEL: v_test_i16_x_sub_64_multi_use:1775; GFX11-SDAG-FAKE16:       ; %bb.0:1776; GFX11-SDAG-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241777; GFX11-SDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01778; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1779; GFX11-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01780; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1781; GFX11-SDAG-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc1782; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0)1783; GFX11-SDAG-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] glc dlc1784; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0)1785; GFX11-SDAG-FAKE16-NEXT:    v_sub_nc_u16 v1, v1, 641786; GFX11-SDAG-FAKE16-NEXT:    v_sub_nc_u16 v2, v2, 641787; GFX11-SDAG-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1] dlc1788; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x01789; GFX11-SDAG-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1] dlc1790; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x01791; GFX11-SDAG-FAKE16-NEXT:    s_endpgm1792;1793; GFX11-GISEL-TRUE16-LABEL: v_test_i16_x_sub_64_multi_use:1794; GFX11-GISEL-TRUE16:       ; %bb.0:1795; GFX11-GISEL-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241796; GFX11-GISEL-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01797; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1798; GFX11-GISEL-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01799; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1800; GFX11-GISEL-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3] glc dlc1801; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0)1802; GFX11-GISEL-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc1803; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0)1804; GFX11-GISEL-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0xffc0, v0.l1805; GFX11-GISEL-TRUE16-NEXT:    v_add_nc_u16 v0.h, 0xffc0, v0.h1806; GFX11-GISEL-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1] dlc1807; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x01808; GFX11-GISEL-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1] dlc1809; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x01810; GFX11-GISEL-TRUE16-NEXT:    s_endpgm1811;1812; GFX11-GISEL-FAKE16-LABEL: v_test_i16_x_sub_64_multi_use:1813; GFX11-GISEL-FAKE16:       ; %bb.0:1814; GFX11-GISEL-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241815; GFX11-GISEL-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01816; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1817; GFX11-GISEL-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01818; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1819; GFX11-GISEL-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc1820; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0)1821; GFX11-GISEL-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] glc dlc1822; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0)1823; GFX11-GISEL-FAKE16-NEXT:    v_add_nc_u16 v1, 0xffc0, v11824; GFX11-GISEL-FAKE16-NEXT:    v_add_nc_u16 v2, 0xffc0, v21825; GFX11-GISEL-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1] dlc1826; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x01827; GFX11-GISEL-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1] dlc1828; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x01829; GFX11-GISEL-FAKE16-NEXT:    s_endpgm1830  %tid = call i32 @llvm.amdgcn.workitem.id.x()1831  %tid.ext = sext i32 %tid to i641832  %gep = getelementptr inbounds i16, ptr addrspace(1) %in, i64 %tid.ext1833  %gep.out = getelementptr inbounds i16, ptr addrspace(1) %out, i64 %tid.ext1834  %x = load volatile i16, ptr addrspace(1) %gep1835  %y = load volatile i16, ptr addrspace(1) %gep1836  %result0 = sub i16 %x, 641837  %result1 = sub i16 %y, 641838  store volatile i16 %result0, ptr addrspace(1) %gep.out1839  store volatile i16 %result1, ptr addrspace(1) %gep.out1840  ret void1841}1842 1843define amdgpu_kernel void @v_test_v2i16_x_sub_64_64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1844; SI-SDAG-LABEL: v_test_v2i16_x_sub_64_64:1845; SI-SDAG:       ; %bb.0:1846; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91847; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0001848; SI-SDAG-NEXT:    s_mov_b32 s6, 01849; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v01850; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 01851; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1852; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]1853; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr641854; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]1855; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1856; SI-SDAG-NEXT:    v_subrev_i32_e32 v3, vcc, 64, v21857; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00001858; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v31859; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xffc00000, v21860; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641861; SI-SDAG-NEXT:    s_endpgm1862;1863; SI-GISEL-LABEL: v_test_v2i16_x_sub_64_64:1864; SI-GISEL:       ; %bb.0:1865; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91866; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v01867; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 01868; SI-GISEL-NEXT:    s_mov_b32 s6, 01869; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0001870; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1871; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]1872; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr641873; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)1874; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v21875; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffc0, v21876; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffffc0, v31877; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v21878; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v31879; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v31880; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v31881; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]1882; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641883; SI-GISEL-NEXT:    s_endpgm1884;1885; VI-SDAG-LABEL: v_test_v2i16_x_sub_64_64:1886; VI-SDAG:       ; %bb.0:1887; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241888; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v01889; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 641890; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1891; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s31892; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v21893; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1894; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]1895; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s11896; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v21897; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1898; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)1899; VI-SDAG-NEXT:    v_sub_u16_sdwa v2, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1900; VI-SDAG-NEXT:    v_subrev_u16_e32 v3, 64, v31901; VI-SDAG-NEXT:    v_or_b32_e32 v2, v3, v21902; VI-SDAG-NEXT:    flat_store_dword v[0:1], v21903; VI-SDAG-NEXT:    s_endpgm1904;1905; VI-GISEL-LABEL: v_test_v2i16_x_sub_64_64:1906; VI-GISEL:       ; %bb.0:1907; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241908; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v01909; VI-GISEL-NEXT:    v_not_b32_e32 v4, 631910; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1911; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s21912; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s31913; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21914; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1915; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]1916; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s01917; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s11918; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21919; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1920; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)1921; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xffc0, v31922; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1923; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v31924; VI-GISEL-NEXT:    flat_store_dword v[0:1], v21925; VI-GISEL-NEXT:    s_endpgm1926;1927; GFX9-LABEL: v_test_v2i16_x_sub_64_64:1928; GFX9:       ; %bb.0:1929; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241930; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v01931; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1932; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]1933; GFX9-NEXT:    s_waitcnt vmcnt(0)1934; GFX9-NEXT:    v_pk_sub_i16 v1, v1, 64 op_sel_hi:[1,0]1935; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]1936; GFX9-NEXT:    s_endpgm1937;1938; GFX10-LABEL: v_test_v2i16_x_sub_64_64:1939; GFX10:       ; %bb.0:1940; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241941; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v01942; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1943; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]1944; GFX10-NEXT:    s_waitcnt vmcnt(0)1945; GFX10-NEXT:    v_pk_sub_i16 v1, v1, 64 op_sel_hi:[1,0]1946; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]1947; GFX10-NEXT:    s_endpgm1948;1949; GFX11-LABEL: v_test_v2i16_x_sub_64_64:1950; GFX11:       ; %bb.0:1951; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241952; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v01953; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)1954; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v01955; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1956; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]1957; GFX11-NEXT:    s_waitcnt vmcnt(0)1958; GFX11-NEXT:    v_pk_sub_i16 v1, v1, 64 op_sel_hi:[1,0]1959; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]1960; GFX11-NEXT:    s_endpgm1961  %tid = call i32 @llvm.amdgcn.workitem.id.x()1962  %tid.ext = sext i32 %tid to i641963  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext1964  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext1965  %x = load <2 x i16>, ptr addrspace(1) %gep1966  %result = sub <2 x i16> %x, <i16 64, i16 64>1967  store <2 x i16> %result, ptr addrspace(1) %gep.out1968  ret void1969}1970 1971define amdgpu_kernel void @v_test_v2i16_x_sub_7_64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1972; SI-SDAG-LABEL: v_test_v2i16_x_sub_7_64:1973; SI-SDAG:       ; %bb.0:1974; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91975; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0001976; SI-SDAG-NEXT:    s_mov_b32 s6, 01977; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v01978; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 01979; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1980; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]1981; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr641982; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]1983; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)1984; SI-SDAG-NEXT:    v_add_i32_e32 v3, vcc, -7, v21985; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00001986; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v31987; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xffc00000, v21988; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641989; SI-SDAG-NEXT:    s_endpgm1990;1991; SI-GISEL-LABEL: v_test_v2i16_x_sub_7_64:1992; SI-GISEL:       ; %bb.0:1993; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91994; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v01995; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 01996; SI-GISEL-NEXT:    s_mov_b32 s6, 01997; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0001998; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1999; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]2000; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642001; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)2002; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v22003; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, -7, v22004; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffffc0, v32005; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v22006; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v32007; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v32008; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32009; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]2010; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642011; SI-GISEL-NEXT:    s_endpgm2012;2013; VI-SDAG-LABEL: v_test_v2i16_x_sub_7_64:2014; VI-SDAG:       ; %bb.0:2015; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242016; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v02017; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 642018; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2019; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s32020; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v22021; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2022; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]2023; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s12024; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v22025; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2026; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)2027; VI-SDAG-NEXT:    v_add_u16_e32 v2, -7, v32028; VI-SDAG-NEXT:    v_sub_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2029; VI-SDAG-NEXT:    v_or_b32_e32 v2, v2, v32030; VI-SDAG-NEXT:    flat_store_dword v[0:1], v22031; VI-SDAG-NEXT:    s_endpgm2032;2033; VI-GISEL-LABEL: v_test_v2i16_x_sub_7_64:2034; VI-GISEL:       ; %bb.0:2035; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242036; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v02037; VI-GISEL-NEXT:    v_not_b32_e32 v4, 632038; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2039; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s22040; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s32041; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22042; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2043; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]2044; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s02045; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s12046; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22047; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2048; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)2049; VI-GISEL-NEXT:    v_add_u16_e32 v2, -7, v32050; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2051; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32052; VI-GISEL-NEXT:    flat_store_dword v[0:1], v22053; VI-GISEL-NEXT:    s_endpgm2054;2055; GFX9-SDAG-LABEL: v_test_v2i16_x_sub_7_64:2056; GFX9-SDAG:       ; %bb.0:2057; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242058; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02059; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2060; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]2061; GFX9-SDAG-NEXT:    s_mov_b32 s2, 0x4000072062; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)2063; GFX9-SDAG-NEXT:    v_pk_sub_i16 v1, v1, s22064; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]2065; GFX9-SDAG-NEXT:    s_endpgm2066;2067; GFX9-GISEL-LABEL: v_test_v2i16_x_sub_7_64:2068; GFX9-GISEL:       ; %bb.0:2069; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242070; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02071; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4000072072; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2073; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]2074; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)2075; GFX9-GISEL-NEXT:    v_pk_sub_i16 v1, v1, v22076; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]2077; GFX9-GISEL-NEXT:    s_endpgm2078;2079; GFX10-LABEL: v_test_v2i16_x_sub_7_64:2080; GFX10:       ; %bb.0:2081; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242082; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v02083; GFX10-NEXT:    s_waitcnt lgkmcnt(0)2084; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]2085; GFX10-NEXT:    s_waitcnt vmcnt(0)2086; GFX10-NEXT:    v_pk_sub_i16 v1, v1, 0x4000072087; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]2088; GFX10-NEXT:    s_endpgm2089;2090; GFX11-LABEL: v_test_v2i16_x_sub_7_64:2091; GFX11:       ; %bb.0:2092; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242093; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v02094; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)2095; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v02096; GFX11-NEXT:    s_waitcnt lgkmcnt(0)2097; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]2098; GFX11-NEXT:    s_waitcnt vmcnt(0)2099; GFX11-NEXT:    v_pk_sub_i16 v1, v1, 0x4000072100; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]2101; GFX11-NEXT:    s_endpgm2102  %tid = call i32 @llvm.amdgcn.workitem.id.x()2103  %tid.ext = sext i32 %tid to i642104  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext2105  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext2106  %x = load <2 x i16>, ptr addrspace(1) %gep2107  %result = sub <2 x i16> %x, <i16 7, i16 64>2108  store <2 x i16> %result, ptr addrspace(1) %gep.out2109  ret void2110}2111 2112define amdgpu_kernel void @v_test_v2i16_x_sub_64_123(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2113; SI-SDAG-LABEL: v_test_v2i16_x_sub_64_123:2114; SI-SDAG:       ; %bb.0:2115; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92116; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0002117; SI-SDAG-NEXT:    s_mov_b32 s6, 02118; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02119; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 02120; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2121; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]2122; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642123; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]2124; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)2125; SI-SDAG-NEXT:    v_subrev_i32_e32 v3, vcc, 64, v22126; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00002127; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v32128; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xff850000, v22129; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642130; SI-SDAG-NEXT:    s_endpgm2131;2132; SI-GISEL-LABEL: v_test_v2i16_x_sub_64_123:2133; SI-GISEL:       ; %bb.0:2134; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92135; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02136; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 02137; SI-GISEL-NEXT:    s_mov_b32 s6, 02138; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0002139; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2140; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]2141; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642142; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)2143; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v22144; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffc0, v22145; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffff85, v32146; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v22147; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v32148; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v32149; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32150; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]2151; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642152; SI-GISEL-NEXT:    s_endpgm2153;2154; VI-SDAG-LABEL: v_test_v2i16_x_sub_64_123:2155; VI-SDAG:       ; %bb.0:2156; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242157; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v02158; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff852159; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2160; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s32161; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v22162; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2163; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]2164; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s12165; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v22166; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2167; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)2168; VI-SDAG-NEXT:    v_add_u16_sdwa v2, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2169; VI-SDAG-NEXT:    v_subrev_u16_e32 v3, 64, v32170; VI-SDAG-NEXT:    v_or_b32_e32 v2, v3, v22171; VI-SDAG-NEXT:    flat_store_dword v[0:1], v22172; VI-SDAG-NEXT:    s_endpgm2173;2174; VI-GISEL-LABEL: v_test_v2i16_x_sub_64_123:2175; VI-GISEL:       ; %bb.0:2176; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242177; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v02178; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff852179; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2180; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s22181; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s32182; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22183; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2184; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]2185; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s02186; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s12187; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22188; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2189; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)2190; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xffc0, v32191; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2192; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32193; VI-GISEL-NEXT:    flat_store_dword v[0:1], v22194; VI-GISEL-NEXT:    s_endpgm2195;2196; GFX9-SDAG-LABEL: v_test_v2i16_x_sub_64_123:2197; GFX9-SDAG:       ; %bb.0:2198; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242199; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02200; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2201; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]2202; GFX9-SDAG-NEXT:    s_mov_b32 s2, 0x7b00402203; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)2204; GFX9-SDAG-NEXT:    v_pk_sub_i16 v1, v1, s22205; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]2206; GFX9-SDAG-NEXT:    s_endpgm2207;2208; GFX9-GISEL-LABEL: v_test_v2i16_x_sub_64_123:2209; GFX9-GISEL:       ; %bb.0:2210; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242211; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02212; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7b00402213; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2214; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]2215; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)2216; GFX9-GISEL-NEXT:    v_pk_sub_i16 v1, v1, v22217; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]2218; GFX9-GISEL-NEXT:    s_endpgm2219;2220; GFX10-LABEL: v_test_v2i16_x_sub_64_123:2221; GFX10:       ; %bb.0:2222; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242223; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v02224; GFX10-NEXT:    s_waitcnt lgkmcnt(0)2225; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]2226; GFX10-NEXT:    s_waitcnt vmcnt(0)2227; GFX10-NEXT:    v_pk_sub_i16 v1, v1, 0x7b00402228; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]2229; GFX10-NEXT:    s_endpgm2230;2231; GFX11-LABEL: v_test_v2i16_x_sub_64_123:2232; GFX11:       ; %bb.0:2233; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242234; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v02235; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)2236; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v02237; GFX11-NEXT:    s_waitcnt lgkmcnt(0)2238; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]2239; GFX11-NEXT:    s_waitcnt vmcnt(0)2240; GFX11-NEXT:    v_pk_sub_i16 v1, v1, 0x7b00402241; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]2242; GFX11-NEXT:    s_endpgm2243  %tid = call i32 @llvm.amdgcn.workitem.id.x()2244  %tid.ext = sext i32 %tid to i642245  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext2246  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext2247  %x = load <2 x i16>, ptr addrspace(1) %gep2248  %result = sub <2 x i16> %x, <i16 64, i16 123>2249  store <2 x i16> %result, ptr addrspace(1) %gep.out2250  ret void2251}2252 2253; Can fold 0 and inline immediate in other half.2254define amdgpu_kernel void @v_test_v2i16_x_sub_7_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2255; SI-SDAG-LABEL: v_test_v2i16_x_sub_7_0:2256; SI-SDAG:       ; %bb.0:2257; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92258; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0002259; SI-SDAG-NEXT:    s_mov_b32 s6, 02260; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02261; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 02262; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2263; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]2264; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642265; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]2266; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)2267; SI-SDAG-NEXT:    v_add_i32_e32 v3, vcc, -7, v22268; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff2269; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v3, v22270; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642271; SI-SDAG-NEXT:    s_endpgm2272;2273; SI-GISEL-LABEL: v_test_v2i16_x_sub_7_0:2274; SI-GISEL:       ; %bb.0:2275; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92276; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02277; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 02278; SI-GISEL-NEXT:    s_mov_b32 s6, 02279; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0002280; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2281; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]2282; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642283; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)2284; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v22285; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, -7, v22286; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v22287; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v32288; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32289; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]2290; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642291; SI-GISEL-NEXT:    s_endpgm2292;2293; VI-SDAG-LABEL: v_test_v2i16_x_sub_7_0:2294; VI-SDAG:       ; %bb.0:2295; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242296; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v02297; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2298; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s32299; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v22300; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2301; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]2302; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s12303; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v22304; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2305; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)2306; VI-SDAG-NEXT:    v_and_b32_e32 v2, 0xffff0000, v32307; VI-SDAG-NEXT:    v_add_u16_e32 v3, -7, v32308; VI-SDAG-NEXT:    v_or_b32_e32 v2, v3, v22309; VI-SDAG-NEXT:    flat_store_dword v[0:1], v22310; VI-SDAG-NEXT:    s_endpgm2311;2312; VI-GISEL-LABEL: v_test_v2i16_x_sub_7_0:2313; VI-GISEL:       ; %bb.0:2314; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242315; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v02316; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2317; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s22318; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s32319; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22320; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2321; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]2322; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s02323; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22324; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s12325; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2326; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)2327; VI-GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v32328; VI-GISEL-NEXT:    v_add_u16_e32 v3, -7, v32329; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 16, v22330; VI-GISEL-NEXT:    v_or_b32_e32 v2, v3, v22331; VI-GISEL-NEXT:    flat_store_dword v[0:1], v22332; VI-GISEL-NEXT:    s_endpgm2333;2334; GFX9-LABEL: v_test_v2i16_x_sub_7_0:2335; GFX9:       ; %bb.0:2336; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242337; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v02338; GFX9-NEXT:    s_waitcnt lgkmcnt(0)2339; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]2340; GFX9-NEXT:    s_waitcnt vmcnt(0)2341; GFX9-NEXT:    v_pk_sub_i16 v1, v1, 72342; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]2343; GFX9-NEXT:    s_endpgm2344;2345; GFX10-LABEL: v_test_v2i16_x_sub_7_0:2346; GFX10:       ; %bb.0:2347; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242348; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v02349; GFX10-NEXT:    s_waitcnt lgkmcnt(0)2350; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]2351; GFX10-NEXT:    s_waitcnt vmcnt(0)2352; GFX10-NEXT:    v_pk_sub_i16 v1, v1, 72353; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]2354; GFX10-NEXT:    s_endpgm2355;2356; GFX11-LABEL: v_test_v2i16_x_sub_7_0:2357; GFX11:       ; %bb.0:2358; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242359; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v02360; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)2361; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v02362; GFX11-NEXT:    s_waitcnt lgkmcnt(0)2363; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]2364; GFX11-NEXT:    s_waitcnt vmcnt(0)2365; GFX11-NEXT:    v_pk_sub_i16 v1, v1, 72366; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]2367; GFX11-NEXT:    s_endpgm2368  %tid = call i32 @llvm.amdgcn.workitem.id.x()2369  %tid.ext = sext i32 %tid to i642370  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext2371  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext2372  %x = load <2 x i16>, ptr addrspace(1) %gep2373  %result = sub <2 x i16> %x, <i16 7, i16 0>2374  store <2 x i16> %result, ptr addrspace(1) %gep.out2375  ret void2376}2377 2378; Can fold 0 and inline immediate in other half.2379define amdgpu_kernel void @v_test_v2i16_x_sub_0_16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2380; SI-SDAG-LABEL: v_test_v2i16_x_sub_0_16:2381; SI-SDAG:       ; %bb.0:2382; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92383; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0002384; SI-SDAG-NEXT:    s_mov_b32 s6, 02385; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02386; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 02387; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2388; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]2389; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642390; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]2391; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)2392; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xfff00000, v22393; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642394; SI-SDAG-NEXT:    s_endpgm2395;2396; SI-GISEL-LABEL: v_test_v2i16_x_sub_0_16:2397; SI-GISEL:       ; %bb.0:2398; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92399; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02400; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 02401; SI-GISEL-NEXT:    s_mov_b32 s6, 02402; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0002403; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2404; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]2405; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642406; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)2407; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v22408; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, -16, v32409; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v22410; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v32411; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v32412; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32413; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]2414; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642415; SI-GISEL-NEXT:    s_endpgm2416;2417; VI-SDAG-LABEL: v_test_v2i16_x_sub_0_16:2418; VI-SDAG:       ; %bb.0:2419; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242420; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v02421; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2422; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s32423; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v22424; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2425; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]2426; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v22427; VI-SDAG-NEXT:    v_mov_b32_e32 v2, -162428; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s12429; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2430; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)2431; VI-SDAG-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2432; VI-SDAG-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2433; VI-SDAG-NEXT:    flat_store_dword v[0:1], v22434; VI-SDAG-NEXT:    s_endpgm2435;2436; VI-GISEL-LABEL: v_test_v2i16_x_sub_0_16:2437; VI-GISEL:       ; %bb.0:2438; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242439; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v02440; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2441; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s22442; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s32443; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22444; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2445; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]2446; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s02447; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22448; VI-GISEL-NEXT:    v_mov_b32_e32 v2, -162449; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s12450; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2451; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)2452; VI-GISEL-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2453; VI-GISEL-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2454; VI-GISEL-NEXT:    flat_store_dword v[0:1], v22455; VI-GISEL-NEXT:    s_endpgm2456;2457; GFX9-LABEL: v_test_v2i16_x_sub_0_16:2458; GFX9:       ; %bb.0:2459; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242460; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v02461; GFX9-NEXT:    s_waitcnt lgkmcnt(0)2462; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]2463; GFX9-NEXT:    s_waitcnt vmcnt(0)2464; GFX9-NEXT:    v_pk_sub_i16 v1, v1, 16 op_sel:[0,1] op_sel_hi:[1,0]2465; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]2466; GFX9-NEXT:    s_endpgm2467;2468; GFX10-LABEL: v_test_v2i16_x_sub_0_16:2469; GFX10:       ; %bb.0:2470; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242471; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v02472; GFX10-NEXT:    s_waitcnt lgkmcnt(0)2473; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]2474; GFX10-NEXT:    s_waitcnt vmcnt(0)2475; GFX10-NEXT:    v_pk_sub_i16 v1, v1, 16 op_sel:[0,1] op_sel_hi:[1,0]2476; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]2477; GFX10-NEXT:    s_endpgm2478;2479; GFX11-LABEL: v_test_v2i16_x_sub_0_16:2480; GFX11:       ; %bb.0:2481; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242482; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v02483; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)2484; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v02485; GFX11-NEXT:    s_waitcnt lgkmcnt(0)2486; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]2487; GFX11-NEXT:    s_waitcnt vmcnt(0)2488; GFX11-NEXT:    v_pk_sub_i16 v1, v1, 16 op_sel:[0,1] op_sel_hi:[1,0]2489; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]2490; GFX11-NEXT:    s_endpgm2491  %tid = call i32 @llvm.amdgcn.workitem.id.x()2492  %tid.ext = sext i32 %tid to i642493  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext2494  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext2495  %x = load <2 x i16>, ptr addrspace(1) %gep2496  %result = sub <2 x i16> %x, <i16 0, i16 16>2497  store <2 x i16> %result, ptr addrspace(1) %gep.out2498  ret void2499}2500 2501define amdgpu_kernel void @v_test_v2i16_x_sub_0_1_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2502; SI-SDAG-LABEL: v_test_v2i16_x_sub_0_1_0:2503; SI-SDAG:       ; %bb.0:2504; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92505; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0002506; SI-SDAG-NEXT:    s_mov_b32 s6, 02507; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02508; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 02509; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2510; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]2511; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642512; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]2513; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)2514; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0x3c000000, v22515; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642516; SI-SDAG-NEXT:    s_endpgm2517;2518; SI-GISEL-LABEL: v_test_v2i16_x_sub_0_1_0:2519; SI-GISEL:       ; %bb.0:2520; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92521; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02522; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 02523; SI-GISEL-NEXT:    s_mov_b32 s6, 02524; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0002525; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2526; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]2527; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642528; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)2529; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v22530; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0x3c00, v32531; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v22532; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v32533; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v32534; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32535; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]2536; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642537; SI-GISEL-NEXT:    s_endpgm2538;2539; VI-SDAG-LABEL: v_test_v2i16_x_sub_0_1_0:2540; VI-SDAG:       ; %bb.0:2541; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242542; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v02543; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2544; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s32545; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v22546; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2547; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]2548; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v22549; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x3c002550; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s12551; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2552; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)2553; VI-SDAG-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2554; VI-SDAG-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2555; VI-SDAG-NEXT:    flat_store_dword v[0:1], v22556; VI-SDAG-NEXT:    s_endpgm2557;2558; VI-GISEL-LABEL: v_test_v2i16_x_sub_0_1_0:2559; VI-GISEL:       ; %bb.0:2560; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242561; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v02562; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2563; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s22564; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s32565; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22566; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2567; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]2568; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s02569; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22570; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x3c002571; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s12572; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2573; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)2574; VI-GISEL-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2575; VI-GISEL-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2576; VI-GISEL-NEXT:    flat_store_dword v[0:1], v22577; VI-GISEL-NEXT:    s_endpgm2578;2579; GFX9-SDAG-LABEL: v_test_v2i16_x_sub_0_1_0:2580; GFX9-SDAG:       ; %bb.0:2581; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242582; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02583; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2584; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]2585; GFX9-SDAG-NEXT:    s_brev_b32 s2, 352586; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)2587; GFX9-SDAG-NEXT:    v_pk_sub_i16 v1, v1, s22588; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]2589; GFX9-SDAG-NEXT:    s_endpgm2590;2591; GFX9-GISEL-LABEL: v_test_v2i16_x_sub_0_1_0:2592; GFX9-GISEL:       ; %bb.0:2593; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242594; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02595; GFX9-GISEL-NEXT:    v_bfrev_b32_e32 v2, 352596; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2597; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]2598; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)2599; GFX9-GISEL-NEXT:    v_pk_sub_i16 v1, v1, v22600; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]2601; GFX9-GISEL-NEXT:    s_endpgm2602;2603; GFX10-LABEL: v_test_v2i16_x_sub_0_1_0:2604; GFX10:       ; %bb.0:2605; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242606; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v02607; GFX10-NEXT:    s_waitcnt lgkmcnt(0)2608; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]2609; GFX10-NEXT:    s_waitcnt vmcnt(0)2610; GFX10-NEXT:    v_pk_sub_i16 v1, v1, 0xc40000002611; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]2612; GFX10-NEXT:    s_endpgm2613;2614; GFX11-LABEL: v_test_v2i16_x_sub_0_1_0:2615; GFX11:       ; %bb.0:2616; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242617; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v02618; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)2619; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v02620; GFX11-NEXT:    s_waitcnt lgkmcnt(0)2621; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]2622; GFX11-NEXT:    s_waitcnt vmcnt(0)2623; GFX11-NEXT:    v_pk_sub_i16 v1, v1, 0xc40000002624; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]2625; GFX11-NEXT:    s_endpgm2626  %tid = call i32 @llvm.amdgcn.workitem.id.x()2627  %tid.ext = sext i32 %tid to i642628  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext2629  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext2630  %x = load <2 x i16>, ptr addrspace(1) %gep2631  %result = sub <2 x i16> %x, <i16 0, i16 -15360>2632  store <2 x i16> %result, ptr addrspace(1) %gep.out2633  ret void2634}2635 2636define amdgpu_kernel void @v_test_v2i16_x_sub_0_neg1_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2637; SI-SDAG-LABEL: v_test_v2i16_x_sub_0_neg1_0:2638; SI-SDAG:       ; %bb.0:2639; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92640; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0002641; SI-SDAG-NEXT:    s_mov_b32 s6, 02642; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02643; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 02644; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2645; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]2646; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642647; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]2648; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)2649; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xbc000000, v22650; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642651; SI-SDAG-NEXT:    s_endpgm2652;2653; SI-GISEL-LABEL: v_test_v2i16_x_sub_0_neg1_0:2654; SI-GISEL:       ; %bb.0:2655; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92656; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02657; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 02658; SI-GISEL-NEXT:    s_mov_b32 s6, 02659; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0002660; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2661; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]2662; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642663; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)2664; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v22665; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffbc00, v32666; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v22667; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v32668; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v32669; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32670; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]2671; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642672; SI-GISEL-NEXT:    s_endpgm2673;2674; VI-SDAG-LABEL: v_test_v2i16_x_sub_0_neg1_0:2675; VI-SDAG:       ; %bb.0:2676; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242677; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v02678; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2679; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s32680; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v22681; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2682; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]2683; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v22684; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0xffffbc002685; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s12686; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2687; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)2688; VI-SDAG-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2689; VI-SDAG-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2690; VI-SDAG-NEXT:    flat_store_dword v[0:1], v22691; VI-SDAG-NEXT:    s_endpgm2692;2693; VI-GISEL-LABEL: v_test_v2i16_x_sub_0_neg1_0:2694; VI-GISEL:       ; %bb.0:2695; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242696; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v02697; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2698; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s22699; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s32700; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22701; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2702; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]2703; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s02704; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22705; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0xffffbc002706; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s12707; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2708; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)2709; VI-GISEL-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2710; VI-GISEL-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2711; VI-GISEL-NEXT:    flat_store_dword v[0:1], v22712; VI-GISEL-NEXT:    s_endpgm2713;2714; GFX9-SDAG-LABEL: v_test_v2i16_x_sub_0_neg1_0:2715; GFX9-SDAG:       ; %bb.0:2716; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242717; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02718; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2719; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]2720; GFX9-SDAG-NEXT:    s_brev_b32 s2, 342721; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)2722; GFX9-SDAG-NEXT:    v_pk_sub_i16 v1, v1, s22723; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]2724; GFX9-SDAG-NEXT:    s_endpgm2725;2726; GFX9-GISEL-LABEL: v_test_v2i16_x_sub_0_neg1_0:2727; GFX9-GISEL:       ; %bb.0:2728; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242729; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02730; GFX9-GISEL-NEXT:    v_bfrev_b32_e32 v2, 342731; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2732; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]2733; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)2734; GFX9-GISEL-NEXT:    v_pk_sub_i16 v1, v1, v22735; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]2736; GFX9-GISEL-NEXT:    s_endpgm2737;2738; GFX10-LABEL: v_test_v2i16_x_sub_0_neg1_0:2739; GFX10:       ; %bb.0:2740; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242741; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v02742; GFX10-NEXT:    s_waitcnt lgkmcnt(0)2743; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]2744; GFX10-NEXT:    s_waitcnt vmcnt(0)2745; GFX10-NEXT:    v_pk_sub_i16 v1, v1, 0x440000002746; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]2747; GFX10-NEXT:    s_endpgm2748;2749; GFX11-LABEL: v_test_v2i16_x_sub_0_neg1_0:2750; GFX11:       ; %bb.0:2751; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242752; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v02753; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)2754; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v02755; GFX11-NEXT:    s_waitcnt lgkmcnt(0)2756; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]2757; GFX11-NEXT:    s_waitcnt vmcnt(0)2758; GFX11-NEXT:    v_pk_sub_i16 v1, v1, 0x440000002759; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]2760; GFX11-NEXT:    s_endpgm2761  %tid = call i32 @llvm.amdgcn.workitem.id.x()2762  %tid.ext = sext i32 %tid to i642763  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext2764  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext2765  %x = load <2 x i16>, ptr addrspace(1) %gep2766  %result = sub <2 x i16> %x, <i16 0, i16 17408>2767  store <2 x i16> %result, ptr addrspace(1) %gep.out2768  ret void2769}2770 2771; -32 isn't an inline immediate, but 32 is2772define amdgpu_kernel void @v_test_v2i16_x_add_neg32_neg32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2773; SI-SDAG-LABEL: v_test_v2i16_x_add_neg32_neg32:2774; SI-SDAG:       ; %bb.0:2775; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92776; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0002777; SI-SDAG-NEXT:    s_mov_b32 s6, 02778; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02779; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 02780; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2781; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]2782; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642783; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]2784; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)2785; SI-SDAG-NEXT:    v_subrev_i32_e32 v3, vcc, 32, v22786; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00002787; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v32788; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xffe00000, v22789; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642790; SI-SDAG-NEXT:    s_endpgm2791;2792; SI-GISEL-LABEL: v_test_v2i16_x_add_neg32_neg32:2793; SI-GISEL:       ; %bb.0:2794; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92795; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02796; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 02797; SI-GISEL-NEXT:    s_mov_b32 s6, 02798; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0002799; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2800; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]2801; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642802; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)2803; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v22804; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffe0, v22805; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffffe0, v32806; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v22807; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v32808; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v32809; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32810; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]2811; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642812; SI-GISEL-NEXT:    s_endpgm2813;2814; VI-SDAG-LABEL: v_test_v2i16_x_add_neg32_neg32:2815; VI-SDAG:       ; %bb.0:2816; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242817; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v02818; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 322819; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2820; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s32821; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v22822; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2823; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]2824; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s12825; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v22826; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2827; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)2828; VI-SDAG-NEXT:    v_sub_u16_sdwa v2, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2829; VI-SDAG-NEXT:    v_subrev_u16_e32 v3, 32, v32830; VI-SDAG-NEXT:    v_or_b32_e32 v2, v3, v22831; VI-SDAG-NEXT:    flat_store_dword v[0:1], v22832; VI-SDAG-NEXT:    s_endpgm2833;2834; VI-GISEL-LABEL: v_test_v2i16_x_add_neg32_neg32:2835; VI-GISEL:       ; %bb.0:2836; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242837; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v02838; VI-GISEL-NEXT:    v_not_b32_e32 v4, 312839; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2840; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s22841; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s32842; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22843; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2844; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]2845; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s02846; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s12847; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22848; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2849; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)2850; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xffe0, v32851; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2852; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32853; VI-GISEL-NEXT:    flat_store_dword v[0:1], v22854; VI-GISEL-NEXT:    s_endpgm2855;2856; GFX9-LABEL: v_test_v2i16_x_add_neg32_neg32:2857; GFX9:       ; %bb.0:2858; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242859; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v02860; GFX9-NEXT:    s_waitcnt lgkmcnt(0)2861; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]2862; GFX9-NEXT:    s_waitcnt vmcnt(0)2863; GFX9-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel_hi:[1,0]2864; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]2865; GFX9-NEXT:    s_endpgm2866;2867; GFX10-LABEL: v_test_v2i16_x_add_neg32_neg32:2868; GFX10:       ; %bb.0:2869; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242870; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v02871; GFX10-NEXT:    s_waitcnt lgkmcnt(0)2872; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]2873; GFX10-NEXT:    s_waitcnt vmcnt(0)2874; GFX10-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel_hi:[1,0]2875; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]2876; GFX10-NEXT:    s_endpgm2877;2878; GFX11-LABEL: v_test_v2i16_x_add_neg32_neg32:2879; GFX11:       ; %bb.0:2880; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242881; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v02882; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)2883; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v02884; GFX11-NEXT:    s_waitcnt lgkmcnt(0)2885; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]2886; GFX11-NEXT:    s_waitcnt vmcnt(0)2887; GFX11-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel_hi:[1,0]2888; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]2889; GFX11-NEXT:    s_endpgm2890  %tid = call i32 @llvm.amdgcn.workitem.id.x()2891  %tid.ext = sext i32 %tid to i642892  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext2893  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext2894  %x = load <2 x i16>, ptr addrspace(1) %gep2895  %result = add <2 x i16> %x, <i16 -32, i16 -32>2896  store <2 x i16> %result, ptr addrspace(1) %gep.out2897  ret void2898}2899 2900define amdgpu_kernel void @v_test_v2i16_x_add_0_neg32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2901; SI-SDAG-LABEL: v_test_v2i16_x_add_0_neg32:2902; SI-SDAG:       ; %bb.0:2903; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92904; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0002905; SI-SDAG-NEXT:    s_mov_b32 s6, 02906; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v02907; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 02908; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2909; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]2910; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642911; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]2912; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)2913; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xffe00000, v22914; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642915; SI-SDAG-NEXT:    s_endpgm2916;2917; SI-GISEL-LABEL: v_test_v2i16_x_add_0_neg32:2918; SI-GISEL:       ; %bb.0:2919; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92920; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v02921; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 02922; SI-GISEL-NEXT:    s_mov_b32 s6, 02923; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0002924; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2925; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]2926; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr642927; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)2928; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v22929; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffffe0, v32930; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v22931; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v32932; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v32933; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v32934; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]2935; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642936; SI-GISEL-NEXT:    s_endpgm2937;2938; VI-SDAG-LABEL: v_test_v2i16_x_add_0_neg32:2939; VI-SDAG:       ; %bb.0:2940; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242941; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v02942; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)2943; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s32944; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v22945; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2946; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]2947; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v22948; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 322949; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s12950; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2951; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)2952; VI-SDAG-NEXT:    v_sub_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2953; VI-SDAG-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2954; VI-SDAG-NEXT:    flat_store_dword v[0:1], v22955; VI-SDAG-NEXT:    s_endpgm2956;2957; VI-GISEL-LABEL: v_test_v2i16_x_add_0_neg32:2958; VI-GISEL:       ; %bb.0:2959; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242960; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v02961; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2962; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s22963; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s32964; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22965; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2966; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]2967; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s02968; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v22969; VI-GISEL-NEXT:    v_not_b32_e32 v2, 312970; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s12971; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2972; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)2973; VI-GISEL-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2974; VI-GISEL-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2975; VI-GISEL-NEXT:    flat_store_dword v[0:1], v22976; VI-GISEL-NEXT:    s_endpgm2977;2978; GFX9-LABEL: v_test_v2i16_x_add_0_neg32:2979; GFX9:       ; %bb.0:2980; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242981; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v02982; GFX9-NEXT:    s_waitcnt lgkmcnt(0)2983; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]2984; GFX9-NEXT:    s_waitcnt vmcnt(0)2985; GFX9-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel:[0,1] op_sel_hi:[1,0]2986; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]2987; GFX9-NEXT:    s_endpgm2988;2989; GFX10-LABEL: v_test_v2i16_x_add_0_neg32:2990; GFX10:       ; %bb.0:2991; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242992; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v02993; GFX10-NEXT:    s_waitcnt lgkmcnt(0)2994; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]2995; GFX10-NEXT:    s_waitcnt vmcnt(0)2996; GFX10-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel:[0,1] op_sel_hi:[1,0]2997; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]2998; GFX10-NEXT:    s_endpgm2999;3000; GFX11-LABEL: v_test_v2i16_x_add_0_neg32:3001; GFX11:       ; %bb.0:3002; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243003; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v03004; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)3005; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v03006; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3007; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]3008; GFX11-NEXT:    s_waitcnt vmcnt(0)3009; GFX11-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel:[0,1] op_sel_hi:[1,0]3010; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]3011; GFX11-NEXT:    s_endpgm3012  %tid = call i32 @llvm.amdgcn.workitem.id.x()3013  %tid.ext = sext i32 %tid to i643014  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext3015  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext3016  %x = load <2 x i16>, ptr addrspace(1) %gep3017  %result = add <2 x i16> %x, <i16 0, i16 -32>3018  store <2 x i16> %result, ptr addrspace(1) %gep.out3019  ret void3020}3021 3022define amdgpu_kernel void @v_test_v2i16_x_add_neg32_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3023; SI-SDAG-LABEL: v_test_v2i16_x_add_neg32_0:3024; SI-SDAG:       ; %bb.0:3025; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93026; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0003027; SI-SDAG-NEXT:    s_mov_b32 s6, 03028; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03029; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 03030; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3031; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]3032; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643033; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]3034; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)3035; SI-SDAG-NEXT:    v_subrev_i32_e32 v3, vcc, 32, v23036; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff3037; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v3, v23038; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643039; SI-SDAG-NEXT:    s_endpgm3040;3041; SI-GISEL-LABEL: v_test_v2i16_x_add_neg32_0:3042; SI-GISEL:       ; %bb.0:3043; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93044; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03045; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 03046; SI-GISEL-NEXT:    s_mov_b32 s6, 03047; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0003048; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3049; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]3050; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643051; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)3052; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v23053; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffe0, v23054; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v23055; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v33056; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33057; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]3058; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643059; SI-GISEL-NEXT:    s_endpgm3060;3061; VI-SDAG-LABEL: v_test_v2i16_x_add_neg32_0:3062; VI-SDAG:       ; %bb.0:3063; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243064; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v03065; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3066; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s33067; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v23068; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3069; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]3070; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s13071; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v23072; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3073; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)3074; VI-SDAG-NEXT:    v_and_b32_e32 v2, 0xffff0000, v33075; VI-SDAG-NEXT:    v_subrev_u16_e32 v3, 32, v33076; VI-SDAG-NEXT:    v_or_b32_e32 v2, v3, v23077; VI-SDAG-NEXT:    flat_store_dword v[0:1], v23078; VI-SDAG-NEXT:    s_endpgm3079;3080; VI-GISEL-LABEL: v_test_v2i16_x_add_neg32_0:3081; VI-GISEL:       ; %bb.0:3082; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243083; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v03084; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3085; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s23086; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s33087; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23088; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3089; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]3090; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s03091; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23092; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s13093; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3094; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)3095; VI-GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v33096; VI-GISEL-NEXT:    v_add_u16_e32 v3, 0xffe0, v33097; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 16, v23098; VI-GISEL-NEXT:    v_or_b32_e32 v2, v3, v23099; VI-GISEL-NEXT:    flat_store_dword v[0:1], v23100; VI-GISEL-NEXT:    s_endpgm3101;3102; GFX9-LABEL: v_test_v2i16_x_add_neg32_0:3103; GFX9:       ; %bb.0:3104; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243105; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v03106; GFX9-NEXT:    s_waitcnt lgkmcnt(0)3107; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]3108; GFX9-NEXT:    s_waitcnt vmcnt(0)3109; GFX9-NEXT:    v_pk_sub_u16 v1, v1, 323110; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]3111; GFX9-NEXT:    s_endpgm3112;3113; GFX10-LABEL: v_test_v2i16_x_add_neg32_0:3114; GFX10:       ; %bb.0:3115; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243116; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v03117; GFX10-NEXT:    s_waitcnt lgkmcnt(0)3118; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]3119; GFX10-NEXT:    s_waitcnt vmcnt(0)3120; GFX10-NEXT:    v_pk_sub_u16 v1, v1, 323121; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]3122; GFX10-NEXT:    s_endpgm3123;3124; GFX11-LABEL: v_test_v2i16_x_add_neg32_0:3125; GFX11:       ; %bb.0:3126; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243127; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v03128; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)3129; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v03130; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3131; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]3132; GFX11-NEXT:    s_waitcnt vmcnt(0)3133; GFX11-NEXT:    v_pk_sub_u16 v1, v1, 323134; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]3135; GFX11-NEXT:    s_endpgm3136  %tid = call i32 @llvm.amdgcn.workitem.id.x()3137  %tid.ext = sext i32 %tid to i643138  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext3139  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext3140  %x = load <2 x i16>, ptr addrspace(1) %gep3141  %result = add <2 x i16> %x, <i16 -32, i16 0>3142  store <2 x i16> %result, ptr addrspace(1) %gep.out3143  ret void3144}3145 3146; 16 and -16 are both inline immediates3147define amdgpu_kernel void @v_test_v2i16_x_add_neg16_neg16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3148; SI-SDAG-LABEL: v_test_v2i16_x_add_neg16_neg16:3149; SI-SDAG:       ; %bb.0:3150; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93151; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0003152; SI-SDAG-NEXT:    s_mov_b32 s6, 03153; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03154; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 03155; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3156; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]3157; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643158; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]3159; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)3160; SI-SDAG-NEXT:    v_add_i32_e32 v3, vcc, -16, v23161; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00003162; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v33163; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xfff00000, v23164; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643165; SI-SDAG-NEXT:    s_endpgm3166;3167; SI-GISEL-LABEL: v_test_v2i16_x_add_neg16_neg16:3168; SI-GISEL:       ; %bb.0:3169; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93170; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03171; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 03172; SI-GISEL-NEXT:    s_mov_b32 s6, 03173; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0003174; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3175; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]3176; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643177; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)3178; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v23179; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, -16, v23180; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, -16, v33181; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v23182; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v33183; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v33184; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33185; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]3186; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643187; SI-GISEL-NEXT:    s_endpgm3188;3189; VI-SDAG-LABEL: v_test_v2i16_x_add_neg16_neg16:3190; VI-SDAG:       ; %bb.0:3191; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243192; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v03193; VI-SDAG-NEXT:    v_mov_b32_e32 v4, -163194; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3195; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s33196; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v23197; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3198; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]3199; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s13200; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v23201; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3202; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)3203; VI-SDAG-NEXT:    v_add_u16_e32 v2, -16, v33204; VI-SDAG-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3205; VI-SDAG-NEXT:    v_or_b32_e32 v2, v2, v33206; VI-SDAG-NEXT:    flat_store_dword v[0:1], v23207; VI-SDAG-NEXT:    s_endpgm3208;3209; VI-GISEL-LABEL: v_test_v2i16_x_add_neg16_neg16:3210; VI-GISEL:       ; %bb.0:3211; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243212; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v03213; VI-GISEL-NEXT:    v_mov_b32_e32 v4, -163214; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3215; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s23216; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s33217; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23218; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3219; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]3220; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s03221; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s13222; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23223; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3224; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)3225; VI-GISEL-NEXT:    v_add_u16_e32 v2, -16, v33226; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3227; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33228; VI-GISEL-NEXT:    flat_store_dword v[0:1], v23229; VI-GISEL-NEXT:    s_endpgm3230;3231; GFX9-LABEL: v_test_v2i16_x_add_neg16_neg16:3232; GFX9:       ; %bb.0:3233; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243234; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v03235; GFX9-NEXT:    s_waitcnt lgkmcnt(0)3236; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]3237; GFX9-NEXT:    s_waitcnt vmcnt(0)3238; GFX9-NEXT:    v_pk_add_u16 v1, v1, -16 op_sel_hi:[1,0]3239; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]3240; GFX9-NEXT:    s_endpgm3241;3242; GFX10-LABEL: v_test_v2i16_x_add_neg16_neg16:3243; GFX10:       ; %bb.0:3244; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243245; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v03246; GFX10-NEXT:    s_waitcnt lgkmcnt(0)3247; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]3248; GFX10-NEXT:    s_waitcnt vmcnt(0)3249; GFX10-NEXT:    v_pk_add_u16 v1, v1, -16 op_sel_hi:[1,0]3250; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]3251; GFX10-NEXT:    s_endpgm3252;3253; GFX11-LABEL: v_test_v2i16_x_add_neg16_neg16:3254; GFX11:       ; %bb.0:3255; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243256; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v03257; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)3258; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v03259; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3260; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]3261; GFX11-NEXT:    s_waitcnt vmcnt(0)3262; GFX11-NEXT:    v_pk_add_u16 v1, v1, -16 op_sel_hi:[1,0]3263; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]3264; GFX11-NEXT:    s_endpgm3265  %tid = call i32 @llvm.amdgcn.workitem.id.x()3266  %tid.ext = sext i32 %tid to i643267  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext3268  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext3269  %x = load <2 x i16>, ptr addrspace(1) %gep3270  %result = add <2 x i16> %x, <i16 -16, i16 -16>3271  store <2 x i16> %result, ptr addrspace(1) %gep.out3272  ret void3273}3274 3275define amdgpu_kernel void @v_test_v2i16_x_add_0_neg16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3276; SI-SDAG-LABEL: v_test_v2i16_x_add_0_neg16:3277; SI-SDAG:       ; %bb.0:3278; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93279; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0003280; SI-SDAG-NEXT:    s_mov_b32 s6, 03281; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03282; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 03283; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3284; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]3285; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643286; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]3287; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)3288; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xfff00000, v23289; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643290; SI-SDAG-NEXT:    s_endpgm3291;3292; SI-GISEL-LABEL: v_test_v2i16_x_add_0_neg16:3293; SI-GISEL:       ; %bb.0:3294; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93295; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03296; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 03297; SI-GISEL-NEXT:    s_mov_b32 s6, 03298; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0003299; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3300; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]3301; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643302; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)3303; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v23304; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, -16, v33305; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v23306; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v33307; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v33308; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33309; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]3310; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643311; SI-GISEL-NEXT:    s_endpgm3312;3313; VI-SDAG-LABEL: v_test_v2i16_x_add_0_neg16:3314; VI-SDAG:       ; %bb.0:3315; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243316; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v03317; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3318; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s33319; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v23320; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3321; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]3322; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v23323; VI-SDAG-NEXT:    v_mov_b32_e32 v2, -163324; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s13325; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3326; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)3327; VI-SDAG-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3328; VI-SDAG-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3329; VI-SDAG-NEXT:    flat_store_dword v[0:1], v23330; VI-SDAG-NEXT:    s_endpgm3331;3332; VI-GISEL-LABEL: v_test_v2i16_x_add_0_neg16:3333; VI-GISEL:       ; %bb.0:3334; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243335; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v03336; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3337; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s23338; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s33339; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23340; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3341; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]3342; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s03343; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23344; VI-GISEL-NEXT:    v_mov_b32_e32 v2, -163345; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s13346; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3347; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)3348; VI-GISEL-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3349; VI-GISEL-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3350; VI-GISEL-NEXT:    flat_store_dword v[0:1], v23351; VI-GISEL-NEXT:    s_endpgm3352;3353; GFX9-LABEL: v_test_v2i16_x_add_0_neg16:3354; GFX9:       ; %bb.0:3355; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243356; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v03357; GFX9-NEXT:    s_waitcnt lgkmcnt(0)3358; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]3359; GFX9-NEXT:    s_waitcnt vmcnt(0)3360; GFX9-NEXT:    v_pk_sub_u16 v1, v1, 16 op_sel:[0,1] op_sel_hi:[1,0]3361; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]3362; GFX9-NEXT:    s_endpgm3363;3364; GFX10-LABEL: v_test_v2i16_x_add_0_neg16:3365; GFX10:       ; %bb.0:3366; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243367; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v03368; GFX10-NEXT:    s_waitcnt lgkmcnt(0)3369; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]3370; GFX10-NEXT:    s_waitcnt vmcnt(0)3371; GFX10-NEXT:    v_pk_sub_u16 v1, v1, 16 op_sel:[0,1] op_sel_hi:[1,0]3372; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]3373; GFX10-NEXT:    s_endpgm3374;3375; GFX11-LABEL: v_test_v2i16_x_add_0_neg16:3376; GFX11:       ; %bb.0:3377; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243378; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v03379; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)3380; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v03381; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3382; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]3383; GFX11-NEXT:    s_waitcnt vmcnt(0)3384; GFX11-NEXT:    v_pk_sub_u16 v1, v1, 16 op_sel:[0,1] op_sel_hi:[1,0]3385; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]3386; GFX11-NEXT:    s_endpgm3387  %tid = call i32 @llvm.amdgcn.workitem.id.x()3388  %tid.ext = sext i32 %tid to i643389  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext3390  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext3391  %x = load <2 x i16>, ptr addrspace(1) %gep3392  %result = add <2 x i16> %x, <i16 0, i16 -16>3393  store <2 x i16> %result, ptr addrspace(1) %gep.out3394  ret void3395}3396 3397define amdgpu_kernel void @v_test_v2i16_x_add_neg16_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3398; SI-SDAG-LABEL: v_test_v2i16_x_add_neg16_0:3399; SI-SDAG:       ; %bb.0:3400; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93401; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0003402; SI-SDAG-NEXT:    s_mov_b32 s6, 03403; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03404; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 03405; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3406; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]3407; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643408; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]3409; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)3410; SI-SDAG-NEXT:    v_add_i32_e32 v3, vcc, -16, v23411; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff3412; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v3, v23413; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643414; SI-SDAG-NEXT:    s_endpgm3415;3416; SI-GISEL-LABEL: v_test_v2i16_x_add_neg16_0:3417; SI-GISEL:       ; %bb.0:3418; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93419; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03420; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 03421; SI-GISEL-NEXT:    s_mov_b32 s6, 03422; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0003423; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3424; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]3425; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643426; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)3427; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v23428; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, -16, v23429; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v23430; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v33431; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33432; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]3433; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643434; SI-GISEL-NEXT:    s_endpgm3435;3436; VI-SDAG-LABEL: v_test_v2i16_x_add_neg16_0:3437; VI-SDAG:       ; %bb.0:3438; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243439; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v03440; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3441; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s33442; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v23443; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3444; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]3445; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s13446; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v23447; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3448; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)3449; VI-SDAG-NEXT:    v_and_b32_e32 v2, 0xffff0000, v33450; VI-SDAG-NEXT:    v_add_u16_e32 v3, -16, v33451; VI-SDAG-NEXT:    v_or_b32_e32 v2, v3, v23452; VI-SDAG-NEXT:    flat_store_dword v[0:1], v23453; VI-SDAG-NEXT:    s_endpgm3454;3455; VI-GISEL-LABEL: v_test_v2i16_x_add_neg16_0:3456; VI-GISEL:       ; %bb.0:3457; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243458; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v03459; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3460; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s23461; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s33462; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23463; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3464; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]3465; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s03466; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23467; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s13468; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3469; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)3470; VI-GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v33471; VI-GISEL-NEXT:    v_add_u16_e32 v3, -16, v33472; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 16, v23473; VI-GISEL-NEXT:    v_or_b32_e32 v2, v3, v23474; VI-GISEL-NEXT:    flat_store_dword v[0:1], v23475; VI-GISEL-NEXT:    s_endpgm3476;3477; GFX9-LABEL: v_test_v2i16_x_add_neg16_0:3478; GFX9:       ; %bb.0:3479; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243480; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v03481; GFX9-NEXT:    s_waitcnt lgkmcnt(0)3482; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]3483; GFX9-NEXT:    s_waitcnt vmcnt(0)3484; GFX9-NEXT:    v_pk_sub_u16 v1, v1, 163485; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]3486; GFX9-NEXT:    s_endpgm3487;3488; GFX10-LABEL: v_test_v2i16_x_add_neg16_0:3489; GFX10:       ; %bb.0:3490; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243491; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v03492; GFX10-NEXT:    s_waitcnt lgkmcnt(0)3493; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]3494; GFX10-NEXT:    s_waitcnt vmcnt(0)3495; GFX10-NEXT:    v_pk_sub_u16 v1, v1, 163496; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]3497; GFX10-NEXT:    s_endpgm3498;3499; GFX11-LABEL: v_test_v2i16_x_add_neg16_0:3500; GFX11:       ; %bb.0:3501; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243502; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v03503; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)3504; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v03505; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3506; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]3507; GFX11-NEXT:    s_waitcnt vmcnt(0)3508; GFX11-NEXT:    v_pk_sub_u16 v1, v1, 163509; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]3510; GFX11-NEXT:    s_endpgm3511  %tid = call i32 @llvm.amdgcn.workitem.id.x()3512  %tid.ext = sext i32 %tid to i643513  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext3514  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext3515  %x = load <2 x i16>, ptr addrspace(1) %gep3516  %result = add <2 x i16> %x, <i16 -16, i16 0>3517  store <2 x i16> %result, ptr addrspace(1) %gep.out3518  ret void3519}3520 3521define amdgpu_kernel void @v_test_v2i16_x_add_neg_fpone(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3522; SI-SDAG-LABEL: v_test_v2i16_x_add_neg_fpone:3523; SI-SDAG:       ; %bb.0:3524; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93525; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0003526; SI-SDAG-NEXT:    s_mov_b32 s6, 03527; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03528; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 03529; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3530; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]3531; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643532; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]3533; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)3534; SI-SDAG-NEXT:    v_add_i32_e32 v3, vcc, 0xffffc400, v23535; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00003536; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v33537; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xc4000000, v23538; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643539; SI-SDAG-NEXT:    s_endpgm3540;3541; SI-GISEL-LABEL: v_test_v2i16_x_add_neg_fpone:3542; SI-GISEL:       ; %bb.0:3543; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93544; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03545; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 03546; SI-GISEL-NEXT:    s_mov_b32 s6, 03547; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0003548; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3549; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]3550; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643551; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)3552; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v23553; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffc400, v23554; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffc400, v33555; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v23556; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v33557; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v33558; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33559; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]3560; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643561; SI-GISEL-NEXT:    s_endpgm3562;3563; VI-SDAG-LABEL: v_test_v2i16_x_add_neg_fpone:3564; VI-SDAG:       ; %bb.0:3565; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243566; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v03567; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffc4003568; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3569; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s33570; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v23571; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3572; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]3573; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s13574; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v23575; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3576; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)3577; VI-SDAG-NEXT:    v_add_u16_e32 v2, 0xc400, v33578; VI-SDAG-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3579; VI-SDAG-NEXT:    v_or_b32_e32 v2, v2, v33580; VI-SDAG-NEXT:    flat_store_dword v[0:1], v23581; VI-SDAG-NEXT:    s_endpgm3582;3583; VI-GISEL-LABEL: v_test_v2i16_x_add_neg_fpone:3584; VI-GISEL:       ; %bb.0:3585; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243586; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v03587; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffc4003588; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3589; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s23590; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s33591; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23592; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3593; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]3594; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s03595; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s13596; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23597; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3598; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)3599; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xc400, v33600; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3601; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33602; VI-GISEL-NEXT:    flat_store_dword v[0:1], v23603; VI-GISEL-NEXT:    s_endpgm3604;3605; GFX9-SDAG-LABEL: v_test_v2i16_x_add_neg_fpone:3606; GFX9-SDAG:       ; %bb.0:3607; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243608; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03609; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3610; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]3611; GFX9-SDAG-NEXT:    s_movk_i32 s2, 0xc4003612; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)3613; GFX9-SDAG-NEXT:    v_pk_add_u16 v1, v1, s2 op_sel_hi:[1,0]3614; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]3615; GFX9-SDAG-NEXT:    s_endpgm3616;3617; GFX9-GISEL-LABEL: v_test_v2i16_x_add_neg_fpone:3618; GFX9-GISEL:       ; %bb.0:3619; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243620; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03621; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 0xc400c4003622; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3623; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]3624; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)3625; GFX9-GISEL-NEXT:    v_pk_add_u16 v1, v1, v23626; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]3627; GFX9-GISEL-NEXT:    s_endpgm3628;3629; GFX10-SDAG-LABEL: v_test_v2i16_x_add_neg_fpone:3630; GFX10-SDAG:       ; %bb.0:3631; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243632; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03633; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3634; GFX10-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]3635; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)3636; GFX10-SDAG-NEXT:    v_pk_add_u16 v1, 0xffffc400, v1 op_sel_hi:[0,1]3637; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]3638; GFX10-SDAG-NEXT:    s_endpgm3639;3640; GFX10-GISEL-LABEL: v_test_v2i16_x_add_neg_fpone:3641; GFX10-GISEL:       ; %bb.0:3642; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243643; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03644; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3645; GFX10-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]3646; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)3647; GFX10-GISEL-NEXT:    v_pk_add_u16 v1, 0xc400c400, v13648; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]3649; GFX10-GISEL-NEXT:    s_endpgm3650;3651; GFX11-SDAG-LABEL: v_test_v2i16_x_add_neg_fpone:3652; GFX11-SDAG:       ; %bb.0:3653; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243654; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v03655; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)3656; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03657; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3658; GFX11-SDAG-NEXT:    global_load_b32 v1, v0, s[2:3]3659; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)3660; GFX11-SDAG-NEXT:    v_pk_add_u16 v1, 0xffffc400, v1 op_sel_hi:[0,1]3661; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]3662; GFX11-SDAG-NEXT:    s_endpgm3663;3664; GFX11-GISEL-LABEL: v_test_v2i16_x_add_neg_fpone:3665; GFX11-GISEL:       ; %bb.0:3666; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243667; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v03668; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)3669; GFX11-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03670; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3671; GFX11-GISEL-NEXT:    global_load_b32 v1, v0, s[2:3]3672; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)3673; GFX11-GISEL-NEXT:    v_pk_add_u16 v1, 0xc400c400, v13674; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[0:1]3675; GFX11-GISEL-NEXT:    s_endpgm3676  %tid = call i32 @llvm.amdgcn.workitem.id.x()3677  %tid.ext = sext i32 %tid to i643678  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext3679  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext3680  %x = load <2 x i16>, ptr addrspace(1) %gep3681  %result = add <2 x i16> %x, <i16 -15360, i16 -15360>3682  store <2 x i16> %result, ptr addrspace(1) %gep.out3683  ret void3684}3685 3686define amdgpu_kernel void @v_test_v2i16_x_add_neg_negfpone(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3687; SI-SDAG-LABEL: v_test_v2i16_x_add_neg_negfpone:3688; SI-SDAG:       ; %bb.0:3689; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93690; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0003691; SI-SDAG-NEXT:    s_mov_b32 s6, 03692; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03693; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 03694; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3695; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]3696; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643697; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]3698; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)3699; SI-SDAG-NEXT:    v_add_i32_e32 v3, vcc, 0x4400, v23700; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00003701; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v33702; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0x44000000, v23703; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643704; SI-SDAG-NEXT:    s_endpgm3705;3706; SI-GISEL-LABEL: v_test_v2i16_x_add_neg_negfpone:3707; SI-GISEL:       ; %bb.0:3708; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93709; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03710; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 03711; SI-GISEL-NEXT:    s_mov_b32 s6, 03712; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0003713; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3714; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]3715; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643716; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)3717; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v23718; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0x4400, v23719; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0x4400, v33720; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v23721; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v33722; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v33723; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33724; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]3725; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643726; SI-GISEL-NEXT:    s_endpgm3727;3728; VI-SDAG-LABEL: v_test_v2i16_x_add_neg_negfpone:3729; VI-SDAG:       ; %bb.0:3730; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243731; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v03732; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0x44003733; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3734; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s33735; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v23736; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3737; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]3738; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s13739; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v23740; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3741; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)3742; VI-SDAG-NEXT:    v_add_u16_e32 v2, 0x4400, v33743; VI-SDAG-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3744; VI-SDAG-NEXT:    v_or_b32_e32 v2, v2, v33745; VI-SDAG-NEXT:    flat_store_dword v[0:1], v23746; VI-SDAG-NEXT:    s_endpgm3747;3748; VI-GISEL-LABEL: v_test_v2i16_x_add_neg_negfpone:3749; VI-GISEL:       ; %bb.0:3750; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243751; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v03752; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x44003753; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3754; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s23755; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s33756; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23757; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3758; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]3759; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s03760; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s13761; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23762; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3763; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)3764; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0x4400, v33765; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3766; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33767; VI-GISEL-NEXT:    flat_store_dword v[0:1], v23768; VI-GISEL-NEXT:    s_endpgm3769;3770; GFX9-SDAG-LABEL: v_test_v2i16_x_add_neg_negfpone:3771; GFX9-SDAG:       ; %bb.0:3772; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243773; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03774; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3775; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]3776; GFX9-SDAG-NEXT:    s_movk_i32 s2, 0x44003777; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)3778; GFX9-SDAG-NEXT:    v_pk_add_u16 v1, v1, s2 op_sel_hi:[1,0]3779; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]3780; GFX9-SDAG-NEXT:    s_endpgm3781;3782; GFX9-GISEL-LABEL: v_test_v2i16_x_add_neg_negfpone:3783; GFX9-GISEL:       ; %bb.0:3784; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243785; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03786; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 0x440044003787; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3788; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]3789; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)3790; GFX9-GISEL-NEXT:    v_pk_add_u16 v1, v1, v23791; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]3792; GFX9-GISEL-NEXT:    s_endpgm3793;3794; GFX10-SDAG-LABEL: v_test_v2i16_x_add_neg_negfpone:3795; GFX10-SDAG:       ; %bb.0:3796; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243797; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03798; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3799; GFX10-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]3800; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)3801; GFX10-SDAG-NEXT:    v_pk_add_u16 v1, 0x4400, v1 op_sel_hi:[0,1]3802; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]3803; GFX10-SDAG-NEXT:    s_endpgm3804;3805; GFX10-GISEL-LABEL: v_test_v2i16_x_add_neg_negfpone:3806; GFX10-GISEL:       ; %bb.0:3807; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243808; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03809; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3810; GFX10-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]3811; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)3812; GFX10-GISEL-NEXT:    v_pk_add_u16 v1, 0x44004400, v13813; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]3814; GFX10-GISEL-NEXT:    s_endpgm3815;3816; GFX11-SDAG-LABEL: v_test_v2i16_x_add_neg_negfpone:3817; GFX11-SDAG:       ; %bb.0:3818; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243819; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v03820; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)3821; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03822; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3823; GFX11-SDAG-NEXT:    global_load_b32 v1, v0, s[2:3]3824; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)3825; GFX11-SDAG-NEXT:    v_pk_add_u16 v1, 0x4400, v1 op_sel_hi:[0,1]3826; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]3827; GFX11-SDAG-NEXT:    s_endpgm3828;3829; GFX11-GISEL-LABEL: v_test_v2i16_x_add_neg_negfpone:3830; GFX11-GISEL:       ; %bb.0:3831; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243832; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v03833; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)3834; GFX11-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03835; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3836; GFX11-GISEL-NEXT:    global_load_b32 v1, v0, s[2:3]3837; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)3838; GFX11-GISEL-NEXT:    v_pk_add_u16 v1, 0x44004400, v13839; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[0:1]3840; GFX11-GISEL-NEXT:    s_endpgm3841  %tid = call i32 @llvm.amdgcn.workitem.id.x()3842  %tid.ext = sext i32 %tid to i643843  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext3844  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext3845  %x = load <2 x i16>, ptr addrspace(1) %gep3846  %result = add <2 x i16> %x, <i16 17408, i16 17408>3847  store <2 x i16> %result, ptr addrspace(1) %gep.out3848  ret void3849}3850 3851define amdgpu_kernel void @v_test_v2i16_x_add_neg_fptwo(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3852; SI-SDAG-LABEL: v_test_v2i16_x_add_neg_fptwo:3853; SI-SDAG:       ; %bb.0:3854; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93855; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0003856; SI-SDAG-NEXT:    s_mov_b32 s6, 03857; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03858; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 03859; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3860; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]3861; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643862; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]3863; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)3864; SI-SDAG-NEXT:    v_add_i32_e32 v3, vcc, 0x4000, v23865; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00003866; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v33867; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 2.0, v23868; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643869; SI-SDAG-NEXT:    s_endpgm3870;3871; SI-GISEL-LABEL: v_test_v2i16_x_add_neg_fptwo:3872; SI-GISEL:       ; %bb.0:3873; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93874; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v03875; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 03876; SI-GISEL-NEXT:    s_mov_b32 s6, 03877; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0003878; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3879; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]3880; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643881; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)3882; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v23883; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0x4000, v23884; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0x4000, v33885; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v23886; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v33887; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v33888; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33889; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]3890; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643891; SI-GISEL-NEXT:    s_endpgm3892;3893; VI-SDAG-LABEL: v_test_v2i16_x_add_neg_fptwo:3894; VI-SDAG:       ; %bb.0:3895; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243896; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v03897; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0x40003898; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3899; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s33900; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v23901; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3902; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]3903; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s13904; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v23905; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3906; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)3907; VI-SDAG-NEXT:    v_add_u16_e32 v2, 0x4000, v33908; VI-SDAG-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3909; VI-SDAG-NEXT:    v_or_b32_e32 v2, v2, v33910; VI-SDAG-NEXT:    flat_store_dword v[0:1], v23911; VI-SDAG-NEXT:    s_endpgm3912;3913; VI-GISEL-LABEL: v_test_v2i16_x_add_neg_fptwo:3914; VI-GISEL:       ; %bb.0:3915; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243916; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v03917; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x40003918; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)3919; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s23920; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s33921; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23922; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3923; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]3924; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s03925; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s13926; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v23927; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3928; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)3929; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0x4000, v33930; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3931; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v33932; VI-GISEL-NEXT:    flat_store_dword v[0:1], v23933; VI-GISEL-NEXT:    s_endpgm3934;3935; GFX9-LABEL: v_test_v2i16_x_add_neg_fptwo:3936; GFX9:       ; %bb.0:3937; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243938; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v03939; GFX9-NEXT:    s_waitcnt lgkmcnt(0)3940; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]3941; GFX9-NEXT:    s_waitcnt vmcnt(0)3942; GFX9-NEXT:    v_pk_add_u16 v1, v1, 2.0 op_sel:[0,1]3943; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]3944; GFX9-NEXT:    s_endpgm3945;3946; GFX10-LABEL: v_test_v2i16_x_add_neg_fptwo:3947; GFX10:       ; %bb.0:3948; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243949; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v03950; GFX10-NEXT:    s_waitcnt lgkmcnt(0)3951; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]3952; GFX10-NEXT:    s_waitcnt vmcnt(0)3953; GFX10-NEXT:    v_pk_add_u16 v1, v1, 2.0 op_sel:[0,1]3954; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]3955; GFX10-NEXT:    s_endpgm3956;3957; GFX11-LABEL: v_test_v2i16_x_add_neg_fptwo:3958; GFX11:       ; %bb.0:3959; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243960; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v03961; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)3962; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v03963; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3964; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]3965; GFX11-NEXT:    s_waitcnt vmcnt(0)3966; GFX11-NEXT:    v_pk_add_u16 v1, v1, 2.0 op_sel:[0,1]3967; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]3968; GFX11-NEXT:    s_endpgm3969  %tid = call i32 @llvm.amdgcn.workitem.id.x()3970  %tid.ext = sext i32 %tid to i643971  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext3972  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext3973  %x = load <2 x i16>, ptr addrspace(1) %gep3974  %result = add <2 x i16> %x, <i16 16384, i16 16384>3975  store <2 x i16> %result, ptr addrspace(1) %gep.out3976  ret void3977}3978 3979define amdgpu_kernel void @v_test_v2i16_x_add_neg_negfptwo(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3980; SI-SDAG-LABEL: v_test_v2i16_x_add_neg_negfptwo:3981; SI-SDAG:       ; %bb.0:3982; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x93983; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0003984; SI-SDAG-NEXT:    s_mov_b32 s6, 03985; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v03986; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 03987; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)3988; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]3989; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr643990; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]3991; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)3992; SI-SDAG-NEXT:    v_add_i32_e32 v3, vcc, 0xffffc000, v23993; SI-SDAG-NEXT:    s_mov_b32 s4, 0xffff00003994; SI-SDAG-NEXT:    v_bfi_b32 v2, s4, v2, v33995; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, -2.0, v23996; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr643997; SI-SDAG-NEXT:    s_endpgm3998;3999; SI-GISEL-LABEL: v_test_v2i16_x_add_neg_negfptwo:4000; SI-GISEL:       ; %bb.0:4001; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x94002; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v04003; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 04004; SI-GISEL-NEXT:    s_mov_b32 s6, 04005; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0004006; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4007; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]4008; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr644009; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)4010; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v24011; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffc000, v24012; SI-GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0xffffc000, v34013; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v24014; SI-GISEL-NEXT:    v_and_b32_e32 v3, 0xffff, v34015; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v34016; SI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v34017; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]4018; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr644019; SI-GISEL-NEXT:    s_endpgm4020;4021; VI-SDAG-LABEL: v_test_v2i16_x_add_neg_negfptwo:4022; VI-SDAG:       ; %bb.0:4023; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244024; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v04025; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffc0004026; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4027; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s34028; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v24029; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4030; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]4031; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s14032; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v24033; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4034; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)4035; VI-SDAG-NEXT:    v_add_u16_e32 v2, 0xc000, v34036; VI-SDAG-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD4037; VI-SDAG-NEXT:    v_or_b32_e32 v2, v2, v34038; VI-SDAG-NEXT:    flat_store_dword v[0:1], v24039; VI-SDAG-NEXT:    s_endpgm4040;4041; VI-GISEL-LABEL: v_test_v2i16_x_add_neg_negfptwo:4042; VI-GISEL:       ; %bb.0:4043; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244044; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v04045; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffc0004046; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4047; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s24048; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s34049; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v24050; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4051; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]4052; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s04053; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s14054; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v24055; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4056; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)4057; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xc000, v34058; VI-GISEL-NEXT:    v_add_u16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD4059; VI-GISEL-NEXT:    v_or_b32_e32 v2, v2, v34060; VI-GISEL-NEXT:    flat_store_dword v[0:1], v24061; VI-GISEL-NEXT:    s_endpgm4062;4063; GFX9-LABEL: v_test_v2i16_x_add_neg_negfptwo:4064; GFX9:       ; %bb.0:4065; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244066; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v04067; GFX9-NEXT:    s_waitcnt lgkmcnt(0)4068; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]4069; GFX9-NEXT:    s_waitcnt vmcnt(0)4070; GFX9-NEXT:    v_pk_add_u16 v1, v1, -2.0 op_sel:[0,1]4071; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]4072; GFX9-NEXT:    s_endpgm4073;4074; GFX10-LABEL: v_test_v2i16_x_add_neg_negfptwo:4075; GFX10:       ; %bb.0:4076; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244077; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v04078; GFX10-NEXT:    s_waitcnt lgkmcnt(0)4079; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]4080; GFX10-NEXT:    s_waitcnt vmcnt(0)4081; GFX10-NEXT:    v_pk_add_u16 v1, v1, -2.0 op_sel:[0,1]4082; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]4083; GFX10-NEXT:    s_endpgm4084;4085; GFX11-LABEL: v_test_v2i16_x_add_neg_negfptwo:4086; GFX11:       ; %bb.0:4087; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x244088; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v04089; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)4090; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v04091; GFX11-NEXT:    s_waitcnt lgkmcnt(0)4092; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]4093; GFX11-NEXT:    s_waitcnt vmcnt(0)4094; GFX11-NEXT:    v_pk_add_u16 v1, v1, -2.0 op_sel:[0,1]4095; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]4096; GFX11-NEXT:    s_endpgm4097  %tid = call i32 @llvm.amdgcn.workitem.id.x()4098  %tid.ext = sext i32 %tid to i644099  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext4100  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext4101  %x = load <2 x i16>, ptr addrspace(1) %gep4102  %result = add <2 x i16> %x, <i16 -16384, i16 -16384>4103  store <2 x i16> %result, ptr addrspace(1) %gep.out4104  ret void4105}4106 4107define amdgpu_kernel void @v_test_v2i16_x_add_undef_neg32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {4108; SI-SDAG-LABEL: v_test_v2i16_x_add_undef_neg32:4109; SI-SDAG:       ; %bb.0:4110; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x94111; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0004112; SI-SDAG-NEXT:    s_mov_b32 s6, 04113; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v04114; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 04115; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4116; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]4117; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr644118; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]4119; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)4120; SI-SDAG-NEXT:    v_and_b32_e32 v2, 0xffff0000, v24121; SI-SDAG-NEXT:    v_add_i32_e32 v2, vcc, 0xffe00000, v24122; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr644123; SI-SDAG-NEXT:    s_endpgm4124;4125; SI-GISEL-LABEL: v_test_v2i16_x_add_undef_neg32:4126; SI-GISEL:       ; %bb.0:4127; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x94128; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v04129; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 04130; SI-GISEL-NEXT:    s_mov_b32 s6, 04131; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0004132; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4133; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]4134; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr644135; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)4136; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v24137; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffe0, v24138; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v24139; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 16, v24140; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]4141; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr644142; SI-GISEL-NEXT:    s_endpgm4143;4144; VI-SDAG-LABEL: v_test_v2i16_x_add_undef_neg32:4145; VI-SDAG:       ; %bb.0:4146; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244147; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v04148; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4149; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s34150; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v24151; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4152; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]4153; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s14154; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v24155; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 324156; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4157; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)4158; VI-SDAG-NEXT:    v_sub_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD4159; VI-SDAG-NEXT:    flat_store_dword v[0:1], v24160; VI-SDAG-NEXT:    s_endpgm4161;4162; VI-GISEL-LABEL: v_test_v2i16_x_add_undef_neg32:4163; VI-GISEL:       ; %bb.0:4164; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244165; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v04166; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4167; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s24168; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s34169; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v24170; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4171; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]4172; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s04173; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v24174; VI-GISEL-NEXT:    v_not_b32_e32 v2, 314175; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s14176; VI-GISEL-NEXT:    s_and_b32 s0, 0xffff, s04177; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4178; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)4179; VI-GISEL-NEXT:    v_add_u16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD4180; VI-GISEL-NEXT:    v_or_b32_e32 v2, s0, v24181; VI-GISEL-NEXT:    flat_store_dword v[0:1], v24182; VI-GISEL-NEXT:    s_endpgm4183;4184; GFX9-LABEL: v_test_v2i16_x_add_undef_neg32:4185; GFX9:       ; %bb.0:4186; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244187; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v04188; GFX9-NEXT:    s_waitcnt lgkmcnt(0)4189; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]4190; GFX9-NEXT:    s_waitcnt vmcnt(0)4191; GFX9-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel:[0,1] op_sel_hi:[1,0]4192; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]4193; GFX9-NEXT:    s_endpgm4194;4195; GFX10-LABEL: v_test_v2i16_x_add_undef_neg32:4196; GFX10:       ; %bb.0:4197; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244198; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v04199; GFX10-NEXT:    s_waitcnt lgkmcnt(0)4200; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]4201; GFX10-NEXT:    s_waitcnt vmcnt(0)4202; GFX10-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel:[0,1] op_sel_hi:[1,0]4203; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]4204; GFX10-NEXT:    s_endpgm4205;4206; GFX11-SDAG-LABEL: v_test_v2i16_x_add_undef_neg32:4207; GFX11-SDAG:       ; %bb.0:4208; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x244209; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v04210; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)4211; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v04212; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4213; GFX11-SDAG-NEXT:    global_load_b32 v1, v0, s[2:3]4214; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)4215; GFX11-SDAG-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel:[0,1] op_sel_hi:[1,0]4216; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]4217; GFX11-SDAG-NEXT:    s_endpgm4218;4219; GFX11-GISEL-TRUE16-LABEL: v_test_v2i16_x_add_undef_neg32:4220; GFX11-GISEL-TRUE16:       ; %bb.0:4221; GFX11-GISEL-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x244222; GFX11-GISEL-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v04223; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)4224; GFX11-GISEL-TRUE16-NEXT:    v_lshlrev_b32_e32 v0, 2, v04225; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)4226; GFX11-GISEL-TRUE16-NEXT:    global_load_b32 v1, v0, s[2:3]4227; GFX11-GISEL-TRUE16-NEXT:    s_pack_ll_b32_b16 s2, s0, 0xffffffe04228; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0)4229; GFX11-GISEL-TRUE16-NEXT:    v_pk_add_u16 v1, v1, s24230; GFX11-GISEL-TRUE16-NEXT:    global_store_b32 v0, v1, s[0:1]4231; GFX11-GISEL-TRUE16-NEXT:    s_endpgm4232;4233; GFX11-GISEL-FAKE16-LABEL: v_test_v2i16_x_add_undef_neg32:4234; GFX11-GISEL-FAKE16:       ; %bb.0:4235; GFX11-GISEL-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x244236; GFX11-GISEL-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v04237; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)4238; GFX11-GISEL-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 2, v04239; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)4240; GFX11-GISEL-FAKE16-NEXT:    global_load_b32 v1, v0, s[2:3]4241; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0)4242; GFX11-GISEL-FAKE16-NEXT:    v_pk_sub_u16 v1, v1, 32 op_sel:[0,1] op_sel_hi:[1,0]4243; GFX11-GISEL-FAKE16-NEXT:    global_store_b32 v0, v1, s[0:1]4244; GFX11-GISEL-FAKE16-NEXT:    s_endpgm4245  %tid = call i32 @llvm.amdgcn.workitem.id.x()4246  %tid.ext = sext i32 %tid to i644247  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext4248  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext4249  %x = load <2 x i16>, ptr addrspace(1) %gep4250  %result = add <2 x i16> %x, <i16 poison, i16 -32>4251  store <2 x i16> %result, ptr addrspace(1) %gep.out4252  ret void4253}4254 4255define amdgpu_kernel void @v_test_v2i16_x_add_neg32_undef(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {4256; SI-SDAG-LABEL: v_test_v2i16_x_add_neg32_undef:4257; SI-SDAG:       ; %bb.0:4258; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x94259; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf0004260; SI-SDAG-NEXT:    s_mov_b32 s6, 04261; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v04262; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 04263; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4264; SI-SDAG-NEXT:    s_mov_b64 s[4:5], s[2:3]4265; SI-SDAG-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr644266; SI-SDAG-NEXT:    s_mov_b64 s[2:3], s[6:7]4267; SI-SDAG-NEXT:    s_waitcnt vmcnt(0)4268; SI-SDAG-NEXT:    v_subrev_i32_e32 v2, vcc, 32, v24269; SI-SDAG-NEXT:    v_and_b32_e32 v2, 0xffff, v24270; SI-SDAG-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr644271; SI-SDAG-NEXT:    s_endpgm4272;4273; SI-GISEL-LABEL: v_test_v2i16_x_add_neg32_undef:4274; SI-GISEL:       ; %bb.0:4275; SI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x94276; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v04277; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 04278; SI-GISEL-NEXT:    s_mov_b32 s6, 04279; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf0004280; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4281; SI-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]4282; SI-GISEL-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr644283; SI-GISEL-NEXT:    s_waitcnt vmcnt(0)4284; SI-GISEL-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffe0, v24285; SI-GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v24286; SI-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]4287; SI-GISEL-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr644288; SI-GISEL-NEXT:    s_endpgm4289;4290; VI-SDAG-LABEL: v_test_v2i16_x_add_neg32_undef:4291; VI-SDAG:       ; %bb.0:4292; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244293; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 2, v04294; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4295; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s34296; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v24297; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4298; VI-SDAG-NEXT:    flat_load_dword v3, v[0:1]4299; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s14300; VI-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s0, v24301; VI-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4302; VI-SDAG-NEXT:    s_waitcnt vmcnt(0)4303; VI-SDAG-NEXT:    v_subrev_u16_e32 v2, 32, v34304; VI-SDAG-NEXT:    flat_store_dword v[0:1], v24305; VI-SDAG-NEXT:    s_endpgm4306;4307; VI-GISEL-LABEL: v_test_v2i16_x_add_neg32_undef:4308; VI-GISEL:       ; %bb.0:4309; VI-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244310; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 2, v04311; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4312; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s24313; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s34314; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v24315; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4316; VI-GISEL-NEXT:    flat_load_dword v3, v[0:1]4317; VI-GISEL-NEXT:    s_and_b32 s2, 0xffff, s04318; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s04319; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s14320; VI-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v24321; VI-GISEL-NEXT:    s_lshl_b32 s0, s2, 164322; VI-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4323; VI-GISEL-NEXT:    s_waitcnt vmcnt(0)4324; VI-GISEL-NEXT:    v_add_u16_e32 v2, 0xffe0, v34325; VI-GISEL-NEXT:    v_or_b32_e32 v2, s0, v24326; VI-GISEL-NEXT:    flat_store_dword v[0:1], v24327; VI-GISEL-NEXT:    s_endpgm4328;4329; GFX9-SDAG-LABEL: v_test_v2i16_x_add_neg32_undef:4330; GFX9-SDAG:       ; %bb.0:4331; GFX9-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244332; GFX9-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v04333; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4334; GFX9-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]4335; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)4336; GFX9-SDAG-NEXT:    v_pk_sub_u16 v1, v1, 324337; GFX9-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]4338; GFX9-SDAG-NEXT:    s_endpgm4339;4340; GFX9-GISEL-LABEL: v_test_v2i16_x_add_neg32_undef:4341; GFX9-GISEL:       ; %bb.0:4342; GFX9-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244343; GFX9-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v04344; GFX9-GISEL-NEXT:    v_not_b32_e32 v2, 314345; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4346; GFX9-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]4347; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)4348; GFX9-GISEL-NEXT:    v_pk_add_u16 v1, v1, v24349; GFX9-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]4350; GFX9-GISEL-NEXT:    s_endpgm4351;4352; GFX10-SDAG-LABEL: v_test_v2i16_x_add_neg32_undef:4353; GFX10-SDAG:       ; %bb.0:4354; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244355; GFX10-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v04356; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4357; GFX10-SDAG-NEXT:    global_load_dword v1, v0, s[2:3]4358; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)4359; GFX10-SDAG-NEXT:    v_pk_sub_u16 v1, v1, 324360; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]4361; GFX10-SDAG-NEXT:    s_endpgm4362;4363; GFX10-GISEL-LABEL: v_test_v2i16_x_add_neg32_undef:4364; GFX10-GISEL:       ; %bb.0:4365; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x244366; GFX10-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v04367; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4368; GFX10-GISEL-NEXT:    global_load_dword v1, v0, s[2:3]4369; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)4370; GFX10-GISEL-NEXT:    v_pk_add_u16 v1, 0xffffffe0, v14371; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]4372; GFX10-GISEL-NEXT:    s_endpgm4373;4374; GFX11-SDAG-LABEL: v_test_v2i16_x_add_neg32_undef:4375; GFX11-SDAG:       ; %bb.0:4376; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x244377; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v04378; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)4379; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v04380; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)4381; GFX11-SDAG-NEXT:    global_load_b32 v1, v0, s[2:3]4382; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)4383; GFX11-SDAG-NEXT:    v_pk_sub_u16 v1, v1, 324384; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]4385; GFX11-SDAG-NEXT:    s_endpgm4386;4387; GFX11-GISEL-LABEL: v_test_v2i16_x_add_neg32_undef:4388; GFX11-GISEL:       ; %bb.0:4389; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x244390; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v04391; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)4392; GFX11-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v04393; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)4394; GFX11-GISEL-NEXT:    global_load_b32 v1, v0, s[2:3]4395; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)4396; GFX11-GISEL-NEXT:    v_pk_add_u16 v1, 0xffffffe0, v14397; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[0:1]4398; GFX11-GISEL-NEXT:    s_endpgm4399  %tid = call i32 @llvm.amdgcn.workitem.id.x()4400  %tid.ext = sext i32 %tid to i644401  %gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext4402  %gep.out = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext4403  %x = load <2 x i16>, ptr addrspace(1) %gep4404  %result = add <2 x i16> %x, <i16 -32, i16 poison>4405  store <2 x i16> %result, ptr addrspace(1) %gep.out4406  ret void4407}4408 4409declare i32 @llvm.amdgcn.workitem.id.x() #14410 4411attributes #0 = { nounwind }4412attributes #1 = { nounwind readnone }4413