brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.1 KiB · 52bcaed Raw
460 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -mattr=-unaligned-access-mode < %s | FileCheck --check-prefix=GFX7-ALIGNED %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX7-UNALIGNED %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX9 %s5; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX10 %s6; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX11 %s7; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX12 %s8 9; Should not merge this to a dword load10define i32 @global_load_2xi16_align2(ptr addrspace(1) %p) #0 {11; GFX7-ALIGNED-LABEL: global_load_2xi16_align2:12; GFX7-ALIGNED:       ; %bb.0:13; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v2, vcc, 2, v015; GFX7-ALIGNED-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc16; GFX7-ALIGNED-NEXT:    flat_load_ushort v2, v[2:3]17; GFX7-ALIGNED-NEXT:    flat_load_ushort v0, v[0:1]18; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(1)19; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v1, 16, v220; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)21; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v0, v122; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]23;24; GFX7-UNALIGNED-LABEL: global_load_2xi16_align2:25; GFX7-UNALIGNED:       ; %bb.0:26; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)27; GFX7-UNALIGNED-NEXT:    flat_load_dword v0, v[0:1]28; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)29; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]30;31; GFX9-LABEL: global_load_2xi16_align2:32; GFX9:       ; %bb.0:33; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; GFX9-NEXT:    global_load_dword v0, v[0:1], off35; GFX9-NEXT:    s_waitcnt vmcnt(0)36; GFX9-NEXT:    s_setpc_b64 s[30:31]37;38; GFX10-LABEL: global_load_2xi16_align2:39; GFX10:       ; %bb.0:40; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)41; GFX10-NEXT:    global_load_dword v0, v[0:1], off42; GFX10-NEXT:    s_waitcnt vmcnt(0)43; GFX10-NEXT:    s_setpc_b64 s[30:31]44;45; GFX11-LABEL: global_load_2xi16_align2:46; GFX11:       ; %bb.0:47; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)48; GFX11-NEXT:    global_load_b32 v0, v[0:1], off49; GFX11-NEXT:    s_waitcnt vmcnt(0)50; GFX11-NEXT:    s_setpc_b64 s[30:31]51;52; GFX12-LABEL: global_load_2xi16_align2:53; GFX12:       ; %bb.0:54; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x055; GFX12-NEXT:    s_wait_expcnt 0x056; GFX12-NEXT:    s_wait_samplecnt 0x057; GFX12-NEXT:    s_wait_bvhcnt 0x058; GFX12-NEXT:    s_wait_kmcnt 0x059; GFX12-NEXT:    global_load_b32 v0, v[0:1], off60; GFX12-NEXT:    s_wait_loadcnt 0x061; GFX12-NEXT:    s_setpc_b64 s[30:31]62  %gep.p = getelementptr i16, ptr addrspace(1) %p, i64 163  %p.0 = load i16, ptr addrspace(1) %p, align 264  %p.1 = load i16, ptr addrspace(1) %gep.p, align 265  %zext.0 = zext i16 %p.0 to i3266  %zext.1 = zext i16 %p.1 to i3267  %shl.1 = shl i32 %zext.1, 1668  %or = or i32 %zext.0, %shl.169  ret i32 %or70}71 72; Should not merge this to a dword store73define amdgpu_kernel void @global_store_2xi16_align2(ptr addrspace(1) %p, ptr addrspace(1) %r) #0 {74; GFX7-ALIGNED-LABEL: global_store_2xi16_align2:75; GFX7-ALIGNED:       ; %bb.0:76; GFX7-ALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x277; GFX7-ALIGNED-NEXT:    s_add_i32 s12, s12, s1778; GFX7-ALIGNED-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 879; GFX7-ALIGNED-NEXT:    s_mov_b32 flat_scratch_lo, s1380; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 181; GFX7-ALIGNED-NEXT:    s_waitcnt lgkmcnt(0)82; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s083; GFX7-ALIGNED-NEXT:    s_add_u32 s2, s0, 284; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s185; GFX7-ALIGNED-NEXT:    s_addc_u32 s3, s1, 086; GFX7-ALIGNED-NEXT:    flat_store_short v[0:1], v287; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s288; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 289; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s390; GFX7-ALIGNED-NEXT:    flat_store_short v[0:1], v291; GFX7-ALIGNED-NEXT:    s_endpgm92;93; GFX7-UNALIGNED-LABEL: global_store_2xi16_align2:94; GFX7-UNALIGNED:       ; %bb.0:95; GFX7-UNALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x296; GFX7-UNALIGNED-NEXT:    s_add_i32 s12, s12, s1797; GFX7-UNALIGNED-NEXT:    s_mov_b32 flat_scratch_lo, s1398; GFX7-UNALIGNED-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 899; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v2, 0x20001100; GFX7-UNALIGNED-NEXT:    s_waitcnt lgkmcnt(0)101; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, s0102; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v1, s1103; GFX7-UNALIGNED-NEXT:    flat_store_dword v[0:1], v2104; GFX7-UNALIGNED-NEXT:    s_endpgm105;106; GFX9-LABEL: global_store_2xi16_align2:107; GFX9:       ; %bb.0:108; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x8109; GFX9-NEXT:    v_mov_b32_e32 v0, 0110; GFX9-NEXT:    v_mov_b32_e32 v1, 0x20001111; GFX9-NEXT:    s_waitcnt lgkmcnt(0)112; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]113; GFX9-NEXT:    s_endpgm114;115; GFX10-LABEL: global_store_2xi16_align2:116; GFX10:       ; %bb.0:117; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x8118; GFX10-NEXT:    v_mov_b32_e32 v0, 0119; GFX10-NEXT:    v_mov_b32_e32 v1, 0x20001120; GFX10-NEXT:    s_waitcnt lgkmcnt(0)121; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]122; GFX10-NEXT:    s_endpgm123;124; GFX11-LABEL: global_store_2xi16_align2:125; GFX11:       ; %bb.0:126; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8127; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001128; GFX11-NEXT:    s_waitcnt lgkmcnt(0)129; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]130; GFX11-NEXT:    s_endpgm131;132; GFX12-LABEL: global_store_2xi16_align2:133; GFX12:       ; %bb.0:134; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8135; GFX12-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001136; GFX12-NEXT:    s_wait_kmcnt 0x0137; GFX12-NEXT:    global_store_b32 v0, v1, s[0:1]138; GFX12-NEXT:    s_endpgm139  %gep.r = getelementptr i16, ptr addrspace(1) %r, i64 1140  store i16 1, ptr addrspace(1) %r, align 2141  store i16 2, ptr addrspace(1) %gep.r, align 2142  ret void143}144 145; Should produce align 1 dword when legal146define i32 @global_load_2xi16_align1(ptr addrspace(1) %p) #0 {147; GFX7-ALIGNED-LABEL: global_load_2xi16_align1:148; GFX7-ALIGNED:       ; %bb.0:149; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)150; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v2, vcc, 2, v0151; GFX7-ALIGNED-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc152; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v4, vcc, 1, v0153; GFX7-ALIGNED-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc154; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v6, vcc, 3, v0155; GFX7-ALIGNED-NEXT:    v_addc_u32_e32 v7, vcc, 0, v1, vcc156; GFX7-ALIGNED-NEXT:    flat_load_ubyte v4, v[4:5]157; GFX7-ALIGNED-NEXT:    flat_load_ubyte v5, v[6:7]158; GFX7-ALIGNED-NEXT:    flat_load_ubyte v2, v[2:3]159; GFX7-ALIGNED-NEXT:    flat_load_ubyte v0, v[0:1]160; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(3)161; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v1, 8, v4162; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(2)163; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v3, 24, v5164; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(1)165; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v2, 16, v2166; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)167; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v1, v0168; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v1, v3, v2169; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v0, v1170; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]171;172; GFX7-UNALIGNED-LABEL: global_load_2xi16_align1:173; GFX7-UNALIGNED:       ; %bb.0:174; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)175; GFX7-UNALIGNED-NEXT:    flat_load_dword v0, v[0:1]176; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)177; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]178;179; GFX9-LABEL: global_load_2xi16_align1:180; GFX9:       ; %bb.0:181; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)182; GFX9-NEXT:    global_load_dword v0, v[0:1], off183; GFX9-NEXT:    s_waitcnt vmcnt(0)184; GFX9-NEXT:    s_setpc_b64 s[30:31]185;186; GFX10-LABEL: global_load_2xi16_align1:187; GFX10:       ; %bb.0:188; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)189; GFX10-NEXT:    global_load_dword v0, v[0:1], off190; GFX10-NEXT:    s_waitcnt vmcnt(0)191; GFX10-NEXT:    s_setpc_b64 s[30:31]192;193; GFX11-LABEL: global_load_2xi16_align1:194; GFX11:       ; %bb.0:195; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)196; GFX11-NEXT:    global_load_b32 v0, v[0:1], off197; GFX11-NEXT:    s_waitcnt vmcnt(0)198; GFX11-NEXT:    s_setpc_b64 s[30:31]199;200; GFX12-LABEL: global_load_2xi16_align1:201; GFX12:       ; %bb.0:202; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0203; GFX12-NEXT:    s_wait_expcnt 0x0204; GFX12-NEXT:    s_wait_samplecnt 0x0205; GFX12-NEXT:    s_wait_bvhcnt 0x0206; GFX12-NEXT:    s_wait_kmcnt 0x0207; GFX12-NEXT:    global_load_b32 v0, v[0:1], off208; GFX12-NEXT:    s_wait_loadcnt 0x0209; GFX12-NEXT:    s_setpc_b64 s[30:31]210  %gep.p = getelementptr i16, ptr addrspace(1) %p, i64 1211  %p.0 = load i16, ptr addrspace(1) %p, align 1212  %p.1 = load i16, ptr addrspace(1) %gep.p, align 1213  %zext.0 = zext i16 %p.0 to i32214  %zext.1 = zext i16 %p.1 to i32215  %shl.1 = shl i32 %zext.1, 16216  %or = or i32 %zext.0, %shl.1217  ret i32 %or218}219 220; Should produce align 1 dword when legal221define amdgpu_kernel void @global_store_2xi16_align1(ptr addrspace(1) %p, ptr addrspace(1) %r) #0 {222; GFX7-ALIGNED-LABEL: global_store_2xi16_align1:223; GFX7-ALIGNED:       ; %bb.0:224; GFX7-ALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x2225; GFX7-ALIGNED-NEXT:    s_add_i32 s12, s12, s17226; GFX7-ALIGNED-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8227; GFX7-ALIGNED-NEXT:    s_mov_b32 flat_scratch_lo, s13228; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 1229; GFX7-ALIGNED-NEXT:    s_waitcnt lgkmcnt(0)230; GFX7-ALIGNED-NEXT:    s_add_u32 s2, s0, 2231; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s0232; GFX7-ALIGNED-NEXT:    s_addc_u32 s3, s1, 0233; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s1234; GFX7-ALIGNED-NEXT:    s_add_u32 s4, s0, 1235; GFX7-ALIGNED-NEXT:    flat_store_byte v[0:1], v2236; GFX7-ALIGNED-NEXT:    s_addc_u32 s5, s1, 0237; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s4238; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v3, 0239; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s5240; GFX7-ALIGNED-NEXT:    s_add_u32 s0, s0, 3241; GFX7-ALIGNED-NEXT:    flat_store_byte v[0:1], v3242; GFX7-ALIGNED-NEXT:    s_addc_u32 s1, s1, 0243; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s0244; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s1245; GFX7-ALIGNED-NEXT:    flat_store_byte v[0:1], v3246; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s2247; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 2248; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s3249; GFX7-ALIGNED-NEXT:    flat_store_byte v[0:1], v2250; GFX7-ALIGNED-NEXT:    s_endpgm251;252; GFX7-UNALIGNED-LABEL: global_store_2xi16_align1:253; GFX7-UNALIGNED:       ; %bb.0:254; GFX7-UNALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x2255; GFX7-UNALIGNED-NEXT:    s_add_i32 s12, s12, s17256; GFX7-UNALIGNED-NEXT:    s_mov_b32 flat_scratch_lo, s13257; GFX7-UNALIGNED-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8258; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v2, 0x20001259; GFX7-UNALIGNED-NEXT:    s_waitcnt lgkmcnt(0)260; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, s0261; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v1, s1262; GFX7-UNALIGNED-NEXT:    flat_store_dword v[0:1], v2263; GFX7-UNALIGNED-NEXT:    s_endpgm264;265; GFX9-LABEL: global_store_2xi16_align1:266; GFX9:       ; %bb.0:267; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x8268; GFX9-NEXT:    v_mov_b32_e32 v0, 0269; GFX9-NEXT:    v_mov_b32_e32 v1, 0x20001270; GFX9-NEXT:    s_waitcnt lgkmcnt(0)271; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]272; GFX9-NEXT:    s_endpgm273;274; GFX10-LABEL: global_store_2xi16_align1:275; GFX10:       ; %bb.0:276; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x8277; GFX10-NEXT:    v_mov_b32_e32 v0, 0278; GFX10-NEXT:    v_mov_b32_e32 v1, 0x20001279; GFX10-NEXT:    s_waitcnt lgkmcnt(0)280; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]281; GFX10-NEXT:    s_endpgm282;283; GFX11-LABEL: global_store_2xi16_align1:284; GFX11:       ; %bb.0:285; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8286; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001287; GFX11-NEXT:    s_waitcnt lgkmcnt(0)288; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]289; GFX11-NEXT:    s_endpgm290;291; GFX12-LABEL: global_store_2xi16_align1:292; GFX12:       ; %bb.0:293; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8294; GFX12-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001295; GFX12-NEXT:    s_wait_kmcnt 0x0296; GFX12-NEXT:    global_store_b32 v0, v1, s[0:1]297; GFX12-NEXT:    s_endpgm298  %gep.r = getelementptr i16, ptr addrspace(1) %r, i64 1299  store i16 1, ptr addrspace(1) %r, align 1300  store i16 2, ptr addrspace(1) %gep.r, align 1301  ret void302}303 304; Should merge this to a dword load305define i32 @global_load_2xi16_align4(ptr addrspace(1) %p) #0 {306; GFX7-ALIGNED-LABEL: global_load_2xi16_align4:307; GFX7-ALIGNED:       ; %bb.0:308; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX7-ALIGNED-NEXT:    flat_load_dword v0, v[0:1]310; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)311; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]312;313; GFX7-UNALIGNED-LABEL: global_load_2xi16_align4:314; GFX7-UNALIGNED:       ; %bb.0:315; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)316; GFX7-UNALIGNED-NEXT:    flat_load_dword v0, v[0:1]317; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)318; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]319;320; GFX9-LABEL: global_load_2xi16_align4:321; GFX9:       ; %bb.0:322; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)323; GFX9-NEXT:    global_load_dword v0, v[0:1], off324; GFX9-NEXT:    s_waitcnt vmcnt(0)325; GFX9-NEXT:    s_setpc_b64 s[30:31]326;327; GFX10-LABEL: global_load_2xi16_align4:328; GFX10:       ; %bb.0:329; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)330; GFX10-NEXT:    global_load_dword v0, v[0:1], off331; GFX10-NEXT:    s_waitcnt vmcnt(0)332; GFX10-NEXT:    s_setpc_b64 s[30:31]333;334; GFX11-LABEL: global_load_2xi16_align4:335; GFX11:       ; %bb.0:336; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)337; GFX11-NEXT:    global_load_b32 v0, v[0:1], off338; GFX11-NEXT:    s_waitcnt vmcnt(0)339; GFX11-NEXT:    s_setpc_b64 s[30:31]340;341; GFX12-LABEL: global_load_2xi16_align4:342; GFX12:       ; %bb.0:343; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0344; GFX12-NEXT:    s_wait_expcnt 0x0345; GFX12-NEXT:    s_wait_samplecnt 0x0346; GFX12-NEXT:    s_wait_bvhcnt 0x0347; GFX12-NEXT:    s_wait_kmcnt 0x0348; GFX12-NEXT:    global_load_b32 v0, v[0:1], off349; GFX12-NEXT:    s_wait_loadcnt 0x0350; GFX12-NEXT:    s_setpc_b64 s[30:31]351  %gep.p = getelementptr i16, ptr addrspace(1) %p, i64 1352  %p.0 = load i16, ptr addrspace(1) %p, align 4353  %p.1 = load i16, ptr addrspace(1) %gep.p, align 2354  %zext.0 = zext i16 %p.0 to i32355  %zext.1 = zext i16 %p.1 to i32356  %shl.1 = shl i32 %zext.1, 16357  %or = or i32 %zext.0, %shl.1358  ret i32 %or359}360 361; Should merge this to a dword store362define amdgpu_kernel void @global_store_2xi16_align4(ptr addrspace(1) %p, ptr addrspace(1) %r) #0 {363; GFX7-ALIGNED-LABEL: global_store_2xi16_align4:364; GFX7-ALIGNED:       ; %bb.0:365; GFX7-ALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x2366; GFX7-ALIGNED-NEXT:    s_add_i32 s12, s12, s17367; GFX7-ALIGNED-NEXT:    s_mov_b32 flat_scratch_lo, s13368; GFX7-ALIGNED-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8369; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 0x20001370; GFX7-ALIGNED-NEXT:    s_waitcnt lgkmcnt(0)371; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s0372; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s1373; GFX7-ALIGNED-NEXT:    flat_store_dword v[0:1], v2374; GFX7-ALIGNED-NEXT:    s_endpgm375;376; GFX7-UNALIGNED-LABEL: global_store_2xi16_align4:377; GFX7-UNALIGNED:       ; %bb.0:378; GFX7-UNALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x2379; GFX7-UNALIGNED-NEXT:    s_add_i32 s12, s12, s17380; GFX7-UNALIGNED-NEXT:    s_mov_b32 flat_scratch_lo, s13381; GFX7-UNALIGNED-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8382; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v2, 0x20001383; GFX7-UNALIGNED-NEXT:    s_waitcnt lgkmcnt(0)384; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, s0385; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v1, s1386; GFX7-UNALIGNED-NEXT:    flat_store_dword v[0:1], v2387; GFX7-UNALIGNED-NEXT:    s_endpgm388;389; GFX9-LABEL: global_store_2xi16_align4:390; GFX9:       ; %bb.0:391; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x8392; GFX9-NEXT:    v_mov_b32_e32 v0, 0393; GFX9-NEXT:    v_mov_b32_e32 v1, 0x20001394; GFX9-NEXT:    s_waitcnt lgkmcnt(0)395; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]396; GFX9-NEXT:    s_endpgm397;398; GFX10-LABEL: global_store_2xi16_align4:399; GFX10:       ; %bb.0:400; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x8401; GFX10-NEXT:    v_mov_b32_e32 v0, 0402; GFX10-NEXT:    v_mov_b32_e32 v1, 0x20001403; GFX10-NEXT:    s_waitcnt lgkmcnt(0)404; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]405; GFX10-NEXT:    s_endpgm406;407; GFX11-LABEL: global_store_2xi16_align4:408; GFX11:       ; %bb.0:409; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8410; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001411; GFX11-NEXT:    s_waitcnt lgkmcnt(0)412; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]413; GFX11-NEXT:    s_endpgm414;415; GFX12-LABEL: global_store_2xi16_align4:416; GFX12:       ; %bb.0:417; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8418; GFX12-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001419; GFX12-NEXT:    s_wait_kmcnt 0x0420; GFX12-NEXT:    global_store_b32 v0, v1, s[0:1]421; GFX12-NEXT:    s_endpgm422  %gep.r = getelementptr i16, ptr addrspace(1) %r, i64 1423  store i16 1, ptr addrspace(1) %r, align 4424  store i16 2, ptr addrspace(1) %gep.r, align 2425  ret void426}427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460