brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.0 KiB · 6f8da57 Raw
577 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-scratch-access < %s | FileCheck --check-prefix=GFX7-ALIGNED %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -mattr=+unaligned-scratch-access < %s | FileCheck --check-prefix=GFX7-UNALIGNED %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -mattr=+unaligned-scratch-access < %s | FileCheck --check-prefix=GFX9 %s5; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -mattr=+unaligned-scratch-access -mattr=+enable-flat-scratch < %s | FileCheck --check-prefix=GFX9-FLASTSCR %s6; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=+unaligned-scratch-access < %s | FileCheck --check-prefix=GFX10 %s7; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=+unaligned-scratch-access -mattr=+enable-flat-scratch < %s | FileCheck --check-prefix=GFX10-FLASTSCR %s8; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+unaligned-scratch-access < %s | FileCheck --check-prefix=GFX11 %s9; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+unaligned-scratch-access -mattr=+enable-flat-scratch < %s | FileCheck --check-prefix=GFX11-FLASTSCR %s10; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+unaligned-scratch-access < %s | FileCheck --check-prefix=GFX12 %s11; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+unaligned-scratch-access -mattr=+enable-flat-scratch < %s | FileCheck --check-prefix=GFX12-FLASTSCR %s12 13; Should not merge this to a dword load14define i32 @private_load_2xi16_align2(ptr addrspace(5) %p) #0 {15; GFX7-ALIGNED-LABEL: private_load_2xi16_align2:16; GFX7-ALIGNED:       ; %bb.0:17; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)18; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v1, vcc, 2, v019; GFX7-ALIGNED-NEXT:    buffer_load_ushort v1, v1, s[0:3], 0 offen20; GFX7-ALIGNED-NEXT:    buffer_load_ushort v0, v0, s[0:3], 0 offen21; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(1)22; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v1, 16, v123; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)24; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v0, v125; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]26;27; GFX7-UNALIGNED-LABEL: private_load_2xi16_align2:28; GFX7-UNALIGNED:       ; %bb.0:29; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)30; GFX7-UNALIGNED-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen31; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)32; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]33;34; GFX9-LABEL: private_load_2xi16_align2:35; GFX9:       ; %bb.0:36; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)37; GFX9-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen38; GFX9-NEXT:    s_waitcnt vmcnt(0)39; GFX9-NEXT:    s_setpc_b64 s[30:31]40;41; GFX9-FLASTSCR-LABEL: private_load_2xi16_align2:42; GFX9-FLASTSCR:       ; %bb.0:43; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX9-FLASTSCR-NEXT:    scratch_load_dword v0, v0, off45; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)46; GFX9-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]47;48; GFX10-LABEL: private_load_2xi16_align2:49; GFX10:       ; %bb.0:50; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)51; GFX10-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen52; GFX10-NEXT:    s_waitcnt vmcnt(0)53; GFX10-NEXT:    s_setpc_b64 s[30:31]54;55; GFX10-FLASTSCR-LABEL: private_load_2xi16_align2:56; GFX10-FLASTSCR:       ; %bb.0:57; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)58; GFX10-FLASTSCR-NEXT:    scratch_load_dword v0, v0, off59; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)60; GFX10-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]61;62; GFX11-LABEL: private_load_2xi16_align2:63; GFX11:       ; %bb.0:64; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)65; GFX11-NEXT:    scratch_load_b32 v0, v0, off66; GFX11-NEXT:    s_waitcnt vmcnt(0)67; GFX11-NEXT:    s_setpc_b64 s[30:31]68;69; GFX11-FLASTSCR-LABEL: private_load_2xi16_align2:70; GFX11-FLASTSCR:       ; %bb.0:71; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; GFX11-FLASTSCR-NEXT:    scratch_load_b32 v0, v0, off73; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)74; GFX11-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]75;76; GFX12-LABEL: private_load_2xi16_align2:77; GFX12:       ; %bb.0:78; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x079; GFX12-NEXT:    s_wait_expcnt 0x080; GFX12-NEXT:    s_wait_samplecnt 0x081; GFX12-NEXT:    s_wait_bvhcnt 0x082; GFX12-NEXT:    s_wait_kmcnt 0x083; GFX12-NEXT:    scratch_load_b32 v0, v0, off84; GFX12-NEXT:    s_wait_loadcnt 0x085; GFX12-NEXT:    s_setpc_b64 s[30:31]86;87; GFX12-FLASTSCR-LABEL: private_load_2xi16_align2:88; GFX12-FLASTSCR:       ; %bb.0:89; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt_dscnt 0x090; GFX12-FLASTSCR-NEXT:    s_wait_expcnt 0x091; GFX12-FLASTSCR-NEXT:    s_wait_samplecnt 0x092; GFX12-FLASTSCR-NEXT:    s_wait_bvhcnt 0x093; GFX12-FLASTSCR-NEXT:    s_wait_kmcnt 0x094; GFX12-FLASTSCR-NEXT:    scratch_load_b32 v0, v0, off95; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt 0x096; GFX12-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]97  %gep.p = getelementptr i16, ptr addrspace(5) %p, i64 198  %p.0 = load i16, ptr addrspace(5) %p, align 299  %p.1 = load i16, ptr addrspace(5) %gep.p, align 2100  %zext.0 = zext i16 %p.0 to i32101  %zext.1 = zext i16 %p.1 to i32102  %shl.1 = shl i32 %zext.1, 16103  %or = or i32 %zext.0, %shl.1104  ret i32 %or105}106 107; Should not merge this to a dword store108define void @private_store_2xi16_align2(ptr addrspace(5) %p, ptr addrspace(5) %r) #0 {109; GFX7-ALIGNED-LABEL: private_store_2xi16_align2:110; GFX7-ALIGNED:       ; %bb.0:111; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)112; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v3, 1113; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, 2114; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v2, vcc, 2, v1115; GFX7-ALIGNED-NEXT:    buffer_store_short v3, v1, s[0:3], 0 offen116; GFX7-ALIGNED-NEXT:    buffer_store_short v0, v2, s[0:3], 0 offen117; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)118; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]119;120; GFX7-UNALIGNED-LABEL: private_store_2xi16_align2:121; GFX7-UNALIGNED:       ; %bb.0:122; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)123; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, 0x20001124; GFX7-UNALIGNED-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen125; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)126; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]127;128; GFX9-LABEL: private_store_2xi16_align2:129; GFX9:       ; %bb.0:130; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)131; GFX9-NEXT:    v_mov_b32_e32 v0, 0x20001132; GFX9-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen133; GFX9-NEXT:    s_waitcnt vmcnt(0)134; GFX9-NEXT:    s_setpc_b64 s[30:31]135;136; GFX9-FLASTSCR-LABEL: private_store_2xi16_align2:137; GFX9-FLASTSCR:       ; %bb.0:138; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)139; GFX9-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001140; GFX9-FLASTSCR-NEXT:    scratch_store_dword v1, v0, off141; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)142; GFX9-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]143;144; GFX10-LABEL: private_store_2xi16_align2:145; GFX10:       ; %bb.0:146; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)147; GFX10-NEXT:    v_mov_b32_e32 v0, 0x20001148; GFX10-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen149; GFX10-NEXT:    s_setpc_b64 s[30:31]150;151; GFX10-FLASTSCR-LABEL: private_store_2xi16_align2:152; GFX10-FLASTSCR:       ; %bb.0:153; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GFX10-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001155; GFX10-FLASTSCR-NEXT:    scratch_store_dword v1, v0, off156; GFX10-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]157;158; GFX11-LABEL: private_store_2xi16_align2:159; GFX11:       ; %bb.0:160; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)161; GFX11-NEXT:    v_mov_b32_e32 v0, 0x20001162; GFX11-NEXT:    scratch_store_b32 v1, v0, off163; GFX11-NEXT:    s_setpc_b64 s[30:31]164;165; GFX11-FLASTSCR-LABEL: private_store_2xi16_align2:166; GFX11-FLASTSCR:       ; %bb.0:167; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)168; GFX11-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001169; GFX11-FLASTSCR-NEXT:    scratch_store_b32 v1, v0, off170; GFX11-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]171;172; GFX12-LABEL: private_store_2xi16_align2:173; GFX12:       ; %bb.0:174; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0175; GFX12-NEXT:    s_wait_expcnt 0x0176; GFX12-NEXT:    s_wait_samplecnt 0x0177; GFX12-NEXT:    s_wait_bvhcnt 0x0178; GFX12-NEXT:    s_wait_kmcnt 0x0179; GFX12-NEXT:    v_mov_b32_e32 v0, 0x20001180; GFX12-NEXT:    scratch_store_b32 v1, v0, off181; GFX12-NEXT:    s_setpc_b64 s[30:31]182;183; GFX12-FLASTSCR-LABEL: private_store_2xi16_align2:184; GFX12-FLASTSCR:       ; %bb.0:185; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt_dscnt 0x0186; GFX12-FLASTSCR-NEXT:    s_wait_expcnt 0x0187; GFX12-FLASTSCR-NEXT:    s_wait_samplecnt 0x0188; GFX12-FLASTSCR-NEXT:    s_wait_bvhcnt 0x0189; GFX12-FLASTSCR-NEXT:    s_wait_kmcnt 0x0190; GFX12-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001191; GFX12-FLASTSCR-NEXT:    scratch_store_b32 v1, v0, off192; GFX12-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]193  %gep.r = getelementptr i16, ptr addrspace(5) %r, i64 1194  store i16 1, ptr addrspace(5) %r, align 2195  store i16 2, ptr addrspace(5) %gep.r, align 2196  ret void197}198 199; Should produce align 1 dword when legal200define i32 @private_load_2xi16_align1(ptr addrspace(5) %p) #0 {201; GFX7-ALIGNED-LABEL: private_load_2xi16_align1:202; GFX7-ALIGNED:       ; %bb.0:203; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)204; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v1, vcc, 2, v0205; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v2, vcc, 1, v0206; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v3, vcc, 3, v0207; GFX7-ALIGNED-NEXT:    buffer_load_ubyte v2, v2, s[0:3], 0 offen208; GFX7-ALIGNED-NEXT:    buffer_load_ubyte v3, v3, s[0:3], 0 offen209; GFX7-ALIGNED-NEXT:    buffer_load_ubyte v1, v1, s[0:3], 0 offen210; GFX7-ALIGNED-NEXT:    buffer_load_ubyte v0, v0, s[0:3], 0 offen211; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(3)212; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v2, 8, v2213; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(2)214; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v3, 24, v3215; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(1)216; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v1, 16, v1217; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)218; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v2, v0219; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v1, v3, v1220; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v0, v1221; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]222;223; GFX7-UNALIGNED-LABEL: private_load_2xi16_align1:224; GFX7-UNALIGNED:       ; %bb.0:225; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)226; GFX7-UNALIGNED-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen227; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)228; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]229;230; GFX9-LABEL: private_load_2xi16_align1:231; GFX9:       ; %bb.0:232; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)233; GFX9-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen234; GFX9-NEXT:    s_waitcnt vmcnt(0)235; GFX9-NEXT:    s_setpc_b64 s[30:31]236;237; GFX9-FLASTSCR-LABEL: private_load_2xi16_align1:238; GFX9-FLASTSCR:       ; %bb.0:239; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)240; GFX9-FLASTSCR-NEXT:    scratch_load_dword v0, v0, off241; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)242; GFX9-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]243;244; GFX10-LABEL: private_load_2xi16_align1:245; GFX10:       ; %bb.0:246; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)247; GFX10-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen248; GFX10-NEXT:    s_waitcnt vmcnt(0)249; GFX10-NEXT:    s_setpc_b64 s[30:31]250;251; GFX10-FLASTSCR-LABEL: private_load_2xi16_align1:252; GFX10-FLASTSCR:       ; %bb.0:253; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; GFX10-FLASTSCR-NEXT:    scratch_load_dword v0, v0, off255; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)256; GFX10-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]257;258; GFX11-LABEL: private_load_2xi16_align1:259; GFX11:       ; %bb.0:260; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)261; GFX11-NEXT:    scratch_load_b32 v0, v0, off262; GFX11-NEXT:    s_waitcnt vmcnt(0)263; GFX11-NEXT:    s_setpc_b64 s[30:31]264;265; GFX11-FLASTSCR-LABEL: private_load_2xi16_align1:266; GFX11-FLASTSCR:       ; %bb.0:267; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)268; GFX11-FLASTSCR-NEXT:    scratch_load_b32 v0, v0, off269; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)270; GFX11-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]271;272; GFX12-LABEL: private_load_2xi16_align1:273; GFX12:       ; %bb.0:274; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0275; GFX12-NEXT:    s_wait_expcnt 0x0276; GFX12-NEXT:    s_wait_samplecnt 0x0277; GFX12-NEXT:    s_wait_bvhcnt 0x0278; GFX12-NEXT:    s_wait_kmcnt 0x0279; GFX12-NEXT:    scratch_load_b32 v0, v0, off280; GFX12-NEXT:    s_wait_loadcnt 0x0281; GFX12-NEXT:    s_setpc_b64 s[30:31]282;283; GFX12-FLASTSCR-LABEL: private_load_2xi16_align1:284; GFX12-FLASTSCR:       ; %bb.0:285; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt_dscnt 0x0286; GFX12-FLASTSCR-NEXT:    s_wait_expcnt 0x0287; GFX12-FLASTSCR-NEXT:    s_wait_samplecnt 0x0288; GFX12-FLASTSCR-NEXT:    s_wait_bvhcnt 0x0289; GFX12-FLASTSCR-NEXT:    s_wait_kmcnt 0x0290; GFX12-FLASTSCR-NEXT:    scratch_load_b32 v0, v0, off291; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt 0x0292; GFX12-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]293  %gep.p = getelementptr i16, ptr addrspace(5) %p, i64 1294  %p.0 = load i16, ptr addrspace(5) %p, align 1295  %p.1 = load i16, ptr addrspace(5) %gep.p, align 1296  %zext.0 = zext i16 %p.0 to i32297  %zext.1 = zext i16 %p.1 to i32298  %shl.1 = shl i32 %zext.1, 16299  %or = or i32 %zext.0, %shl.1300  ret i32 %or301}302 303; Should produce align 1 dword when legal304define void @private_store_2xi16_align1(ptr addrspace(5) %p, ptr addrspace(5) %r) #0 {305; GFX7-ALIGNED-LABEL: private_store_2xi16_align1:306; GFX7-ALIGNED:       ; %bb.0:307; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)308; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v3, 1309; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v2, vcc, 2, v1310; GFX7-ALIGNED-NEXT:    buffer_store_byte v3, v1, s[0:3], 0 offen311; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v3, vcc, 1, v1312; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v4, 0313; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v1, vcc, 3, v1314; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, 2315; GFX7-ALIGNED-NEXT:    buffer_store_byte v4, v3, s[0:3], 0 offen316; GFX7-ALIGNED-NEXT:    buffer_store_byte v4, v1, s[0:3], 0 offen317; GFX7-ALIGNED-NEXT:    buffer_store_byte v0, v2, s[0:3], 0 offen318; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)319; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]320;321; GFX7-UNALIGNED-LABEL: private_store_2xi16_align1:322; GFX7-UNALIGNED:       ; %bb.0:323; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)324; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, 0x20001325; GFX7-UNALIGNED-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen326; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)327; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]328;329; GFX9-LABEL: private_store_2xi16_align1:330; GFX9:       ; %bb.0:331; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)332; GFX9-NEXT:    v_mov_b32_e32 v0, 0x20001333; GFX9-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen334; GFX9-NEXT:    s_waitcnt vmcnt(0)335; GFX9-NEXT:    s_setpc_b64 s[30:31]336;337; GFX9-FLASTSCR-LABEL: private_store_2xi16_align1:338; GFX9-FLASTSCR:       ; %bb.0:339; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)340; GFX9-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001341; GFX9-FLASTSCR-NEXT:    scratch_store_dword v1, v0, off342; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)343; GFX9-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]344;345; GFX10-LABEL: private_store_2xi16_align1:346; GFX10:       ; %bb.0:347; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)348; GFX10-NEXT:    v_mov_b32_e32 v0, 0x20001349; GFX10-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen350; GFX10-NEXT:    s_setpc_b64 s[30:31]351;352; GFX10-FLASTSCR-LABEL: private_store_2xi16_align1:353; GFX10-FLASTSCR:       ; %bb.0:354; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)355; GFX10-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001356; GFX10-FLASTSCR-NEXT:    scratch_store_dword v1, v0, off357; GFX10-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]358;359; GFX11-LABEL: private_store_2xi16_align1:360; GFX11:       ; %bb.0:361; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)362; GFX11-NEXT:    v_mov_b32_e32 v0, 0x20001363; GFX11-NEXT:    scratch_store_b32 v1, v0, off364; GFX11-NEXT:    s_setpc_b64 s[30:31]365;366; GFX11-FLASTSCR-LABEL: private_store_2xi16_align1:367; GFX11-FLASTSCR:       ; %bb.0:368; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)369; GFX11-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001370; GFX11-FLASTSCR-NEXT:    scratch_store_b32 v1, v0, off371; GFX11-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]372;373; GFX12-LABEL: private_store_2xi16_align1:374; GFX12:       ; %bb.0:375; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0376; GFX12-NEXT:    s_wait_expcnt 0x0377; GFX12-NEXT:    s_wait_samplecnt 0x0378; GFX12-NEXT:    s_wait_bvhcnt 0x0379; GFX12-NEXT:    s_wait_kmcnt 0x0380; GFX12-NEXT:    v_mov_b32_e32 v0, 0x20001381; GFX12-NEXT:    scratch_store_b32 v1, v0, off382; GFX12-NEXT:    s_setpc_b64 s[30:31]383;384; GFX12-FLASTSCR-LABEL: private_store_2xi16_align1:385; GFX12-FLASTSCR:       ; %bb.0:386; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt_dscnt 0x0387; GFX12-FLASTSCR-NEXT:    s_wait_expcnt 0x0388; GFX12-FLASTSCR-NEXT:    s_wait_samplecnt 0x0389; GFX12-FLASTSCR-NEXT:    s_wait_bvhcnt 0x0390; GFX12-FLASTSCR-NEXT:    s_wait_kmcnt 0x0391; GFX12-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001392; GFX12-FLASTSCR-NEXT:    scratch_store_b32 v1, v0, off393; GFX12-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]394  %gep.r = getelementptr i16, ptr addrspace(5) %r, i64 1395  store i16 1, ptr addrspace(5) %r, align 1396  store i16 2, ptr addrspace(5) %gep.r, align 1397  ret void398}399 400; Should merge this to a dword load401define i32 @private_load_2xi16_align4(ptr addrspace(5) %p) #0 {402; GFX7-ALIGNED-LABEL: private_load_2xi16_align4:403; GFX7-ALIGNED:       ; %bb.0:404; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)405; GFX7-ALIGNED-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen406; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)407; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]408;409; GFX7-UNALIGNED-LABEL: private_load_2xi16_align4:410; GFX7-UNALIGNED:       ; %bb.0:411; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)412; GFX7-UNALIGNED-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen413; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)414; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]415;416; GFX9-LABEL: private_load_2xi16_align4:417; GFX9:       ; %bb.0:418; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)419; GFX9-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen420; GFX9-NEXT:    s_waitcnt vmcnt(0)421; GFX9-NEXT:    s_setpc_b64 s[30:31]422;423; GFX9-FLASTSCR-LABEL: private_load_2xi16_align4:424; GFX9-FLASTSCR:       ; %bb.0:425; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)426; GFX9-FLASTSCR-NEXT:    scratch_load_dword v0, v0, off427; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)428; GFX9-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]429;430; GFX10-LABEL: private_load_2xi16_align4:431; GFX10:       ; %bb.0:432; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)433; GFX10-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen434; GFX10-NEXT:    s_waitcnt vmcnt(0)435; GFX10-NEXT:    s_setpc_b64 s[30:31]436;437; GFX10-FLASTSCR-LABEL: private_load_2xi16_align4:438; GFX10-FLASTSCR:       ; %bb.0:439; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)440; GFX10-FLASTSCR-NEXT:    scratch_load_dword v0, v0, off441; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)442; GFX10-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]443;444; GFX11-LABEL: private_load_2xi16_align4:445; GFX11:       ; %bb.0:446; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)447; GFX11-NEXT:    scratch_load_b32 v0, v0, off448; GFX11-NEXT:    s_waitcnt vmcnt(0)449; GFX11-NEXT:    s_setpc_b64 s[30:31]450;451; GFX11-FLASTSCR-LABEL: private_load_2xi16_align4:452; GFX11-FLASTSCR:       ; %bb.0:453; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)454; GFX11-FLASTSCR-NEXT:    scratch_load_b32 v0, v0, off455; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)456; GFX11-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]457;458; GFX12-LABEL: private_load_2xi16_align4:459; GFX12:       ; %bb.0:460; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0461; GFX12-NEXT:    s_wait_expcnt 0x0462; GFX12-NEXT:    s_wait_samplecnt 0x0463; GFX12-NEXT:    s_wait_bvhcnt 0x0464; GFX12-NEXT:    s_wait_kmcnt 0x0465; GFX12-NEXT:    scratch_load_b32 v0, v0, off466; GFX12-NEXT:    s_wait_loadcnt 0x0467; GFX12-NEXT:    s_setpc_b64 s[30:31]468;469; GFX12-FLASTSCR-LABEL: private_load_2xi16_align4:470; GFX12-FLASTSCR:       ; %bb.0:471; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt_dscnt 0x0472; GFX12-FLASTSCR-NEXT:    s_wait_expcnt 0x0473; GFX12-FLASTSCR-NEXT:    s_wait_samplecnt 0x0474; GFX12-FLASTSCR-NEXT:    s_wait_bvhcnt 0x0475; GFX12-FLASTSCR-NEXT:    s_wait_kmcnt 0x0476; GFX12-FLASTSCR-NEXT:    scratch_load_b32 v0, v0, off477; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt 0x0478; GFX12-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]479  %gep.p = getelementptr i16, ptr addrspace(5) %p, i64 1480  %p.0 = load i16, ptr addrspace(5) %p, align 4481  %p.1 = load i16, ptr addrspace(5) %gep.p, align 2482  %zext.0 = zext i16 %p.0 to i32483  %zext.1 = zext i16 %p.1 to i32484  %shl.1 = shl i32 %zext.1, 16485  %or = or i32 %zext.0, %shl.1486  ret i32 %or487}488 489; Should merge this to a dword store490define void @private_store_2xi16_align4(ptr addrspace(5) %p, ptr addrspace(5) %r) #0 {491; GFX7-ALIGNED-LABEL: private_store_2xi16_align4:492; GFX7-ALIGNED:       ; %bb.0:493; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)494; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, 0x20001495; GFX7-ALIGNED-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen496; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)497; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]498;499; GFX7-UNALIGNED-LABEL: private_store_2xi16_align4:500; GFX7-UNALIGNED:       ; %bb.0:501; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)502; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, 0x20001503; GFX7-UNALIGNED-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen504; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)505; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]506;507; GFX9-LABEL: private_store_2xi16_align4:508; GFX9:       ; %bb.0:509; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)510; GFX9-NEXT:    v_mov_b32_e32 v0, 0x20001511; GFX9-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen512; GFX9-NEXT:    s_waitcnt vmcnt(0)513; GFX9-NEXT:    s_setpc_b64 s[30:31]514;515; GFX9-FLASTSCR-LABEL: private_store_2xi16_align4:516; GFX9-FLASTSCR:       ; %bb.0:517; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)518; GFX9-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001519; GFX9-FLASTSCR-NEXT:    scratch_store_dword v1, v0, off520; GFX9-FLASTSCR-NEXT:    s_waitcnt vmcnt(0)521; GFX9-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]522;523; GFX10-LABEL: private_store_2xi16_align4:524; GFX10:       ; %bb.0:525; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)526; GFX10-NEXT:    v_mov_b32_e32 v0, 0x20001527; GFX10-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen528; GFX10-NEXT:    s_setpc_b64 s[30:31]529;530; GFX10-FLASTSCR-LABEL: private_store_2xi16_align4:531; GFX10-FLASTSCR:       ; %bb.0:532; GFX10-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)533; GFX10-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001534; GFX10-FLASTSCR-NEXT:    scratch_store_dword v1, v0, off535; GFX10-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]536;537; GFX11-LABEL: private_store_2xi16_align4:538; GFX11:       ; %bb.0:539; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)540; GFX11-NEXT:    v_mov_b32_e32 v0, 0x20001541; GFX11-NEXT:    scratch_store_b32 v1, v0, off542; GFX11-NEXT:    s_setpc_b64 s[30:31]543;544; GFX11-FLASTSCR-LABEL: private_store_2xi16_align4:545; GFX11-FLASTSCR:       ; %bb.0:546; GFX11-FLASTSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)547; GFX11-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001548; GFX11-FLASTSCR-NEXT:    scratch_store_b32 v1, v0, off549; GFX11-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]550;551; GFX12-LABEL: private_store_2xi16_align4:552; GFX12:       ; %bb.0:553; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0554; GFX12-NEXT:    s_wait_expcnt 0x0555; GFX12-NEXT:    s_wait_samplecnt 0x0556; GFX12-NEXT:    s_wait_bvhcnt 0x0557; GFX12-NEXT:    s_wait_kmcnt 0x0558; GFX12-NEXT:    v_mov_b32_e32 v0, 0x20001559; GFX12-NEXT:    scratch_store_b32 v1, v0, off560; GFX12-NEXT:    s_setpc_b64 s[30:31]561;562; GFX12-FLASTSCR-LABEL: private_store_2xi16_align4:563; GFX12-FLASTSCR:       ; %bb.0:564; GFX12-FLASTSCR-NEXT:    s_wait_loadcnt_dscnt 0x0565; GFX12-FLASTSCR-NEXT:    s_wait_expcnt 0x0566; GFX12-FLASTSCR-NEXT:    s_wait_samplecnt 0x0567; GFX12-FLASTSCR-NEXT:    s_wait_bvhcnt 0x0568; GFX12-FLASTSCR-NEXT:    s_wait_kmcnt 0x0569; GFX12-FLASTSCR-NEXT:    v_mov_b32_e32 v0, 0x20001570; GFX12-FLASTSCR-NEXT:    scratch_store_b32 v1, v0, off571; GFX12-FLASTSCR-NEXT:    s_setpc_b64 s[30:31]572  %gep.r = getelementptr i16, ptr addrspace(5) %r, i64 1573  store i16 1, ptr addrspace(5) %r, align 4574  store i16 2, ptr addrspace(5) %gep.r, align 2575  ret void576}577