2129 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdpal -mcpu=hawaii -mattr=+unaligned-access-mode < %s | FileCheck --check-prefixes=GFX7 %s3; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 -mattr=+unaligned-access-mode < %s | FileCheck --check-prefixes=GFX11,GFX11-True16 %s4; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 -mattr=+unaligned-access-mode -mattr=-real-true16 < %s | FileCheck --check-prefixes=GFX11,GFX11-NoTrue16 %s5; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdpal -mcpu=gfx1200 -mattr=+unaligned-access-mode -mattr=+real-true16 < %s | FileCheck --check-prefixes=GFX12,GFX12-True16 %s6; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdpal -mcpu=gfx1200 -mattr=+unaligned-access-mode -mattr=-real-true16 < %s | FileCheck --check-prefixes=GFX12,GFX12-NoTrue16 %s7 8; global address space, addrspace(1)9 10; gfx12 true 16, not natural alignment or not uniform mmo11define amdgpu_ps void @load_uniform_P1_i16_b16_gfx12(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {12; GFX7-LABEL: load_uniform_P1_i16_b16_gfx12:13; GFX7: ; %bb.0:14; GFX7-NEXT: s_mov_b32 s4, s215; GFX7-NEXT: s_mov_b32 s5, s316; GFX7-NEXT: s_mov_b32 s2, -117; GFX7-NEXT: s_mov_b32 s3, 0xf00018; GFX7-NEXT: s_mov_b64 s[6:7], s[2:3]19; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 020; GFX7-NEXT: buffer_load_ushort v3, off, s[4:7], 0 glc21; GFX7-NEXT: s_waitcnt vmcnt(0)22; GFX7-NEXT: s_mov_b32 s2, 023; GFX7-NEXT: v_readfirstlane_b32 s0, v224; GFX7-NEXT: v_readfirstlane_b32 s1, v325; GFX7-NEXT: s_add_i32 s0, s0, s126; GFX7-NEXT: v_mov_b32_e32 v2, s027; GFX7-NEXT: s_mov_b64 s[0:1], 028; GFX7-NEXT: buffer_store_short v2, v[0:1], s[0:3], 0 addr6429; GFX7-NEXT: s_endpgm30;31; GFX11-True16-LABEL: load_uniform_P1_i16_b16_gfx12:32; GFX11-True16: ; %bb.0:33; GFX11-True16-NEXT: v_mov_b32_e32 v2, 034; GFX11-True16-NEXT: s_clause 0x135; GFX11-True16-NEXT: global_load_d16_b16 v3, v2, s[0:1]36; GFX11-True16-NEXT: global_load_d16_b16 v2, v2, s[2:3] glc dlc37; GFX11-True16-NEXT: s_waitcnt vmcnt(0)38; GFX11-True16-NEXT: v_readfirstlane_b32 s0, v339; GFX11-True16-NEXT: v_readfirstlane_b32 s1, v240; GFX11-True16-NEXT: s_add_i32 s0, s0, s141; GFX11-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)42; GFX11-True16-NEXT: v_mov_b16_e32 v2.l, s043; GFX11-True16-NEXT: global_store_b16 v[0:1], v2, off44; GFX11-True16-NEXT: s_endpgm45;46; GFX11-NoTrue16-LABEL: load_uniform_P1_i16_b16_gfx12:47; GFX11-NoTrue16: ; %bb.0:48; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, 049; GFX11-NoTrue16-NEXT: s_clause 0x150; GFX11-NoTrue16-NEXT: global_load_u16 v3, v2, s[0:1]51; GFX11-NoTrue16-NEXT: global_load_u16 v2, v2, s[2:3] glc dlc52; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(0)53; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s0, v354; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s1, v255; GFX11-NoTrue16-NEXT: s_add_i32 s0, s0, s156; GFX11-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)57; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, s058; GFX11-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off59; GFX11-NoTrue16-NEXT: s_endpgm60;61; GFX12-True16-LABEL: load_uniform_P1_i16_b16_gfx12:62; GFX12-True16: ; %bb.0:63; GFX12-True16-NEXT: v_mov_b32_e32 v2, 064; GFX12-True16-NEXT: s_clause 0x165; GFX12-True16-NEXT: global_load_d16_b16 v3, v2, s[0:1]66; GFX12-True16-NEXT: global_load_d16_b16 v2, v2, s[2:3] scope:SCOPE_SYS67; GFX12-True16-NEXT: s_wait_loadcnt 0x068; GFX12-True16-NEXT: v_readfirstlane_b32 s0, v369; GFX12-True16-NEXT: v_readfirstlane_b32 s1, v270; GFX12-True16-NEXT: s_add_co_i32 s0, s0, s171; GFX12-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)72; GFX12-True16-NEXT: v_mov_b16_e32 v2.l, s073; GFX12-True16-NEXT: global_store_b16 v[0:1], v2, off74; GFX12-True16-NEXT: s_endpgm75;76; GFX12-NoTrue16-LABEL: load_uniform_P1_i16_b16_gfx12:77; GFX12-NoTrue16: ; %bb.0:78; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, 079; GFX12-NoTrue16-NEXT: s_clause 0x180; GFX12-NoTrue16-NEXT: global_load_u16 v3, v2, s[0:1]81; GFX12-NoTrue16-NEXT: global_load_u16 v2, v2, s[2:3] scope:SCOPE_SYS82; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x083; GFX12-NoTrue16-NEXT: v_readfirstlane_b32 s0, v384; GFX12-NoTrue16-NEXT: v_readfirstlane_b32 s1, v285; GFX12-NoTrue16-NEXT: s_add_co_i32 s0, s0, s186; GFX12-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)87; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, s088; GFX12-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off89; GFX12-NoTrue16-NEXT: s_endpgm90 %a = load i16, ptr addrspace(1) %ptra, align 191 %b = load volatile i16, ptr addrspace(1) %ptrb92 %sum = add i16 %a, %b93 store i16 %sum, ptr addrspace(1) %out94 ret void95}96 97; gfx11 true16, 16-bit load, not align 4 or not uniform mmo98define amdgpu_ps void @load_uniform_P1_i16_b16_gfx11(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {99; GFX7-LABEL: load_uniform_P1_i16_b16_gfx11:100; GFX7: ; %bb.0:101; GFX7-NEXT: s_mov_b32 s2, -1102; GFX7-NEXT: s_mov_b32 s3, 0xf000103; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 0104; GFX7-NEXT: buffer_load_ushort v3, off, s[0:3], 0 glc105; GFX7-NEXT: s_waitcnt vmcnt(0)106; GFX7-NEXT: s_mov_b32 s2, 0107; GFX7-NEXT: v_readfirstlane_b32 s0, v2108; GFX7-NEXT: v_readfirstlane_b32 s1, v3109; GFX7-NEXT: s_add_i32 s0, s0, s1110; GFX7-NEXT: v_mov_b32_e32 v2, s0111; GFX7-NEXT: s_mov_b64 s[0:1], 0112; GFX7-NEXT: buffer_store_short v2, v[0:1], s[0:3], 0 addr64113; GFX7-NEXT: s_endpgm114;115; GFX11-True16-LABEL: load_uniform_P1_i16_b16_gfx11:116; GFX11-True16: ; %bb.0:117; GFX11-True16-NEXT: v_mov_b32_e32 v2, 0118; GFX11-True16-NEXT: s_clause 0x1119; GFX11-True16-NEXT: global_load_d16_b16 v3, v2, s[0:1]120; GFX11-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1] glc dlc121; GFX11-True16-NEXT: s_waitcnt vmcnt(0)122; GFX11-True16-NEXT: v_readfirstlane_b32 s0, v3123; GFX11-True16-NEXT: v_readfirstlane_b32 s1, v2124; GFX11-True16-NEXT: s_add_i32 s0, s0, s1125; GFX11-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)126; GFX11-True16-NEXT: v_mov_b16_e32 v2.l, s0127; GFX11-True16-NEXT: global_store_b16 v[0:1], v2, off128; GFX11-True16-NEXT: s_endpgm129;130; GFX11-NoTrue16-LABEL: load_uniform_P1_i16_b16_gfx11:131; GFX11-NoTrue16: ; %bb.0:132; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, 0133; GFX11-NoTrue16-NEXT: s_clause 0x1134; GFX11-NoTrue16-NEXT: global_load_u16 v3, v2, s[0:1]135; GFX11-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1] glc dlc136; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(0)137; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s0, v3138; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s1, v2139; GFX11-NoTrue16-NEXT: s_add_i32 s0, s0, s1140; GFX11-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)141; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, s0142; GFX11-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off143; GFX11-NoTrue16-NEXT: s_endpgm144;145; GFX12-True16-LABEL: load_uniform_P1_i16_b16_gfx11:146; GFX12-True16: ; %bb.0:147; GFX12-True16-NEXT: v_mov_b32_e32 v2, 0148; GFX12-True16-NEXT: s_load_u16 s2, s[0:1], 0x0149; GFX12-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1] scope:SCOPE_SYS150; GFX12-True16-NEXT: s_wait_loadcnt 0x0151; GFX12-True16-NEXT: v_readfirstlane_b32 s0, v2152; GFX12-True16-NEXT: s_wait_kmcnt 0x0153; GFX12-True16-NEXT: s_add_co_i32 s0, s2, s0154; GFX12-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)155; GFX12-True16-NEXT: v_mov_b16_e32 v2.l, s0156; GFX12-True16-NEXT: global_store_b16 v[0:1], v2, off157; GFX12-True16-NEXT: s_endpgm158;159; GFX12-NoTrue16-LABEL: load_uniform_P1_i16_b16_gfx11:160; GFX12-NoTrue16: ; %bb.0:161; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, 0162; GFX12-NoTrue16-NEXT: s_load_u16 s2, s[0:1], 0x0163; GFX12-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1] scope:SCOPE_SYS164; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x0165; GFX12-NoTrue16-NEXT: v_readfirstlane_b32 s0, v2166; GFX12-NoTrue16-NEXT: s_wait_kmcnt 0x0167; GFX12-NoTrue16-NEXT: s_add_co_i32 s0, s2, s0168; GFX12-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)169; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, s0170; GFX12-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off171; GFX12-NoTrue16-NEXT: s_endpgm172 %a = load i16, ptr addrspace(1) %ptra173 %b = load volatile i16, ptr addrspace(1) %ptra, align 4174 %sum = add i16 %a, %b175 store i16 %sum, ptr addrspace(1) %out176 ret void177}178 179; gfx12 without true16, 16-bit any-extending load, not natural alignment or not uniform mmo180define amdgpu_ps void @load_uniform_P1_i16_anyextending_gfx12(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {181; GFX7-LABEL: load_uniform_P1_i16_anyextending_gfx12:182; GFX7: ; %bb.0:183; GFX7-NEXT: s_mov_b32 s2, -1184; GFX7-NEXT: s_mov_b32 s3, 0xf000185; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 0186; GFX7-NEXT: buffer_load_ushort v3, off, s[0:3], 0 glc187; GFX7-NEXT: s_waitcnt vmcnt(0)188; GFX7-NEXT: s_mov_b32 s2, 0189; GFX7-NEXT: v_readfirstlane_b32 s0, v2190; GFX7-NEXT: v_readfirstlane_b32 s1, v3191; GFX7-NEXT: s_add_i32 s0, s0, s1192; GFX7-NEXT: v_mov_b32_e32 v2, s0193; GFX7-NEXT: s_mov_b64 s[0:1], 0194; GFX7-NEXT: buffer_store_short v2, v[0:1], s[0:3], 0 addr64195; GFX7-NEXT: s_endpgm196;197; GFX11-True16-LABEL: load_uniform_P1_i16_anyextending_gfx12:198; GFX11-True16: ; %bb.0:199; GFX11-True16-NEXT: v_mov_b32_e32 v2, 0200; GFX11-True16-NEXT: s_clause 0x1201; GFX11-True16-NEXT: global_load_d16_b16 v3, v2, s[0:1]202; GFX11-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1] glc dlc203; GFX11-True16-NEXT: s_waitcnt vmcnt(0)204; GFX11-True16-NEXT: v_readfirstlane_b32 s0, v3205; GFX11-True16-NEXT: v_readfirstlane_b32 s1, v2206; GFX11-True16-NEXT: s_add_i32 s0, s0, s1207; GFX11-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)208; GFX11-True16-NEXT: v_mov_b16_e32 v2.l, s0209; GFX11-True16-NEXT: global_store_b16 v[0:1], v2, off210; GFX11-True16-NEXT: s_endpgm211;212; GFX11-NoTrue16-LABEL: load_uniform_P1_i16_anyextending_gfx12:213; GFX11-NoTrue16: ; %bb.0:214; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, 0215; GFX11-NoTrue16-NEXT: s_clause 0x1216; GFX11-NoTrue16-NEXT: global_load_u16 v3, v2, s[0:1]217; GFX11-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1] glc dlc218; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(0)219; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s0, v3220; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s1, v2221; GFX11-NoTrue16-NEXT: s_add_i32 s0, s0, s1222; GFX11-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)223; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, s0224; GFX11-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off225; GFX11-NoTrue16-NEXT: s_endpgm226;227; GFX12-True16-LABEL: load_uniform_P1_i16_anyextending_gfx12:228; GFX12-True16: ; %bb.0:229; GFX12-True16-NEXT: v_mov_b32_e32 v2, 0230; GFX12-True16-NEXT: s_clause 0x1231; GFX12-True16-NEXT: global_load_d16_b16 v3, v2, s[0:1]232; GFX12-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1] scope:SCOPE_SYS233; GFX12-True16-NEXT: s_wait_loadcnt 0x0234; GFX12-True16-NEXT: v_readfirstlane_b32 s0, v3235; GFX12-True16-NEXT: v_readfirstlane_b32 s1, v2236; GFX12-True16-NEXT: s_add_co_i32 s0, s0, s1237; GFX12-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)238; GFX12-True16-NEXT: v_mov_b16_e32 v2.l, s0239; GFX12-True16-NEXT: global_store_b16 v[0:1], v2, off240; GFX12-True16-NEXT: s_endpgm241;242; GFX12-NoTrue16-LABEL: load_uniform_P1_i16_anyextending_gfx12:243; GFX12-NoTrue16: ; %bb.0:244; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, 0245; GFX12-NoTrue16-NEXT: s_clause 0x1246; GFX12-NoTrue16-NEXT: global_load_u16 v3, v2, s[0:1]247; GFX12-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1] scope:SCOPE_SYS248; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x0249; GFX12-NoTrue16-NEXT: v_readfirstlane_b32 s0, v3250; GFX12-NoTrue16-NEXT: v_readfirstlane_b32 s1, v2251; GFX12-NoTrue16-NEXT: s_add_co_i32 s0, s0, s1252; GFX12-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)253; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, s0254; GFX12-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off255; GFX12-NoTrue16-NEXT: s_endpgm256 %a = load i16, ptr addrspace(1) %ptra, align 1257 %b = load volatile i16, ptr addrspace(1) %ptra258 %sum = add i16 %a, %b259 store i16 %sum, ptr addrspace(1) %out260 ret void261}262 263; gfx11(or older) without true 16, s16 any-extending load, not align 4 or not uniform mmo264define amdgpu_ps void @load_uniform_P1_i16_anyextending_gfx11(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {265; GFX7-LABEL: load_uniform_P1_i16_anyextending_gfx11:266; GFX7: ; %bb.0:267; GFX7-NEXT: s_mov_b32 s2, -1268; GFX7-NEXT: s_mov_b32 s3, 0xf000269; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 0270; GFX7-NEXT: buffer_load_ushort v3, off, s[0:3], 0 glc271; GFX7-NEXT: s_waitcnt vmcnt(0)272; GFX7-NEXT: s_mov_b32 s2, 0273; GFX7-NEXT: v_readfirstlane_b32 s0, v2274; GFX7-NEXT: v_readfirstlane_b32 s1, v3275; GFX7-NEXT: s_add_i32 s0, s0, s1276; GFX7-NEXT: v_mov_b32_e32 v2, s0277; GFX7-NEXT: s_mov_b64 s[0:1], 0278; GFX7-NEXT: buffer_store_short v2, v[0:1], s[0:3], 0 addr64279; GFX7-NEXT: s_endpgm280;281; GFX11-True16-LABEL: load_uniform_P1_i16_anyextending_gfx11:282; GFX11-True16: ; %bb.0:283; GFX11-True16-NEXT: v_mov_b32_e32 v2, 0284; GFX11-True16-NEXT: s_clause 0x1285; GFX11-True16-NEXT: global_load_d16_b16 v3, v2, s[0:1]286; GFX11-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1] glc dlc287; GFX11-True16-NEXT: s_waitcnt vmcnt(0)288; GFX11-True16-NEXT: v_readfirstlane_b32 s0, v3289; GFX11-True16-NEXT: v_readfirstlane_b32 s1, v2290; GFX11-True16-NEXT: s_add_i32 s0, s0, s1291; GFX11-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)292; GFX11-True16-NEXT: v_mov_b16_e32 v2.l, s0293; GFX11-True16-NEXT: global_store_b16 v[0:1], v2, off294; GFX11-True16-NEXT: s_endpgm295;296; GFX11-NoTrue16-LABEL: load_uniform_P1_i16_anyextending_gfx11:297; GFX11-NoTrue16: ; %bb.0:298; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, 0299; GFX11-NoTrue16-NEXT: s_clause 0x1300; GFX11-NoTrue16-NEXT: global_load_u16 v3, v2, s[0:1]301; GFX11-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1] glc dlc302; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(0)303; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s0, v3304; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s1, v2305; GFX11-NoTrue16-NEXT: s_add_i32 s0, s0, s1306; GFX11-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)307; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, s0308; GFX11-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off309; GFX11-NoTrue16-NEXT: s_endpgm310;311; GFX12-True16-LABEL: load_uniform_P1_i16_anyextending_gfx11:312; GFX12-True16: ; %bb.0:313; GFX12-True16-NEXT: v_mov_b32_e32 v2, 0314; GFX12-True16-NEXT: s_load_u16 s2, s[0:1], 0x0315; GFX12-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1] scope:SCOPE_SYS316; GFX12-True16-NEXT: s_wait_loadcnt 0x0317; GFX12-True16-NEXT: v_readfirstlane_b32 s0, v2318; GFX12-True16-NEXT: s_wait_kmcnt 0x0319; GFX12-True16-NEXT: s_add_co_i32 s0, s2, s0320; GFX12-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)321; GFX12-True16-NEXT: v_mov_b16_e32 v2.l, s0322; GFX12-True16-NEXT: global_store_b16 v[0:1], v2, off323; GFX12-True16-NEXT: s_endpgm324;325; GFX12-NoTrue16-LABEL: load_uniform_P1_i16_anyextending_gfx11:326; GFX12-NoTrue16: ; %bb.0:327; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, 0328; GFX12-NoTrue16-NEXT: s_load_u16 s2, s[0:1], 0x0329; GFX12-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1] scope:SCOPE_SYS330; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x0331; GFX12-NoTrue16-NEXT: v_readfirstlane_b32 s0, v2332; GFX12-NoTrue16-NEXT: s_wait_kmcnt 0x0333; GFX12-NoTrue16-NEXT: s_add_co_i32 s0, s2, s0334; GFX12-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)335; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, s0336; GFX12-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off337; GFX12-NoTrue16-NEXT: s_endpgm338 %a = load i16, ptr addrspace(1) %ptra339 %b = load volatile i16, ptr addrspace(1) %ptra, align 4340 %sum = add i16 %a, %b341 store i16 %sum, ptr addrspace(1) %out342 ret void343}344 345; any target, 32-bit load load, not align 4 or not uniform mmo346define amdgpu_ps void @load_uniform_P1_i32(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {347; GFX7-LABEL: load_uniform_P1_i32:348; GFX7: ; %bb.0:349; GFX7-NEXT: s_mov_b32 s2, -1350; GFX7-NEXT: s_mov_b32 s3, 0xf000351; GFX7-NEXT: buffer_load_dword v2, off, s[0:3], 0352; GFX7-NEXT: buffer_load_dword v3, off, s[0:3], 0 glc353; GFX7-NEXT: s_waitcnt vmcnt(0)354; GFX7-NEXT: s_mov_b32 s2, 0355; GFX7-NEXT: v_readfirstlane_b32 s0, v2356; GFX7-NEXT: v_readfirstlane_b32 s1, v3357; GFX7-NEXT: s_add_i32 s0, s0, s1358; GFX7-NEXT: v_mov_b32_e32 v2, s0359; GFX7-NEXT: s_mov_b64 s[0:1], 0360; GFX7-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64361; GFX7-NEXT: s_endpgm362;363; GFX11-LABEL: load_uniform_P1_i32:364; GFX11: ; %bb.0:365; GFX11-NEXT: v_mov_b32_e32 v2, 0366; GFX11-NEXT: s_clause 0x1367; GFX11-NEXT: global_load_b32 v3, v2, s[0:1]368; GFX11-NEXT: global_load_b32 v2, v2, s[0:1] glc dlc369; GFX11-NEXT: s_waitcnt vmcnt(0)370; GFX11-NEXT: v_readfirstlane_b32 s0, v3371; GFX11-NEXT: v_readfirstlane_b32 s1, v2372; GFX11-NEXT: s_add_i32 s0, s0, s1373; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)374; GFX11-NEXT: v_mov_b32_e32 v2, s0375; GFX11-NEXT: global_store_b32 v[0:1], v2, off376; GFX11-NEXT: s_endpgm377;378; GFX12-LABEL: load_uniform_P1_i32:379; GFX12: ; %bb.0:380; GFX12-NEXT: v_mov_b32_e32 v2, 0381; GFX12-NEXT: s_clause 0x1382; GFX12-NEXT: global_load_b32 v3, v2, s[0:1]383; GFX12-NEXT: global_load_b32 v2, v2, s[0:1] scope:SCOPE_SYS384; GFX12-NEXT: s_wait_loadcnt 0x0385; GFX12-NEXT: v_readfirstlane_b32 s0, v3386; GFX12-NEXT: v_readfirstlane_b32 s1, v2387; GFX12-NEXT: s_add_co_i32 s0, s0, s1388; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)389; GFX12-NEXT: v_mov_b32_e32 v2, s0390; GFX12-NEXT: global_store_b32 v[0:1], v2, off391; GFX12-NEXT: s_endpgm392 %a = load i32, ptr addrspace(1) %ptra, align 2393 %b = load volatile i32, ptr addrspace(1) %ptra394 %sum = add i32 %a, %b395 store i32 %sum, ptr addrspace(1) %out396 ret void397}398 399; any target, 64bit load load, not align 4 or not uniform mmo400define amdgpu_ps void @load_uniform_P1_v2i32(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {401; GFX7-LABEL: load_uniform_P1_v2i32:402; GFX7: ; %bb.0:403; GFX7-NEXT: s_mov_b32 s2, -1404; GFX7-NEXT: s_mov_b32 s3, 0xf000405; GFX7-NEXT: buffer_load_dwordx2 v[2:3], off, s[0:3], 0406; GFX7-NEXT: buffer_load_dwordx2 v[4:5], off, s[0:3], 0 glc407; GFX7-NEXT: s_waitcnt vmcnt(0)408; GFX7-NEXT: s_mov_b32 s2, 0409; GFX7-NEXT: v_readfirstlane_b32 s1, v3410; GFX7-NEXT: v_readfirstlane_b32 s5, v5411; GFX7-NEXT: v_readfirstlane_b32 s0, v2412; GFX7-NEXT: v_readfirstlane_b32 s4, v4413; GFX7-NEXT: s_add_i32 s1, s1, s5414; GFX7-NEXT: s_add_i32 s0, s0, s4415; GFX7-NEXT: v_mov_b32_e32 v3, s1416; GFX7-NEXT: v_mov_b32_e32 v2, s0417; GFX7-NEXT: s_mov_b64 s[0:1], 0418; GFX7-NEXT: buffer_store_dwordx2 v[2:3], v[0:1], s[0:3], 0 addr64419; GFX7-NEXT: s_endpgm420;421; GFX11-LABEL: load_uniform_P1_v2i32:422; GFX11: ; %bb.0:423; GFX11-NEXT: v_mov_b32_e32 v4, 0424; GFX11-NEXT: s_clause 0x1425; GFX11-NEXT: global_load_b64 v[2:3], v4, s[0:1]426; GFX11-NEXT: global_load_b64 v[4:5], v4, s[0:1] glc dlc427; GFX11-NEXT: s_waitcnt vmcnt(0)428; GFX11-NEXT: v_readfirstlane_b32 s1, v3429; GFX11-NEXT: v_readfirstlane_b32 s3, v5430; GFX11-NEXT: v_readfirstlane_b32 s0, v2431; GFX11-NEXT: v_readfirstlane_b32 s2, v4432; GFX11-NEXT: s_add_i32 s1, s1, s3433; GFX11-NEXT: s_add_i32 s0, s0, s2434; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)435; GFX11-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0436; GFX11-NEXT: global_store_b64 v[0:1], v[2:3], off437; GFX11-NEXT: s_endpgm438;439; GFX12-LABEL: load_uniform_P1_v2i32:440; GFX12: ; %bb.0:441; GFX12-NEXT: v_mov_b32_e32 v4, 0442; GFX12-NEXT: s_clause 0x1443; GFX12-NEXT: global_load_b64 v[2:3], v4, s[0:1]444; GFX12-NEXT: global_load_b64 v[4:5], v4, s[0:1] scope:SCOPE_SYS445; GFX12-NEXT: s_wait_loadcnt 0x0446; GFX12-NEXT: v_readfirstlane_b32 s1, v3447; GFX12-NEXT: v_readfirstlane_b32 s3, v5448; GFX12-NEXT: v_readfirstlane_b32 s0, v2449; GFX12-NEXT: v_readfirstlane_b32 s2, v4450; GFX12-NEXT: s_add_co_i32 s1, s1, s3451; GFX12-NEXT: s_add_co_i32 s0, s0, s2452; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)453; GFX12-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0454; GFX12-NEXT: global_store_b64 v[0:1], v[2:3], off455; GFX12-NEXT: s_endpgm456 %a = load <2 x i32>, ptr addrspace(1) %ptra, align 2457 %b = load volatile <2 x i32>, ptr addrspace(1) %ptra458 %sum = add <2 x i32> %a, %b459 store <2 x i32> %sum, ptr addrspace(1) %out460 ret void461}462 463; any target, 96bit load load, not align 4 or not uniform mmo464define amdgpu_ps void @load_uniform_P1_v3i32_gfx12(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {465; GFX7-LABEL: load_uniform_P1_v3i32_gfx12:466; GFX7: ; %bb.0:467; GFX7-NEXT: s_mov_b32 s2, -1468; GFX7-NEXT: s_mov_b32 s3, 0xf000469; GFX7-NEXT: buffer_load_dwordx3 v[2:4], off, s[0:3], 0470; GFX7-NEXT: buffer_load_dwordx3 v[5:7], off, s[0:3], 0 glc471; GFX7-NEXT: s_waitcnt vmcnt(0)472; GFX7-NEXT: s_mov_b32 s2, 0473; GFX7-NEXT: v_readfirstlane_b32 s0, v2474; GFX7-NEXT: v_readfirstlane_b32 s4, v5475; GFX7-NEXT: v_readfirstlane_b32 s1, v3476; GFX7-NEXT: v_readfirstlane_b32 s6, v4477; GFX7-NEXT: v_readfirstlane_b32 s5, v6478; GFX7-NEXT: v_readfirstlane_b32 s7, v7479; GFX7-NEXT: s_add_i32 s4, s0, s4480; GFX7-NEXT: s_add_i32 s5, s1, s5481; GFX7-NEXT: s_add_i32 s6, s6, s7482; GFX7-NEXT: v_mov_b32_e32 v2, s4483; GFX7-NEXT: v_mov_b32_e32 v3, s5484; GFX7-NEXT: v_mov_b32_e32 v4, s6485; GFX7-NEXT: s_mov_b64 s[0:1], 0486; GFX7-NEXT: buffer_store_dwordx3 v[2:4], v[0:1], s[0:3], 0 addr64487; GFX7-NEXT: s_endpgm488;489; GFX11-LABEL: load_uniform_P1_v3i32_gfx12:490; GFX11: ; %bb.0:491; GFX11-NEXT: v_mov_b32_e32 v5, 0492; GFX11-NEXT: s_clause 0x1493; GFX11-NEXT: global_load_b96 v[2:4], v5, s[0:1]494; GFX11-NEXT: global_load_b96 v[5:7], v5, s[0:1] glc dlc495; GFX11-NEXT: s_waitcnt vmcnt(0)496; GFX11-NEXT: v_readfirstlane_b32 s2, v4497; GFX11-NEXT: v_readfirstlane_b32 s5, v7498; GFX11-NEXT: v_readfirstlane_b32 s0, v2499; GFX11-NEXT: v_readfirstlane_b32 s1, v3500; GFX11-NEXT: v_readfirstlane_b32 s3, v5501; GFX11-NEXT: v_readfirstlane_b32 s4, v6502; GFX11-NEXT: s_add_i32 s2, s2, s5503; GFX11-NEXT: s_add_i32 s0, s0, s3504; GFX11-NEXT: s_add_i32 s1, s1, s4505; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)506; GFX11-NEXT: v_dual_mov_b32 v4, s2 :: v_dual_mov_b32 v3, s1507; GFX11-NEXT: v_mov_b32_e32 v2, s0508; GFX11-NEXT: global_store_b96 v[0:1], v[2:4], off509; GFX11-NEXT: s_endpgm510;511; GFX12-LABEL: load_uniform_P1_v3i32_gfx12:512; GFX12: ; %bb.0:513; GFX12-NEXT: v_mov_b32_e32 v5, 0514; GFX12-NEXT: s_clause 0x1515; GFX12-NEXT: global_load_b96 v[2:4], v5, s[0:1]516; GFX12-NEXT: global_load_b96 v[5:7], v5, s[0:1] scope:SCOPE_SYS517; GFX12-NEXT: s_wait_loadcnt 0x0518; GFX12-NEXT: v_readfirstlane_b32 s2, v4519; GFX12-NEXT: v_readfirstlane_b32 s5, v7520; GFX12-NEXT: v_readfirstlane_b32 s0, v2521; GFX12-NEXT: v_readfirstlane_b32 s1, v3522; GFX12-NEXT: v_readfirstlane_b32 s3, v5523; GFX12-NEXT: v_readfirstlane_b32 s4, v6524; GFX12-NEXT: s_add_co_i32 s2, s2, s5525; GFX12-NEXT: s_add_co_i32 s0, s0, s3526; GFX12-NEXT: s_add_co_i32 s1, s1, s4527; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)528; GFX12-NEXT: v_dual_mov_b32 v4, s2 :: v_dual_mov_b32 v3, s1529; GFX12-NEXT: v_mov_b32_e32 v2, s0530; GFX12-NEXT: global_store_b96 v[0:1], v[2:4], off531; GFX12-NEXT: s_endpgm532 %a = load <3 x i32>, ptr addrspace(1) %ptra, align 2533 %b = load volatile <3 x i32>, ptr addrspace(1) %ptra534 %sum = add <3 x i32> %a, %b535 store <3 x i32> %sum, ptr addrspace(1) %out536 ret void537}538 539; any target, 128-bit load load, not align 4 or not uniform mmo540define amdgpu_ps void @load_uniform_P1_v4i32(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {541; GFX7-LABEL: load_uniform_P1_v4i32:542; GFX7: ; %bb.0:543; GFX7-NEXT: s_mov_b32 s2, -1544; GFX7-NEXT: s_mov_b32 s3, 0xf000545; GFX7-NEXT: buffer_load_dwordx4 v[2:5], off, s[0:3], 0546; GFX7-NEXT: buffer_load_dwordx4 v[6:9], off, s[0:3], 0 glc547; GFX7-NEXT: s_waitcnt vmcnt(0)548; GFX7-NEXT: s_mov_b32 s2, 0549; GFX7-NEXT: v_readfirstlane_b32 s0, v2550; GFX7-NEXT: v_readfirstlane_b32 s4, v6551; GFX7-NEXT: v_readfirstlane_b32 s1, v3552; GFX7-NEXT: v_readfirstlane_b32 s6, v4553; GFX7-NEXT: v_readfirstlane_b32 s7, v5554; GFX7-NEXT: v_readfirstlane_b32 s5, v7555; GFX7-NEXT: v_readfirstlane_b32 s8, v8556; GFX7-NEXT: v_readfirstlane_b32 s9, v9557; GFX7-NEXT: s_add_i32 s4, s0, s4558; GFX7-NEXT: s_add_i32 s5, s1, s5559; GFX7-NEXT: s_add_i32 s6, s6, s8560; GFX7-NEXT: s_add_i32 s7, s7, s9561; GFX7-NEXT: v_mov_b32_e32 v2, s4562; GFX7-NEXT: v_mov_b32_e32 v3, s5563; GFX7-NEXT: v_mov_b32_e32 v4, s6564; GFX7-NEXT: v_mov_b32_e32 v5, s7565; GFX7-NEXT: s_mov_b64 s[0:1], 0566; GFX7-NEXT: buffer_store_dwordx4 v[2:5], v[0:1], s[0:3], 0 addr64567; GFX7-NEXT: s_endpgm568;569; GFX11-LABEL: load_uniform_P1_v4i32:570; GFX11: ; %bb.0:571; GFX11-NEXT: v_mov_b32_e32 v6, 0572; GFX11-NEXT: s_clause 0x1573; GFX11-NEXT: global_load_b128 v[2:5], v6, s[0:1]574; GFX11-NEXT: global_load_b128 v[6:9], v6, s[0:1] glc dlc575; GFX11-NEXT: s_waitcnt vmcnt(0)576; GFX11-NEXT: v_readfirstlane_b32 s3, v5577; GFX11-NEXT: v_readfirstlane_b32 s7, v9578; GFX11-NEXT: v_readfirstlane_b32 s0, v2579; GFX11-NEXT: v_readfirstlane_b32 s1, v3580; GFX11-NEXT: v_readfirstlane_b32 s2, v4581; GFX11-NEXT: v_readfirstlane_b32 s4, v6582; GFX11-NEXT: v_readfirstlane_b32 s5, v7583; GFX11-NEXT: v_readfirstlane_b32 s6, v8584; GFX11-NEXT: s_add_i32 s3, s3, s7585; GFX11-NEXT: s_add_i32 s0, s0, s4586; GFX11-NEXT: s_add_i32 s1, s1, s5587; GFX11-NEXT: s_add_i32 s2, s2, s6588; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)589; GFX11-NEXT: v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s2590; GFX11-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0591; GFX11-NEXT: global_store_b128 v[0:1], v[2:5], off592; GFX11-NEXT: s_endpgm593;594; GFX12-LABEL: load_uniform_P1_v4i32:595; GFX12: ; %bb.0:596; GFX12-NEXT: v_mov_b32_e32 v6, 0597; GFX12-NEXT: s_clause 0x1598; GFX12-NEXT: global_load_b128 v[2:5], v6, s[0:1]599; GFX12-NEXT: global_load_b128 v[6:9], v6, s[0:1] scope:SCOPE_SYS600; GFX12-NEXT: s_wait_loadcnt 0x0601; GFX12-NEXT: v_readfirstlane_b32 s3, v5602; GFX12-NEXT: v_readfirstlane_b32 s7, v9603; GFX12-NEXT: v_readfirstlane_b32 s0, v2604; GFX12-NEXT: v_readfirstlane_b32 s1, v3605; GFX12-NEXT: v_readfirstlane_b32 s2, v4606; GFX12-NEXT: v_readfirstlane_b32 s4, v6607; GFX12-NEXT: v_readfirstlane_b32 s5, v7608; GFX12-NEXT: v_readfirstlane_b32 s6, v8609; GFX12-NEXT: s_add_co_i32 s3, s3, s7610; GFX12-NEXT: s_add_co_i32 s0, s0, s4611; GFX12-NEXT: s_add_co_i32 s1, s1, s5612; GFX12-NEXT: s_add_co_i32 s2, s2, s6613; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)614; GFX12-NEXT: v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s2615; GFX12-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0616; GFX12-NEXT: global_store_b128 v[0:1], v[2:5], off617; GFX12-NEXT: s_endpgm618 %a = load <4 x i32>, ptr addrspace(1) %ptra, align 2619 %b = load volatile <4 x i32>, ptr addrspace(1) %ptra620 %sum = add <4 x i32> %a, %b621 store <4 x i32> %sum, ptr addrspace(1) %out622 ret void623}624 625; any target, 256bit load load, not align 4 or not uniform mmo626define amdgpu_ps void @load_uniform_P1_v8i32(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {627; GFX7-LABEL: load_uniform_P1_v8i32:628; GFX7: ; %bb.0:629; GFX7-NEXT: s_mov_b32 s2, -1630; GFX7-NEXT: s_mov_b32 s3, 0xf000631; GFX7-NEXT: buffer_load_dwordx4 v[2:5], off, s[0:3], 0632; GFX7-NEXT: buffer_load_dwordx4 v[6:9], off, s[0:3], 0 offset:16633; GFX7-NEXT: buffer_load_dwordx4 v[10:13], off, s[0:3], 0 glc634; GFX7-NEXT: s_waitcnt vmcnt(0)635; GFX7-NEXT: buffer_load_dwordx4 v[14:17], off, s[0:3], 0 offset:16 glc636; GFX7-NEXT: s_waitcnt vmcnt(0)637; GFX7-NEXT: s_mov_b32 s2, 0638; GFX7-NEXT: s_mov_b64 s[0:1], 0639; GFX7-NEXT: v_readfirstlane_b32 s4, v2640; GFX7-NEXT: v_readfirstlane_b32 s5, v3641; GFX7-NEXT: v_readfirstlane_b32 s12, v10642; GFX7-NEXT: v_readfirstlane_b32 s6, v4643; GFX7-NEXT: v_readfirstlane_b32 s7, v5644; GFX7-NEXT: v_readfirstlane_b32 s8, v6645; GFX7-NEXT: v_readfirstlane_b32 s13, v11646; GFX7-NEXT: v_readfirstlane_b32 s14, v12647; GFX7-NEXT: v_readfirstlane_b32 s15, v13648; GFX7-NEXT: v_readfirstlane_b32 s16, v14649; GFX7-NEXT: s_add_i32 s4, s4, s12650; GFX7-NEXT: v_readfirstlane_b32 s9, v7651; GFX7-NEXT: v_readfirstlane_b32 s10, v8652; GFX7-NEXT: v_readfirstlane_b32 s11, v9653; GFX7-NEXT: v_readfirstlane_b32 s17, v15654; GFX7-NEXT: v_readfirstlane_b32 s18, v16655; GFX7-NEXT: v_readfirstlane_b32 s19, v17656; GFX7-NEXT: s_add_i32 s5, s5, s13657; GFX7-NEXT: s_add_i32 s6, s6, s14658; GFX7-NEXT: s_add_i32 s7, s7, s15659; GFX7-NEXT: s_add_i32 s8, s8, s16660; GFX7-NEXT: v_mov_b32_e32 v2, s4661; GFX7-NEXT: s_add_i32 s9, s9, s17662; GFX7-NEXT: s_add_i32 s10, s10, s18663; GFX7-NEXT: s_add_i32 s11, s11, s19664; GFX7-NEXT: v_mov_b32_e32 v3, s5665; GFX7-NEXT: v_mov_b32_e32 v4, s6666; GFX7-NEXT: v_mov_b32_e32 v5, s7667; GFX7-NEXT: v_mov_b32_e32 v6, s8668; GFX7-NEXT: v_mov_b32_e32 v7, s9669; GFX7-NEXT: v_mov_b32_e32 v8, s10670; GFX7-NEXT: v_mov_b32_e32 v9, s11671; GFX7-NEXT: buffer_store_dwordx4 v[2:5], v[0:1], s[0:3], 0 addr64672; GFX7-NEXT: buffer_store_dwordx4 v[6:9], v[0:1], s[0:3], 0 addr64 offset:16673; GFX7-NEXT: s_endpgm674;675; GFX11-LABEL: load_uniform_P1_v8i32:676; GFX11: ; %bb.0:677; GFX11-NEXT: v_mov_b32_e32 v14, 0678; GFX11-NEXT: s_clause 0x2679; GFX11-NEXT: global_load_b128 v[2:5], v14, s[0:1]680; GFX11-NEXT: global_load_b128 v[6:9], v14, s[0:1] offset:16681; GFX11-NEXT: global_load_b128 v[10:13], v14, s[0:1] glc dlc682; GFX11-NEXT: s_waitcnt vmcnt(0)683; GFX11-NEXT: global_load_b128 v[14:17], v14, s[0:1] offset:16 glc dlc684; GFX11-NEXT: s_waitcnt vmcnt(0)685; GFX11-NEXT: v_readfirstlane_b32 s3, v5686; GFX11-NEXT: v_readfirstlane_b32 s0, v2687; GFX11-NEXT: v_readfirstlane_b32 s11, v13688; GFX11-NEXT: v_readfirstlane_b32 s1, v3689; GFX11-NEXT: v_readfirstlane_b32 s2, v4690; GFX11-NEXT: v_readfirstlane_b32 s7, v9691; GFX11-NEXT: v_readfirstlane_b32 s8, v10692; GFX11-NEXT: v_readfirstlane_b32 s9, v11693; GFX11-NEXT: v_readfirstlane_b32 s10, v12694; GFX11-NEXT: v_readfirstlane_b32 s15, v17695; GFX11-NEXT: v_readfirstlane_b32 s4, v6696; GFX11-NEXT: v_readfirstlane_b32 s5, v7697; GFX11-NEXT: v_readfirstlane_b32 s6, v8698; GFX11-NEXT: v_readfirstlane_b32 s12, v14699; GFX11-NEXT: v_readfirstlane_b32 s13, v15700; GFX11-NEXT: v_readfirstlane_b32 s14, v16701; GFX11-NEXT: s_add_i32 s3, s3, s11702; GFX11-NEXT: s_add_i32 s0, s0, s8703; GFX11-NEXT: s_add_i32 s1, s1, s9704; GFX11-NEXT: s_add_i32 s2, s2, s10705; GFX11-NEXT: s_add_i32 s7, s7, s15706; GFX11-NEXT: s_add_i32 s4, s4, s12707; GFX11-NEXT: s_add_i32 s5, s5, s13708; GFX11-NEXT: s_add_i32 s6, s6, s14709; GFX11-NEXT: v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s2710; GFX11-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0711; GFX11-NEXT: v_dual_mov_b32 v9, s7 :: v_dual_mov_b32 v8, s6712; GFX11-NEXT: v_dual_mov_b32 v7, s5 :: v_dual_mov_b32 v6, s4713; GFX11-NEXT: s_clause 0x1714; GFX11-NEXT: global_store_b128 v[0:1], v[2:5], off715; GFX11-NEXT: global_store_b128 v[0:1], v[6:9], off offset:16716; GFX11-NEXT: s_endpgm717;718; GFX12-LABEL: load_uniform_P1_v8i32:719; GFX12: ; %bb.0:720; GFX12-NEXT: v_mov_b32_e32 v14, 0721; GFX12-NEXT: s_clause 0x2722; GFX12-NEXT: global_load_b128 v[2:5], v14, s[0:1]723; GFX12-NEXT: global_load_b128 v[6:9], v14, s[0:1] offset:16724; GFX12-NEXT: global_load_b128 v[10:13], v14, s[0:1] scope:SCOPE_SYS725; GFX12-NEXT: s_wait_loadcnt 0x0726; GFX12-NEXT: global_load_b128 v[14:17], v14, s[0:1] offset:16 scope:SCOPE_SYS727; GFX12-NEXT: s_wait_loadcnt 0x0728; GFX12-NEXT: v_readfirstlane_b32 s3, v5729; GFX12-NEXT: v_readfirstlane_b32 s0, v2730; GFX12-NEXT: v_readfirstlane_b32 s11, v13731; GFX12-NEXT: v_readfirstlane_b32 s1, v3732; GFX12-NEXT: v_readfirstlane_b32 s2, v4733; GFX12-NEXT: v_readfirstlane_b32 s7, v9734; GFX12-NEXT: v_readfirstlane_b32 s8, v10735; GFX12-NEXT: v_readfirstlane_b32 s9, v11736; GFX12-NEXT: v_readfirstlane_b32 s10, v12737; GFX12-NEXT: v_readfirstlane_b32 s15, v17738; GFX12-NEXT: v_readfirstlane_b32 s4, v6739; GFX12-NEXT: v_readfirstlane_b32 s5, v7740; GFX12-NEXT: v_readfirstlane_b32 s6, v8741; GFX12-NEXT: v_readfirstlane_b32 s12, v14742; GFX12-NEXT: v_readfirstlane_b32 s13, v15743; GFX12-NEXT: v_readfirstlane_b32 s14, v16744; GFX12-NEXT: s_add_co_i32 s3, s3, s11745; GFX12-NEXT: s_add_co_i32 s0, s0, s8746; GFX12-NEXT: s_add_co_i32 s1, s1, s9747; GFX12-NEXT: s_add_co_i32 s2, s2, s10748; GFX12-NEXT: s_add_co_i32 s7, s7, s15749; GFX12-NEXT: s_add_co_i32 s4, s4, s12750; GFX12-NEXT: s_add_co_i32 s5, s5, s13751; GFX12-NEXT: s_add_co_i32 s6, s6, s14752; GFX12-NEXT: v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s2753; GFX12-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0754; GFX12-NEXT: v_dual_mov_b32 v9, s7 :: v_dual_mov_b32 v8, s6755; GFX12-NEXT: v_dual_mov_b32 v7, s5 :: v_dual_mov_b32 v6, s4756; GFX12-NEXT: s_clause 0x1757; GFX12-NEXT: global_store_b128 v[0:1], v[2:5], off758; GFX12-NEXT: global_store_b128 v[0:1], v[6:9], off offset:16759; GFX12-NEXT: s_endpgm760 %a = load <8 x i32>, ptr addrspace(1) %ptra, align 2761 %b = load volatile <8 x i32>, ptr addrspace(1) %ptra762 %sum = add <8 x i32> %a, %b763 store <8 x i32> %sum, ptr addrspace(1) %out764 ret void765}766 767; any target, 512bit load load, not align 4 or not uniform mmo768define amdgpu_ps void @load_uniform_P1_v16i32(ptr addrspace(1) inreg %ptra, ptr addrspace(1) inreg %ptrb, ptr addrspace(1) %out) {769; GFX7-LABEL: load_uniform_P1_v16i32:770; GFX7: ; %bb.0:771; GFX7-NEXT: s_mov_b32 s2, -1772; GFX7-NEXT: s_mov_b32 s3, 0xf000773; GFX7-NEXT: buffer_load_dwordx4 v[2:5], off, s[0:3], 0774; GFX7-NEXT: buffer_load_dwordx4 v[6:9], off, s[0:3], 0 offset:16775; GFX7-NEXT: buffer_load_dwordx4 v[10:13], off, s[0:3], 0 offset:32776; GFX7-NEXT: buffer_load_dwordx4 v[14:17], off, s[0:3], 0 offset:48777; GFX7-NEXT: s_waitcnt vmcnt(3)778; GFX7-NEXT: v_readfirstlane_b32 s4, v2779; GFX7-NEXT: v_readfirstlane_b32 s5, v3780; GFX7-NEXT: v_readfirstlane_b32 s6, v4781; GFX7-NEXT: v_readfirstlane_b32 s7, v5782; GFX7-NEXT: buffer_load_dwordx4 v[2:5], off, s[0:3], 0 glc783; GFX7-NEXT: s_waitcnt vmcnt(0)784; GFX7-NEXT: v_readfirstlane_b32 s8, v6785; GFX7-NEXT: v_readfirstlane_b32 s9, v7786; GFX7-NEXT: v_readfirstlane_b32 s10, v8787; GFX7-NEXT: v_readfirstlane_b32 s11, v9788; GFX7-NEXT: buffer_load_dwordx4 v[6:9], off, s[0:3], 0 offset:16 glc789; GFX7-NEXT: s_waitcnt vmcnt(0)790; GFX7-NEXT: v_readfirstlane_b32 s12, v10791; GFX7-NEXT: v_readfirstlane_b32 s13, v11792; GFX7-NEXT: v_readfirstlane_b32 s14, v12793; GFX7-NEXT: v_readfirstlane_b32 s15, v13794; GFX7-NEXT: buffer_load_dwordx4 v[10:13], off, s[0:3], 0 offset:32 glc795; GFX7-NEXT: s_waitcnt vmcnt(0)796; GFX7-NEXT: v_readfirstlane_b32 s16, v14797; GFX7-NEXT: v_readfirstlane_b32 s17, v15798; GFX7-NEXT: v_readfirstlane_b32 s18, v16799; GFX7-NEXT: v_readfirstlane_b32 s19, v17800; GFX7-NEXT: buffer_load_dwordx4 v[14:17], off, s[0:3], 0 offset:48 glc801; GFX7-NEXT: s_waitcnt vmcnt(0)802; GFX7-NEXT: s_mov_b32 s2, 0803; GFX7-NEXT: s_mov_b64 s[0:1], 0804; GFX7-NEXT: v_readfirstlane_b32 s20, v2805; GFX7-NEXT: v_readfirstlane_b32 s21, v3806; GFX7-NEXT: v_readfirstlane_b32 s22, v4807; GFX7-NEXT: v_readfirstlane_b32 s23, v5808; GFX7-NEXT: s_add_i32 s4, s4, s20809; GFX7-NEXT: v_readfirstlane_b32 s24, v6810; GFX7-NEXT: v_readfirstlane_b32 s25, v7811; GFX7-NEXT: v_readfirstlane_b32 s26, v8812; GFX7-NEXT: v_readfirstlane_b32 s27, v9813; GFX7-NEXT: s_add_i32 s5, s5, s21814; GFX7-NEXT: v_readfirstlane_b32 s28, v10815; GFX7-NEXT: v_readfirstlane_b32 s29, v11816; GFX7-NEXT: v_readfirstlane_b32 s30, v12817; GFX7-NEXT: v_readfirstlane_b32 s31, v13818; GFX7-NEXT: s_add_i32 s6, s6, s22819; GFX7-NEXT: v_readfirstlane_b32 s33, v14820; GFX7-NEXT: v_readfirstlane_b32 s34, v15821; GFX7-NEXT: v_readfirstlane_b32 s35, v16822; GFX7-NEXT: v_readfirstlane_b32 s36, v17823; GFX7-NEXT: s_add_i32 s7, s7, s23824; GFX7-NEXT: s_add_i32 s8, s8, s24825; GFX7-NEXT: s_add_i32 s12, s12, s28826; GFX7-NEXT: s_add_i32 s16, s16, s33827; GFX7-NEXT: v_mov_b32_e32 v2, s4828; GFX7-NEXT: s_add_i32 s9, s9, s25829; GFX7-NEXT: s_add_i32 s10, s10, s26830; GFX7-NEXT: s_add_i32 s11, s11, s27831; GFX7-NEXT: s_add_i32 s13, s13, s29832; GFX7-NEXT: s_add_i32 s14, s14, s30833; GFX7-NEXT: s_add_i32 s15, s15, s31834; GFX7-NEXT: s_add_i32 s17, s17, s34835; GFX7-NEXT: s_add_i32 s18, s18, s35836; GFX7-NEXT: s_add_i32 s19, s19, s36837; GFX7-NEXT: v_mov_b32_e32 v3, s5838; GFX7-NEXT: v_mov_b32_e32 v4, s6839; GFX7-NEXT: v_mov_b32_e32 v5, s7840; GFX7-NEXT: v_mov_b32_e32 v6, s8841; GFX7-NEXT: v_mov_b32_e32 v10, s12842; GFX7-NEXT: v_mov_b32_e32 v14, s16843; GFX7-NEXT: v_mov_b32_e32 v7, s9844; GFX7-NEXT: v_mov_b32_e32 v8, s10845; GFX7-NEXT: v_mov_b32_e32 v9, s11846; GFX7-NEXT: v_mov_b32_e32 v11, s13847; GFX7-NEXT: v_mov_b32_e32 v12, s14848; GFX7-NEXT: v_mov_b32_e32 v13, s15849; GFX7-NEXT: v_mov_b32_e32 v15, s17850; GFX7-NEXT: v_mov_b32_e32 v16, s18851; GFX7-NEXT: v_mov_b32_e32 v17, s19852; GFX7-NEXT: buffer_store_dwordx4 v[2:5], v[0:1], s[0:3], 0 addr64853; GFX7-NEXT: buffer_store_dwordx4 v[6:9], v[0:1], s[0:3], 0 addr64 offset:16854; GFX7-NEXT: buffer_store_dwordx4 v[10:13], v[0:1], s[0:3], 0 addr64 offset:32855; GFX7-NEXT: buffer_store_dwordx4 v[14:17], v[0:1], s[0:3], 0 addr64 offset:48856; GFX7-NEXT: s_endpgm857;858; GFX11-LABEL: load_uniform_P1_v16i32:859; GFX11: ; %bb.0:860; GFX11-NEXT: v_mov_b32_e32 v30, 0861; GFX11-NEXT: s_clause 0x4862; GFX11-NEXT: global_load_b128 v[2:5], v30, s[0:1]863; GFX11-NEXT: global_load_b128 v[6:9], v30, s[0:1] offset:16864; GFX11-NEXT: global_load_b128 v[10:13], v30, s[0:1] offset:32865; GFX11-NEXT: global_load_b128 v[14:17], v30, s[0:1] offset:48866; GFX11-NEXT: global_load_b128 v[18:21], v30, s[0:1] glc dlc867; GFX11-NEXT: s_waitcnt vmcnt(0)868; GFX11-NEXT: global_load_b128 v[22:25], v30, s[0:1] offset:16 glc dlc869; GFX11-NEXT: s_waitcnt vmcnt(0)870; GFX11-NEXT: global_load_b128 v[26:29], v30, s[0:1] offset:32 glc dlc871; GFX11-NEXT: s_waitcnt vmcnt(0)872; GFX11-NEXT: global_load_b128 v[30:33], v30, s[0:1] offset:48 glc dlc873; GFX11-NEXT: s_waitcnt vmcnt(0)874; GFX11-NEXT: v_readfirstlane_b32 s3, v5875; GFX11-NEXT: v_readfirstlane_b32 s0, v2876; GFX11-NEXT: v_readfirstlane_b32 s1, v3877; GFX11-NEXT: v_readfirstlane_b32 s2, v4878; GFX11-NEXT: v_readfirstlane_b32 s19, v21879; GFX11-NEXT: v_readfirstlane_b32 s7, v9880; GFX11-NEXT: v_readfirstlane_b32 s16, v18881; GFX11-NEXT: v_readfirstlane_b32 s17, v19882; GFX11-NEXT: v_readfirstlane_b32 s18, v20883; GFX11-NEXT: v_readfirstlane_b32 s23, v25884; GFX11-NEXT: v_readfirstlane_b32 s4, v6885; GFX11-NEXT: v_readfirstlane_b32 s5, v7886; GFX11-NEXT: v_readfirstlane_b32 s6, v8887; GFX11-NEXT: v_readfirstlane_b32 s11, v13888; GFX11-NEXT: v_readfirstlane_b32 s20, v22889; GFX11-NEXT: v_readfirstlane_b32 s21, v23890; GFX11-NEXT: v_readfirstlane_b32 s22, v24891; GFX11-NEXT: v_readfirstlane_b32 s27, v29892; GFX11-NEXT: v_readfirstlane_b32 s8, v10893; GFX11-NEXT: v_readfirstlane_b32 s9, v11894; GFX11-NEXT: v_readfirstlane_b32 s10, v12895; GFX11-NEXT: v_readfirstlane_b32 s15, v17896; GFX11-NEXT: v_readfirstlane_b32 s24, v26897; GFX11-NEXT: v_readfirstlane_b32 s25, v27898; GFX11-NEXT: v_readfirstlane_b32 s26, v28899; GFX11-NEXT: v_readfirstlane_b32 s31, v33900; GFX11-NEXT: v_readfirstlane_b32 s12, v14901; GFX11-NEXT: v_readfirstlane_b32 s13, v15902; GFX11-NEXT: v_readfirstlane_b32 s14, v16903; GFX11-NEXT: v_readfirstlane_b32 s28, v30904; GFX11-NEXT: v_readfirstlane_b32 s29, v31905; GFX11-NEXT: v_readfirstlane_b32 s30, v32906; GFX11-NEXT: s_add_i32 s3, s3, s19907; GFX11-NEXT: s_add_i32 s0, s0, s16908; GFX11-NEXT: s_add_i32 s1, s1, s17909; GFX11-NEXT: s_add_i32 s2, s2, s18910; GFX11-NEXT: s_add_i32 s7, s7, s23911; GFX11-NEXT: s_add_i32 s4, s4, s20912; GFX11-NEXT: s_add_i32 s5, s5, s21913; GFX11-NEXT: s_add_i32 s6, s6, s22914; GFX11-NEXT: s_add_i32 s11, s11, s27915; GFX11-NEXT: v_mov_b32_e32 v5, s3916; GFX11-NEXT: s_add_i32 s8, s8, s24917; GFX11-NEXT: s_add_i32 s9, s9, s25918; GFX11-NEXT: s_add_i32 s10, s10, s26919; GFX11-NEXT: s_add_i32 s15, s15, s31920; GFX11-NEXT: v_dual_mov_b32 v4, s2 :: v_dual_mov_b32 v3, s1921; GFX11-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v9, s7922; GFX11-NEXT: s_add_i32 s12, s12, s28923; GFX11-NEXT: s_add_i32 s13, s13, s29924; GFX11-NEXT: s_add_i32 s14, s14, s30925; GFX11-NEXT: v_dual_mov_b32 v8, s6 :: v_dual_mov_b32 v7, s5926; GFX11-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v13, s11927; GFX11-NEXT: v_dual_mov_b32 v12, s10 :: v_dual_mov_b32 v11, s9928; GFX11-NEXT: v_dual_mov_b32 v10, s8 :: v_dual_mov_b32 v17, s15929; GFX11-NEXT: v_dual_mov_b32 v16, s14 :: v_dual_mov_b32 v15, s13930; GFX11-NEXT: v_mov_b32_e32 v14, s12931; GFX11-NEXT: s_clause 0x3932; GFX11-NEXT: global_store_b128 v[0:1], v[2:5], off933; GFX11-NEXT: global_store_b128 v[0:1], v[6:9], off offset:16934; GFX11-NEXT: global_store_b128 v[0:1], v[10:13], off offset:32935; GFX11-NEXT: global_store_b128 v[0:1], v[14:17], off offset:48936; GFX11-NEXT: s_endpgm937;938; GFX12-LABEL: load_uniform_P1_v16i32:939; GFX12: ; %bb.0:940; GFX12-NEXT: v_mov_b32_e32 v30, 0941; GFX12-NEXT: s_clause 0x4942; GFX12-NEXT: global_load_b128 v[2:5], v30, s[0:1]943; GFX12-NEXT: global_load_b128 v[6:9], v30, s[0:1] offset:16944; GFX12-NEXT: global_load_b128 v[10:13], v30, s[0:1] offset:32945; GFX12-NEXT: global_load_b128 v[14:17], v30, s[0:1] offset:48946; GFX12-NEXT: global_load_b128 v[18:21], v30, s[0:1] scope:SCOPE_SYS947; GFX12-NEXT: s_wait_loadcnt 0x0948; GFX12-NEXT: global_load_b128 v[22:25], v30, s[0:1] offset:16 scope:SCOPE_SYS949; GFX12-NEXT: s_wait_loadcnt 0x0950; GFX12-NEXT: global_load_b128 v[26:29], v30, s[0:1] offset:32 scope:SCOPE_SYS951; GFX12-NEXT: s_wait_loadcnt 0x0952; GFX12-NEXT: global_load_b128 v[30:33], v30, s[0:1] offset:48 scope:SCOPE_SYS953; GFX12-NEXT: s_wait_loadcnt 0x0954; GFX12-NEXT: v_readfirstlane_b32 s3, v5955; GFX12-NEXT: v_readfirstlane_b32 s0, v2956; GFX12-NEXT: v_readfirstlane_b32 s1, v3957; GFX12-NEXT: v_readfirstlane_b32 s2, v4958; GFX12-NEXT: v_readfirstlane_b32 s19, v21959; GFX12-NEXT: v_readfirstlane_b32 s7, v9960; GFX12-NEXT: v_readfirstlane_b32 s16, v18961; GFX12-NEXT: v_readfirstlane_b32 s17, v19962; GFX12-NEXT: v_readfirstlane_b32 s18, v20963; GFX12-NEXT: v_readfirstlane_b32 s23, v25964; GFX12-NEXT: v_readfirstlane_b32 s4, v6965; GFX12-NEXT: v_readfirstlane_b32 s5, v7966; GFX12-NEXT: v_readfirstlane_b32 s6, v8967; GFX12-NEXT: v_readfirstlane_b32 s11, v13968; GFX12-NEXT: v_readfirstlane_b32 s20, v22969; GFX12-NEXT: v_readfirstlane_b32 s21, v23970; GFX12-NEXT: v_readfirstlane_b32 s22, v24971; GFX12-NEXT: v_readfirstlane_b32 s27, v29972; GFX12-NEXT: v_readfirstlane_b32 s8, v10973; GFX12-NEXT: v_readfirstlane_b32 s9, v11974; GFX12-NEXT: v_readfirstlane_b32 s10, v12975; GFX12-NEXT: v_readfirstlane_b32 s15, v17976; GFX12-NEXT: v_readfirstlane_b32 s24, v26977; GFX12-NEXT: v_readfirstlane_b32 s25, v27978; GFX12-NEXT: v_readfirstlane_b32 s26, v28979; GFX12-NEXT: v_readfirstlane_b32 s31, v33980; GFX12-NEXT: v_readfirstlane_b32 s12, v14981; GFX12-NEXT: v_readfirstlane_b32 s13, v15982; GFX12-NEXT: v_readfirstlane_b32 s14, v16983; GFX12-NEXT: v_readfirstlane_b32 s28, v30984; GFX12-NEXT: v_readfirstlane_b32 s29, v31985; GFX12-NEXT: v_readfirstlane_b32 s30, v32986; GFX12-NEXT: s_add_co_i32 s3, s3, s19987; GFX12-NEXT: s_add_co_i32 s0, s0, s16988; GFX12-NEXT: s_add_co_i32 s1, s1, s17989; GFX12-NEXT: s_add_co_i32 s2, s2, s18990; GFX12-NEXT: s_add_co_i32 s7, s7, s23991; GFX12-NEXT: s_add_co_i32 s4, s4, s20992; GFX12-NEXT: s_add_co_i32 s5, s5, s21993; GFX12-NEXT: s_add_co_i32 s6, s6, s22994; GFX12-NEXT: s_add_co_i32 s11, s11, s27995; GFX12-NEXT: v_mov_b32_e32 v5, s3996; GFX12-NEXT: s_add_co_i32 s8, s8, s24997; GFX12-NEXT: s_add_co_i32 s9, s9, s25998; GFX12-NEXT: s_add_co_i32 s10, s10, s26999; GFX12-NEXT: s_add_co_i32 s15, s15, s311000; GFX12-NEXT: v_dual_mov_b32 v4, s2 :: v_dual_mov_b32 v3, s11001; GFX12-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v9, s71002; GFX12-NEXT: s_add_co_i32 s12, s12, s281003; GFX12-NEXT: s_add_co_i32 s13, s13, s291004; GFX12-NEXT: s_add_co_i32 s14, s14, s301005; GFX12-NEXT: v_dual_mov_b32 v8, s6 :: v_dual_mov_b32 v7, s51006; GFX12-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v13, s111007; GFX12-NEXT: v_dual_mov_b32 v12, s10 :: v_dual_mov_b32 v11, s91008; GFX12-NEXT: v_dual_mov_b32 v10, s8 :: v_dual_mov_b32 v17, s151009; GFX12-NEXT: v_dual_mov_b32 v16, s14 :: v_dual_mov_b32 v15, s131010; GFX12-NEXT: v_mov_b32_e32 v14, s121011; GFX12-NEXT: s_clause 0x31012; GFX12-NEXT: global_store_b128 v[0:1], v[2:5], off1013; GFX12-NEXT: global_store_b128 v[0:1], v[6:9], off offset:161014; GFX12-NEXT: global_store_b128 v[0:1], v[10:13], off offset:321015; GFX12-NEXT: global_store_b128 v[0:1], v[14:17], off offset:481016; GFX12-NEXT: s_endpgm1017 %a = load <16 x i32>, ptr addrspace(1) %ptra, align 21018 %b = load volatile <16 x i32>, ptr addrspace(1) %ptra1019 %sum = add <16 x i32> %a, %b1020 store <16 x i32> %sum, ptr addrspace(1) %out1021 ret void1022}1023 1024 1025 1026define amdgpu_ps void @load_divergent_P3_i8_any_extending(ptr addrspace(3) inreg %ptra, ptr addrspace(3) %out) {1027; GFX7-LABEL: load_divergent_P3_i8_any_extending:1028; GFX7: ; %bb.0:1029; GFX7-NEXT: v_mov_b32_e32 v1, s01030; GFX7-NEXT: s_mov_b32 m0, -11031; GFX7-NEXT: ds_read_u8 v1, v11032; GFX7-NEXT: s_waitcnt lgkmcnt(0)1033; GFX7-NEXT: ds_write_b8 v0, v11034; GFX7-NEXT: s_endpgm1035;1036; GFX11-LABEL: load_divergent_P3_i8_any_extending:1037; GFX11: ; %bb.0:1038; GFX11-NEXT: v_mov_b32_e32 v1, s01039; GFX11-NEXT: ds_load_u8 v1, v11040; GFX11-NEXT: s_waitcnt lgkmcnt(0)1041; GFX11-NEXT: ds_store_b8 v0, v11042; GFX11-NEXT: s_endpgm1043;1044; GFX12-LABEL: load_divergent_P3_i8_any_extending:1045; GFX12: ; %bb.0:1046; GFX12-NEXT: v_mov_b32_e32 v1, s01047; GFX12-NEXT: ds_load_u8 v1, v11048; GFX12-NEXT: s_wait_dscnt 0x01049; GFX12-NEXT: ds_store_b8 v0, v11050; GFX12-NEXT: s_endpgm1051 %a = load i8, ptr addrspace(3) %ptra1052 store i8 %a, ptr addrspace(3) %out1053 ret void1054}1055 1056; with true16, S16 16-bit load1057; without true16, S32 16-bit any-extending load1058define amdgpu_ps void @load_divergent_P3_i16(ptr addrspace(3) inreg %ptra, ptr addrspace(3) %out) {1059; GFX7-LABEL: load_divergent_P3_i16:1060; GFX7: ; %bb.0:1061; GFX7-NEXT: v_mov_b32_e32 v1, s01062; GFX7-NEXT: s_mov_b32 m0, -11063; GFX7-NEXT: ds_read_u16 v1, v11064; GFX7-NEXT: s_waitcnt lgkmcnt(0)1065; GFX7-NEXT: ds_write_b16 v0, v11066; GFX7-NEXT: s_endpgm1067;1068; GFX11-True16-LABEL: load_divergent_P3_i16:1069; GFX11-True16: ; %bb.0:1070; GFX11-True16-NEXT: v_mov_b32_e32 v1, s01071; GFX11-True16-NEXT: ds_load_u16_d16 v1, v11072; GFX11-True16-NEXT: s_waitcnt lgkmcnt(0)1073; GFX11-True16-NEXT: ds_store_b16 v0, v11074; GFX11-True16-NEXT: s_endpgm1075;1076; GFX11-NoTrue16-LABEL: load_divergent_P3_i16:1077; GFX11-NoTrue16: ; %bb.0:1078; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v1, s01079; GFX11-NoTrue16-NEXT: ds_load_u16 v1, v11080; GFX11-NoTrue16-NEXT: s_waitcnt lgkmcnt(0)1081; GFX11-NoTrue16-NEXT: ds_store_b16 v0, v11082; GFX11-NoTrue16-NEXT: s_endpgm1083;1084; GFX12-True16-LABEL: load_divergent_P3_i16:1085; GFX12-True16: ; %bb.0:1086; GFX12-True16-NEXT: v_mov_b32_e32 v1, s01087; GFX12-True16-NEXT: ds_load_u16_d16 v1, v11088; GFX12-True16-NEXT: s_wait_dscnt 0x01089; GFX12-True16-NEXT: ds_store_b16 v0, v11090; GFX12-True16-NEXT: s_endpgm1091;1092; GFX12-NoTrue16-LABEL: load_divergent_P3_i16:1093; GFX12-NoTrue16: ; %bb.0:1094; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v1, s01095; GFX12-NoTrue16-NEXT: ds_load_u16 v1, v11096; GFX12-NoTrue16-NEXT: s_wait_dscnt 0x01097; GFX12-NoTrue16-NEXT: ds_store_b16 v0, v11098; GFX12-NoTrue16-NEXT: s_endpgm1099 %a = load i16, ptr addrspace(3) %ptra1100 store i16 %a, ptr addrspace(3) %out1101 ret void1102}1103 1104define amdgpu_ps void @load_divergent_P3_i32(ptr addrspace(3) inreg %ptra, ptr addrspace(3) %out) {1105; GFX7-LABEL: load_divergent_P3_i32:1106; GFX7: ; %bb.0:1107; GFX7-NEXT: v_mov_b32_e32 v1, s01108; GFX7-NEXT: s_mov_b32 m0, -11109; GFX7-NEXT: ds_read_b32 v1, v11110; GFX7-NEXT: s_waitcnt lgkmcnt(0)1111; GFX7-NEXT: ds_write_b32 v0, v11112; GFX7-NEXT: s_endpgm1113;1114; GFX11-LABEL: load_divergent_P3_i32:1115; GFX11: ; %bb.0:1116; GFX11-NEXT: v_mov_b32_e32 v1, s01117; GFX11-NEXT: ds_load_b32 v1, v11118; GFX11-NEXT: s_waitcnt lgkmcnt(0)1119; GFX11-NEXT: ds_store_b32 v0, v11120; GFX11-NEXT: s_endpgm1121;1122; GFX12-LABEL: load_divergent_P3_i32:1123; GFX12: ; %bb.0:1124; GFX12-NEXT: v_mov_b32_e32 v1, s01125; GFX12-NEXT: ds_load_b32 v1, v11126; GFX12-NEXT: s_wait_dscnt 0x01127; GFX12-NEXT: ds_store_b32 v0, v11128; GFX12-NEXT: s_endpgm1129 %a = load i32, ptr addrspace(3) %ptra1130 store i32 %a, ptr addrspace(3) %out1131 ret void1132}1133 1134define amdgpu_ps void @load_divergent_P3_v2i32(ptr addrspace(3) inreg %ptra, ptr addrspace(3) %out) {1135; GFX7-LABEL: load_divergent_P3_v2i32:1136; GFX7: ; %bb.0:1137; GFX7-NEXT: v_mov_b32_e32 v1, s01138; GFX7-NEXT: s_mov_b32 m0, -11139; GFX7-NEXT: ds_read_b64 v[1:2], v11140; GFX7-NEXT: s_waitcnt lgkmcnt(0)1141; GFX7-NEXT: ds_write_b64 v0, v[1:2]1142; GFX7-NEXT: s_endpgm1143;1144; GFX11-LABEL: load_divergent_P3_v2i32:1145; GFX11: ; %bb.0:1146; GFX11-NEXT: v_mov_b32_e32 v1, s01147; GFX11-NEXT: ds_load_b64 v[1:2], v11148; GFX11-NEXT: s_waitcnt lgkmcnt(0)1149; GFX11-NEXT: ds_store_b64 v0, v[1:2]1150; GFX11-NEXT: s_endpgm1151;1152; GFX12-LABEL: load_divergent_P3_v2i32:1153; GFX12: ; %bb.0:1154; GFX12-NEXT: v_mov_b32_e32 v1, s01155; GFX12-NEXT: ds_load_b64 v[1:2], v11156; GFX12-NEXT: s_wait_dscnt 0x01157; GFX12-NEXT: ds_store_b64 v0, v[1:2]1158; GFX12-NEXT: s_endpgm1159 %a = load <2 x i32>, ptr addrspace(3) %ptra1160 store <2 x i32> %a, ptr addrspace(3) %out1161 ret void1162}1163 1164define amdgpu_ps void @load_divergent_P3_v3i32(ptr addrspace(3) inreg %ptra, ptr addrspace(3) %out) {1165; GFX7-LABEL: load_divergent_P3_v3i32:1166; GFX7: ; %bb.0:1167; GFX7-NEXT: v_mov_b32_e32 v1, s01168; GFX7-NEXT: s_mov_b32 m0, -11169; GFX7-NEXT: ds_read_b96 v[1:3], v11170; GFX7-NEXT: s_waitcnt lgkmcnt(0)1171; GFX7-NEXT: ds_write_b96 v0, v[1:3]1172; GFX7-NEXT: s_endpgm1173;1174; GFX11-LABEL: load_divergent_P3_v3i32:1175; GFX11: ; %bb.0:1176; GFX11-NEXT: v_mov_b32_e32 v1, s01177; GFX11-NEXT: ds_load_b96 v[1:3], v11178; GFX11-NEXT: s_waitcnt lgkmcnt(0)1179; GFX11-NEXT: ds_store_b96 v0, v[1:3]1180; GFX11-NEXT: s_endpgm1181;1182; GFX12-LABEL: load_divergent_P3_v3i32:1183; GFX12: ; %bb.0:1184; GFX12-NEXT: v_mov_b32_e32 v1, s01185; GFX12-NEXT: ds_load_b96 v[1:3], v11186; GFX12-NEXT: s_wait_dscnt 0x01187; GFX12-NEXT: ds_store_b96 v0, v[1:3]1188; GFX12-NEXT: s_endpgm1189 %a = load <3 x i32>, ptr addrspace(3) %ptra1190 store <3 x i32> %a, ptr addrspace(3) %out1191 ret void1192}1193 1194define amdgpu_ps void @load_divergent_P3_v4i32(ptr addrspace(3) inreg %ptra, ptr addrspace(3) %out) {1195; GFX7-LABEL: load_divergent_P3_v4i32:1196; GFX7: ; %bb.0:1197; GFX7-NEXT: v_mov_b32_e32 v1, s01198; GFX7-NEXT: s_mov_b32 m0, -11199; GFX7-NEXT: ds_read_b128 v[1:4], v11200; GFX7-NEXT: s_waitcnt lgkmcnt(0)1201; GFX7-NEXT: ds_write_b128 v0, v[1:4]1202; GFX7-NEXT: s_endpgm1203;1204; GFX11-LABEL: load_divergent_P3_v4i32:1205; GFX11: ; %bb.0:1206; GFX11-NEXT: v_mov_b32_e32 v1, s01207; GFX11-NEXT: ds_load_b128 v[1:4], v11208; GFX11-NEXT: s_waitcnt lgkmcnt(0)1209; GFX11-NEXT: ds_store_b128 v0, v[1:4]1210; GFX11-NEXT: s_endpgm1211;1212; GFX12-LABEL: load_divergent_P3_v4i32:1213; GFX12: ; %bb.0:1214; GFX12-NEXT: v_mov_b32_e32 v1, s01215; GFX12-NEXT: ds_load_b128 v[1:4], v11216; GFX12-NEXT: s_wait_dscnt 0x01217; GFX12-NEXT: ds_store_b128 v0, v[1:4]1218; GFX12-NEXT: s_endpgm1219 %a = load <4 x i32>, ptr addrspace(3) %ptra1220 store <4 x i32> %a, ptr addrspace(3) %out1221 ret void1222}1223 1224 1225 1226; constant address space, addrspace(4)1227; not uniform load mmo check for G_LOAD is for the case where MMO somehow ends1228; up with different addresspace then 4, Don't have tests for it in LLVM-IR.1229; %b in tests will end up as uniform load in sgpr1230 1231; gfx12 true 16, not natural alignment1232define amdgpu_ps void @load_uniform_P4_i16_b16_gfx12(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1233; GFX7-LABEL: load_uniform_P4_i16_b16_gfx12:1234; GFX7: ; %bb.0:1235; GFX7-NEXT: s_mov_b32 s4, s21236; GFX7-NEXT: s_mov_b32 s5, s31237; GFX7-NEXT: s_mov_b32 s2, -11238; GFX7-NEXT: s_mov_b32 s3, 0xf0001239; GFX7-NEXT: s_mov_b64 s[6:7], s[2:3]1240; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 01241; GFX7-NEXT: buffer_load_ushort v3, off, s[4:7], 0 glc1242; GFX7-NEXT: s_mov_b32 s2, 01243; GFX7-NEXT: s_waitcnt vmcnt(1)1244; GFX7-NEXT: v_readfirstlane_b32 s0, v21245; GFX7-NEXT: s_waitcnt vmcnt(0)1246; GFX7-NEXT: v_readfirstlane_b32 s1, v31247; GFX7-NEXT: s_add_i32 s0, s0, s11248; GFX7-NEXT: v_mov_b32_e32 v2, s01249; GFX7-NEXT: s_mov_b64 s[0:1], 01250; GFX7-NEXT: buffer_store_short v2, v[0:1], s[0:3], 0 addr641251; GFX7-NEXT: s_endpgm1252;1253; GFX11-True16-LABEL: load_uniform_P4_i16_b16_gfx12:1254; GFX11-True16: ; %bb.0:1255; GFX11-True16-NEXT: v_mov_b32_e32 v2, 01256; GFX11-True16-NEXT: s_clause 0x11257; GFX11-True16-NEXT: global_load_d16_b16 v3, v2, s[0:1]1258; GFX11-True16-NEXT: global_load_d16_b16 v2, v2, s[2:3] glc dlc1259; GFX11-True16-NEXT: s_waitcnt vmcnt(1)1260; GFX11-True16-NEXT: v_readfirstlane_b32 s0, v31261; GFX11-True16-NEXT: s_waitcnt vmcnt(0)1262; GFX11-True16-NEXT: v_readfirstlane_b32 s1, v21263; GFX11-True16-NEXT: s_add_i32 s0, s0, s11264; GFX11-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1265; GFX11-True16-NEXT: v_mov_b16_e32 v2.l, s01266; GFX11-True16-NEXT: global_store_b16 v[0:1], v2, off1267; GFX11-True16-NEXT: s_endpgm1268;1269; GFX11-NoTrue16-LABEL: load_uniform_P4_i16_b16_gfx12:1270; GFX11-NoTrue16: ; %bb.0:1271; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, 01272; GFX11-NoTrue16-NEXT: s_clause 0x11273; GFX11-NoTrue16-NEXT: global_load_u16 v3, v2, s[0:1]1274; GFX11-NoTrue16-NEXT: global_load_u16 v2, v2, s[2:3] glc dlc1275; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(1)1276; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s0, v31277; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(0)1278; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s1, v21279; GFX11-NoTrue16-NEXT: s_add_i32 s0, s0, s11280; GFX11-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1281; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, s01282; GFX11-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off1283; GFX11-NoTrue16-NEXT: s_endpgm1284;1285; GFX12-True16-LABEL: load_uniform_P4_i16_b16_gfx12:1286; GFX12-True16: ; %bb.0:1287; GFX12-True16-NEXT: v_mov_b32_e32 v2, 01288; GFX12-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1]1289; GFX12-True16-NEXT: s_load_u16 s0, s[2:3], 0x01290; GFX12-True16-NEXT: s_wait_loadcnt 0x01291; GFX12-True16-NEXT: v_readfirstlane_b32 s1, v21292; GFX12-True16-NEXT: s_wait_kmcnt 0x01293; GFX12-True16-NEXT: s_add_co_i32 s0, s1, s01294; GFX12-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1295; GFX12-True16-NEXT: v_mov_b16_e32 v2.l, s01296; GFX12-True16-NEXT: global_store_b16 v[0:1], v2, off1297; GFX12-True16-NEXT: s_endpgm1298;1299; GFX12-NoTrue16-LABEL: load_uniform_P4_i16_b16_gfx12:1300; GFX12-NoTrue16: ; %bb.0:1301; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, 01302; GFX12-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1]1303; GFX12-NoTrue16-NEXT: s_load_u16 s0, s[2:3], 0x01304; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x01305; GFX12-NoTrue16-NEXT: v_readfirstlane_b32 s1, v21306; GFX12-NoTrue16-NEXT: s_wait_kmcnt 0x01307; GFX12-NoTrue16-NEXT: s_add_co_i32 s0, s1, s01308; GFX12-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1309; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, s01310; GFX12-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off1311; GFX12-NoTrue16-NEXT: s_endpgm1312 %a = load i16, ptr addrspace(4) %ptra, align 11313 %b = load volatile i16, ptr addrspace(4) %ptrb1314 %sum = add i16 %a, %b1315 store i16 %sum, ptr addrspace(1) %out1316 ret void1317}1318 1319; gfx11 true16, 16-bit load, not align 41320define amdgpu_ps void @load_uniform_P4_i16_b16_gfx11(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1321; GFX7-LABEL: load_uniform_P4_i16_b16_gfx11:1322; GFX7: ; %bb.0:1323; GFX7-NEXT: s_mov_b32 s2, -11324; GFX7-NEXT: s_mov_b32 s3, 0xf0001325; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 01326; GFX7-NEXT: s_load_dword s0, s[0:1], 0x01327; GFX7-NEXT: s_mov_b32 s2, 01328; GFX7-NEXT: s_waitcnt vmcnt(0)1329; GFX7-NEXT: v_readfirstlane_b32 s1, v21330; GFX7-NEXT: s_waitcnt lgkmcnt(0)1331; GFX7-NEXT: s_add_i32 s0, s1, s01332; GFX7-NEXT: v_mov_b32_e32 v2, s01333; GFX7-NEXT: s_mov_b64 s[0:1], 01334; GFX7-NEXT: buffer_store_short v2, v[0:1], s[0:3], 0 addr641335; GFX7-NEXT: s_endpgm1336;1337; GFX11-True16-LABEL: load_uniform_P4_i16_b16_gfx11:1338; GFX11-True16: ; %bb.0:1339; GFX11-True16-NEXT: v_mov_b32_e32 v2, 01340; GFX11-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1]1341; GFX11-True16-NEXT: s_load_b32 s0, s[0:1], 0x01342; GFX11-True16-NEXT: s_waitcnt vmcnt(0)1343; GFX11-True16-NEXT: v_readfirstlane_b32 s1, v21344; GFX11-True16-NEXT: s_waitcnt lgkmcnt(0)1345; GFX11-True16-NEXT: s_add_i32 s0, s1, s01346; GFX11-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1347; GFX11-True16-NEXT: v_mov_b16_e32 v2.l, s01348; GFX11-True16-NEXT: global_store_b16 v[0:1], v2, off1349; GFX11-True16-NEXT: s_endpgm1350;1351; GFX11-NoTrue16-LABEL: load_uniform_P4_i16_b16_gfx11:1352; GFX11-NoTrue16: ; %bb.0:1353; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, 01354; GFX11-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1]1355; GFX11-NoTrue16-NEXT: s_load_b32 s0, s[0:1], 0x01356; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(0)1357; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s1, v21358; GFX11-NoTrue16-NEXT: s_waitcnt lgkmcnt(0)1359; GFX11-NoTrue16-NEXT: s_add_i32 s0, s1, s01360; GFX11-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1361; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, s01362; GFX11-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off1363; GFX11-NoTrue16-NEXT: s_endpgm1364;1365; GFX12-True16-LABEL: load_uniform_P4_i16_b16_gfx11:1366; GFX12-True16: ; %bb.0:1367; GFX12-True16-NEXT: s_clause 0x11368; GFX12-True16-NEXT: s_load_u16 s2, s[0:1], 0x01369; GFX12-True16-NEXT: s_load_u16 s0, s[0:1], 0x01370; GFX12-True16-NEXT: s_wait_kmcnt 0x01371; GFX12-True16-NEXT: s_add_co_i32 s0, s2, s01372; GFX12-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1373; GFX12-True16-NEXT: v_mov_b16_e32 v2.l, s01374; GFX12-True16-NEXT: global_store_b16 v[0:1], v2, off1375; GFX12-True16-NEXT: s_endpgm1376;1377; GFX12-NoTrue16-LABEL: load_uniform_P4_i16_b16_gfx11:1378; GFX12-NoTrue16: ; %bb.0:1379; GFX12-NoTrue16-NEXT: s_clause 0x11380; GFX12-NoTrue16-NEXT: s_load_u16 s2, s[0:1], 0x01381; GFX12-NoTrue16-NEXT: s_load_u16 s0, s[0:1], 0x01382; GFX12-NoTrue16-NEXT: s_wait_kmcnt 0x01383; GFX12-NoTrue16-NEXT: s_add_co_i32 s0, s2, s01384; GFX12-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1385; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, s01386; GFX12-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off1387; GFX12-NoTrue16-NEXT: s_endpgm1388 %a = load i16, ptr addrspace(4) %ptra1389 %b = load volatile i16, ptr addrspace(4) %ptra, align 41390 %sum = add i16 %a, %b1391 store i16 %sum, ptr addrspace(1) %out1392 ret void1393}1394 1395; gfx12 without true16, 16-bit any-extending load, not natural alignment1396define amdgpu_ps void @load_uniform_P4_i16_anyextending_gfx12(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1397; GFX7-LABEL: load_uniform_P4_i16_anyextending_gfx12:1398; GFX7: ; %bb.0:1399; GFX7-NEXT: s_mov_b32 s2, -11400; GFX7-NEXT: s_mov_b32 s3, 0xf0001401; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 01402; GFX7-NEXT: buffer_load_ushort v3, off, s[0:3], 0 glc1403; GFX7-NEXT: s_mov_b32 s2, 01404; GFX7-NEXT: s_waitcnt vmcnt(1)1405; GFX7-NEXT: v_readfirstlane_b32 s0, v21406; GFX7-NEXT: s_waitcnt vmcnt(0)1407; GFX7-NEXT: v_readfirstlane_b32 s1, v31408; GFX7-NEXT: s_add_i32 s0, s0, s11409; GFX7-NEXT: v_mov_b32_e32 v2, s01410; GFX7-NEXT: s_mov_b64 s[0:1], 01411; GFX7-NEXT: buffer_store_short v2, v[0:1], s[0:3], 0 addr641412; GFX7-NEXT: s_endpgm1413;1414; GFX11-True16-LABEL: load_uniform_P4_i16_anyextending_gfx12:1415; GFX11-True16: ; %bb.0:1416; GFX11-True16-NEXT: v_mov_b32_e32 v2, 01417; GFX11-True16-NEXT: s_clause 0x11418; GFX11-True16-NEXT: global_load_d16_b16 v3, v2, s[0:1]1419; GFX11-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1] glc dlc1420; GFX11-True16-NEXT: s_waitcnt vmcnt(1)1421; GFX11-True16-NEXT: v_readfirstlane_b32 s0, v31422; GFX11-True16-NEXT: s_waitcnt vmcnt(0)1423; GFX11-True16-NEXT: v_readfirstlane_b32 s1, v21424; GFX11-True16-NEXT: s_add_i32 s0, s0, s11425; GFX11-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1426; GFX11-True16-NEXT: v_mov_b16_e32 v2.l, s01427; GFX11-True16-NEXT: global_store_b16 v[0:1], v2, off1428; GFX11-True16-NEXT: s_endpgm1429;1430; GFX11-NoTrue16-LABEL: load_uniform_P4_i16_anyextending_gfx12:1431; GFX11-NoTrue16: ; %bb.0:1432; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, 01433; GFX11-NoTrue16-NEXT: s_clause 0x11434; GFX11-NoTrue16-NEXT: global_load_u16 v3, v2, s[0:1]1435; GFX11-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1] glc dlc1436; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(1)1437; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s0, v31438; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(0)1439; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s1, v21440; GFX11-NoTrue16-NEXT: s_add_i32 s0, s0, s11441; GFX11-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1442; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, s01443; GFX11-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off1444; GFX11-NoTrue16-NEXT: s_endpgm1445;1446; GFX12-True16-LABEL: load_uniform_P4_i16_anyextending_gfx12:1447; GFX12-True16: ; %bb.0:1448; GFX12-True16-NEXT: v_mov_b32_e32 v2, 01449; GFX12-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1]1450; GFX12-True16-NEXT: s_load_u16 s0, s[0:1], 0x01451; GFX12-True16-NEXT: s_wait_loadcnt 0x01452; GFX12-True16-NEXT: v_readfirstlane_b32 s1, v21453; GFX12-True16-NEXT: s_wait_kmcnt 0x01454; GFX12-True16-NEXT: s_add_co_i32 s0, s1, s01455; GFX12-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1456; GFX12-True16-NEXT: v_mov_b16_e32 v2.l, s01457; GFX12-True16-NEXT: global_store_b16 v[0:1], v2, off1458; GFX12-True16-NEXT: s_endpgm1459;1460; GFX12-NoTrue16-LABEL: load_uniform_P4_i16_anyextending_gfx12:1461; GFX12-NoTrue16: ; %bb.0:1462; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, 01463; GFX12-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1]1464; GFX12-NoTrue16-NEXT: s_load_u16 s0, s[0:1], 0x01465; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x01466; GFX12-NoTrue16-NEXT: v_readfirstlane_b32 s1, v21467; GFX12-NoTrue16-NEXT: s_wait_kmcnt 0x01468; GFX12-NoTrue16-NEXT: s_add_co_i32 s0, s1, s01469; GFX12-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1470; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, s01471; GFX12-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off1472; GFX12-NoTrue16-NEXT: s_endpgm1473 %a = load i16, ptr addrspace(4) %ptra, align 11474 %b = load volatile i16, ptr addrspace(4) %ptra1475 %sum = add i16 %a, %b1476 store i16 %sum, ptr addrspace(1) %out1477 ret void1478}1479 1480; gfx11(or older) without true 16, s16 any-extending load, not align 41481define amdgpu_ps void @load_uniform_P4_i16_anyextending_gfx11(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1482; GFX7-LABEL: load_uniform_P4_i16_anyextending_gfx11:1483; GFX7: ; %bb.0:1484; GFX7-NEXT: s_mov_b32 s2, -11485; GFX7-NEXT: s_mov_b32 s3, 0xf0001486; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 01487; GFX7-NEXT: s_load_dword s0, s[0:1], 0x01488; GFX7-NEXT: s_mov_b32 s2, 01489; GFX7-NEXT: s_waitcnt vmcnt(0)1490; GFX7-NEXT: v_readfirstlane_b32 s1, v21491; GFX7-NEXT: s_waitcnt lgkmcnt(0)1492; GFX7-NEXT: s_add_i32 s0, s1, s01493; GFX7-NEXT: v_mov_b32_e32 v2, s01494; GFX7-NEXT: s_mov_b64 s[0:1], 01495; GFX7-NEXT: buffer_store_short v2, v[0:1], s[0:3], 0 addr641496; GFX7-NEXT: s_endpgm1497;1498; GFX11-True16-LABEL: load_uniform_P4_i16_anyextending_gfx11:1499; GFX11-True16: ; %bb.0:1500; GFX11-True16-NEXT: v_mov_b32_e32 v2, 01501; GFX11-True16-NEXT: global_load_d16_b16 v2, v2, s[0:1]1502; GFX11-True16-NEXT: s_load_b32 s0, s[0:1], 0x01503; GFX11-True16-NEXT: s_waitcnt vmcnt(0)1504; GFX11-True16-NEXT: v_readfirstlane_b32 s1, v21505; GFX11-True16-NEXT: s_waitcnt lgkmcnt(0)1506; GFX11-True16-NEXT: s_add_i32 s0, s1, s01507; GFX11-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1508; GFX11-True16-NEXT: v_mov_b16_e32 v2.l, s01509; GFX11-True16-NEXT: global_store_b16 v[0:1], v2, off1510; GFX11-True16-NEXT: s_endpgm1511;1512; GFX11-NoTrue16-LABEL: load_uniform_P4_i16_anyextending_gfx11:1513; GFX11-NoTrue16: ; %bb.0:1514; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, 01515; GFX11-NoTrue16-NEXT: global_load_u16 v2, v2, s[0:1]1516; GFX11-NoTrue16-NEXT: s_load_b32 s0, s[0:1], 0x01517; GFX11-NoTrue16-NEXT: s_waitcnt vmcnt(0)1518; GFX11-NoTrue16-NEXT: v_readfirstlane_b32 s1, v21519; GFX11-NoTrue16-NEXT: s_waitcnt lgkmcnt(0)1520; GFX11-NoTrue16-NEXT: s_add_i32 s0, s1, s01521; GFX11-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1522; GFX11-NoTrue16-NEXT: v_mov_b32_e32 v2, s01523; GFX11-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off1524; GFX11-NoTrue16-NEXT: s_endpgm1525;1526; GFX12-True16-LABEL: load_uniform_P4_i16_anyextending_gfx11:1527; GFX12-True16: ; %bb.0:1528; GFX12-True16-NEXT: s_clause 0x11529; GFX12-True16-NEXT: s_load_u16 s2, s[0:1], 0x01530; GFX12-True16-NEXT: s_load_u16 s0, s[0:1], 0x01531; GFX12-True16-NEXT: s_wait_kmcnt 0x01532; GFX12-True16-NEXT: s_add_co_i32 s0, s2, s01533; GFX12-True16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1534; GFX12-True16-NEXT: v_mov_b16_e32 v2.l, s01535; GFX12-True16-NEXT: global_store_b16 v[0:1], v2, off1536; GFX12-True16-NEXT: s_endpgm1537;1538; GFX12-NoTrue16-LABEL: load_uniform_P4_i16_anyextending_gfx11:1539; GFX12-NoTrue16: ; %bb.0:1540; GFX12-NoTrue16-NEXT: s_clause 0x11541; GFX12-NoTrue16-NEXT: s_load_u16 s2, s[0:1], 0x01542; GFX12-NoTrue16-NEXT: s_load_u16 s0, s[0:1], 0x01543; GFX12-NoTrue16-NEXT: s_wait_kmcnt 0x01544; GFX12-NoTrue16-NEXT: s_add_co_i32 s0, s2, s01545; GFX12-NoTrue16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1546; GFX12-NoTrue16-NEXT: v_mov_b32_e32 v2, s01547; GFX12-NoTrue16-NEXT: global_store_b16 v[0:1], v2, off1548; GFX12-NoTrue16-NEXT: s_endpgm1549 %a = load i16, ptr addrspace(4) %ptra1550 %b = load volatile i16, ptr addrspace(4) %ptra, align 41551 %sum = add i16 %a, %b1552 store i16 %sum, ptr addrspace(1) %out1553 ret void1554}1555 1556; any target, 32-bit load load, not align 41557define amdgpu_ps void @load_uniform_P4_i32(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1558; GFX7-LABEL: load_uniform_P4_i32:1559; GFX7: ; %bb.0:1560; GFX7-NEXT: s_mov_b32 s2, -11561; GFX7-NEXT: s_mov_b32 s3, 0xf0001562; GFX7-NEXT: buffer_load_dword v2, off, s[0:3], 01563; GFX7-NEXT: s_load_dword s0, s[0:1], 0x01564; GFX7-NEXT: s_mov_b32 s2, 01565; GFX7-NEXT: s_waitcnt vmcnt(0)1566; GFX7-NEXT: v_readfirstlane_b32 s1, v21567; GFX7-NEXT: s_waitcnt lgkmcnt(0)1568; GFX7-NEXT: s_add_i32 s0, s1, s01569; GFX7-NEXT: v_mov_b32_e32 v2, s01570; GFX7-NEXT: s_mov_b64 s[0:1], 01571; GFX7-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr641572; GFX7-NEXT: s_endpgm1573;1574; GFX11-LABEL: load_uniform_P4_i32:1575; GFX11: ; %bb.0:1576; GFX11-NEXT: v_mov_b32_e32 v2, 01577; GFX11-NEXT: global_load_b32 v2, v2, s[0:1]1578; GFX11-NEXT: s_load_b32 s0, s[0:1], 0x01579; GFX11-NEXT: s_waitcnt vmcnt(0)1580; GFX11-NEXT: v_readfirstlane_b32 s1, v21581; GFX11-NEXT: s_waitcnt lgkmcnt(0)1582; GFX11-NEXT: s_add_i32 s0, s1, s01583; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1584; GFX11-NEXT: v_mov_b32_e32 v2, s01585; GFX11-NEXT: global_store_b32 v[0:1], v2, off1586; GFX11-NEXT: s_endpgm1587;1588; GFX12-LABEL: load_uniform_P4_i32:1589; GFX12: ; %bb.0:1590; GFX12-NEXT: v_mov_b32_e32 v2, 01591; GFX12-NEXT: global_load_b32 v2, v2, s[0:1]1592; GFX12-NEXT: s_load_b32 s0, s[0:1], 0x01593; GFX12-NEXT: s_wait_loadcnt 0x01594; GFX12-NEXT: v_readfirstlane_b32 s1, v21595; GFX12-NEXT: s_wait_kmcnt 0x01596; GFX12-NEXT: s_add_co_i32 s0, s1, s01597; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1598; GFX12-NEXT: v_mov_b32_e32 v2, s01599; GFX12-NEXT: global_store_b32 v[0:1], v2, off1600; GFX12-NEXT: s_endpgm1601 %a = load i32, ptr addrspace(4) %ptra, align 21602 %b = load volatile i32, ptr addrspace(4) %ptra1603 %sum = add i32 %a, %b1604 store i32 %sum, ptr addrspace(1) %out1605 ret void1606}1607 1608; any target, 64bit load load, not align 41609define amdgpu_ps void @load_uniform_P4_v2i32(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1610; GFX7-LABEL: load_uniform_P4_v2i32:1611; GFX7: ; %bb.0:1612; GFX7-NEXT: s_mov_b32 s2, -11613; GFX7-NEXT: s_mov_b32 s3, 0xf0001614; GFX7-NEXT: buffer_load_dwordx2 v[2:3], off, s[0:3], 01615; GFX7-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x01616; GFX7-NEXT: s_mov_b32 s2, 01617; GFX7-NEXT: s_waitcnt vmcnt(0)1618; GFX7-NEXT: v_readfirstlane_b32 s5, v31619; GFX7-NEXT: v_readfirstlane_b32 s4, v21620; GFX7-NEXT: s_waitcnt lgkmcnt(0)1621; GFX7-NEXT: s_add_i32 s1, s5, s11622; GFX7-NEXT: s_add_i32 s0, s4, s01623; GFX7-NEXT: v_mov_b32_e32 v3, s11624; GFX7-NEXT: v_mov_b32_e32 v2, s01625; GFX7-NEXT: s_mov_b64 s[0:1], 01626; GFX7-NEXT: buffer_store_dwordx2 v[2:3], v[0:1], s[0:3], 0 addr641627; GFX7-NEXT: s_endpgm1628;1629; GFX11-LABEL: load_uniform_P4_v2i32:1630; GFX11: ; %bb.0:1631; GFX11-NEXT: v_mov_b32_e32 v2, 01632; GFX11-NEXT: global_load_b64 v[2:3], v2, s[0:1]1633; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x01634; GFX11-NEXT: s_waitcnt vmcnt(0)1635; GFX11-NEXT: v_readfirstlane_b32 s2, v21636; GFX11-NEXT: v_readfirstlane_b32 s3, v31637; GFX11-NEXT: s_waitcnt lgkmcnt(0)1638; GFX11-NEXT: s_add_i32 s0, s2, s01639; GFX11-NEXT: s_add_i32 s1, s3, s11640; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1641; GFX11-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01642; GFX11-NEXT: global_store_b64 v[0:1], v[2:3], off1643; GFX11-NEXT: s_endpgm1644;1645; GFX12-LABEL: load_uniform_P4_v2i32:1646; GFX12: ; %bb.0:1647; GFX12-NEXT: v_mov_b32_e32 v2, 01648; GFX12-NEXT: global_load_b64 v[2:3], v2, s[0:1]1649; GFX12-NEXT: s_load_b64 s[0:1], s[0:1], 0x01650; GFX12-NEXT: s_wait_loadcnt 0x01651; GFX12-NEXT: v_readfirstlane_b32 s2, v21652; GFX12-NEXT: v_readfirstlane_b32 s3, v31653; GFX12-NEXT: s_wait_kmcnt 0x01654; GFX12-NEXT: s_add_co_i32 s0, s2, s01655; GFX12-NEXT: s_add_co_i32 s1, s3, s11656; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1657; GFX12-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01658; GFX12-NEXT: global_store_b64 v[0:1], v[2:3], off1659; GFX12-NEXT: s_endpgm1660 %a = load <2 x i32>, ptr addrspace(4) %ptra, align 21661 %b = load volatile <2 x i32>, ptr addrspace(4) %ptra1662 %sum = add <2 x i32> %a, %b1663 store <2 x i32> %sum, ptr addrspace(1) %out1664 ret void1665}1666 1667; any target, 96bit load load, not align 41668define amdgpu_ps void @load_uniform_P4_v3i32_gfx12(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1669; GFX7-LABEL: load_uniform_P4_v3i32_gfx12:1670; GFX7: ; %bb.0:1671; GFX7-NEXT: s_mov_b32 s2, -11672; GFX7-NEXT: s_mov_b32 s3, 0xf0001673; GFX7-NEXT: buffer_load_dwordx3 v[2:4], off, s[0:3], 01674; GFX7-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x01675; GFX7-NEXT: s_mov_b32 s2, 01676; GFX7-NEXT: s_waitcnt vmcnt(0)1677; GFX7-NEXT: v_readfirstlane_b32 s0, v21678; GFX7-NEXT: v_readfirstlane_b32 s1, v31679; GFX7-NEXT: s_waitcnt lgkmcnt(0)1680; GFX7-NEXT: v_readfirstlane_b32 s7, v41681; GFX7-NEXT: s_add_i32 s4, s0, s41682; GFX7-NEXT: s_add_i32 s5, s1, s51683; GFX7-NEXT: s_add_i32 s6, s7, s61684; GFX7-NEXT: v_mov_b32_e32 v2, s41685; GFX7-NEXT: v_mov_b32_e32 v3, s51686; GFX7-NEXT: v_mov_b32_e32 v4, s61687; GFX7-NEXT: s_mov_b64 s[0:1], 01688; GFX7-NEXT: buffer_store_dwordx3 v[2:4], v[0:1], s[0:3], 0 addr641689; GFX7-NEXT: s_endpgm1690;1691; GFX11-LABEL: load_uniform_P4_v3i32_gfx12:1692; GFX11: ; %bb.0:1693; GFX11-NEXT: v_mov_b32_e32 v2, 01694; GFX11-NEXT: global_load_b96 v[2:4], v2, s[0:1]1695; GFX11-NEXT: s_load_b128 s[0:3], s[0:1], 0x01696; GFX11-NEXT: s_waitcnt vmcnt(0)1697; GFX11-NEXT: v_readfirstlane_b32 s5, v41698; GFX11-NEXT: s_waitcnt lgkmcnt(0)1699; GFX11-NEXT: v_readfirstlane_b32 s3, v21700; GFX11-NEXT: v_readfirstlane_b32 s4, v31701; GFX11-NEXT: s_add_i32 s2, s5, s21702; GFX11-NEXT: s_add_i32 s0, s3, s01703; GFX11-NEXT: s_add_i32 s1, s4, s11704; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1705; GFX11-NEXT: v_dual_mov_b32 v4, s2 :: v_dual_mov_b32 v3, s11706; GFX11-NEXT: v_mov_b32_e32 v2, s01707; GFX11-NEXT: global_store_b96 v[0:1], v[2:4], off1708; GFX11-NEXT: s_endpgm1709;1710; GFX12-LABEL: load_uniform_P4_v3i32_gfx12:1711; GFX12: ; %bb.0:1712; GFX12-NEXT: v_mov_b32_e32 v2, 01713; GFX12-NEXT: global_load_b96 v[2:4], v2, s[0:1]1714; GFX12-NEXT: s_load_b96 s[0:2], s[0:1], 0x01715; GFX12-NEXT: s_wait_loadcnt 0x01716; GFX12-NEXT: v_readfirstlane_b32 s5, v41717; GFX12-NEXT: v_readfirstlane_b32 s3, v21718; GFX12-NEXT: v_readfirstlane_b32 s4, v31719; GFX12-NEXT: s_wait_kmcnt 0x01720; GFX12-NEXT: s_add_co_i32 s2, s5, s21721; GFX12-NEXT: s_add_co_i32 s0, s3, s01722; GFX12-NEXT: s_add_co_i32 s1, s4, s11723; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1724; GFX12-NEXT: v_dual_mov_b32 v4, s2 :: v_dual_mov_b32 v3, s11725; GFX12-NEXT: v_mov_b32_e32 v2, s01726; GFX12-NEXT: global_store_b96 v[0:1], v[2:4], off1727; GFX12-NEXT: s_endpgm1728 %a = load <3 x i32>, ptr addrspace(4) %ptra, align 21729 %b = load volatile <3 x i32>, ptr addrspace(4) %ptra1730 %sum = add <3 x i32> %a, %b1731 store <3 x i32> %sum, ptr addrspace(1) %out1732 ret void1733}1734 1735; any target, 128-bit load load, not align 41736define amdgpu_ps void @load_uniform_P4_v4i32(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1737; GFX7-LABEL: load_uniform_P4_v4i32:1738; GFX7: ; %bb.0:1739; GFX7-NEXT: s_mov_b32 s2, -11740; GFX7-NEXT: s_mov_b32 s3, 0xf0001741; GFX7-NEXT: buffer_load_dwordx4 v[2:5], off, s[0:3], 01742; GFX7-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x01743; GFX7-NEXT: s_mov_b32 s2, 01744; GFX7-NEXT: s_waitcnt vmcnt(0)1745; GFX7-NEXT: v_readfirstlane_b32 s0, v21746; GFX7-NEXT: v_readfirstlane_b32 s1, v31747; GFX7-NEXT: v_readfirstlane_b32 s8, v41748; GFX7-NEXT: v_readfirstlane_b32 s9, v51749; GFX7-NEXT: s_waitcnt lgkmcnt(0)1750; GFX7-NEXT: s_add_i32 s4, s0, s41751; GFX7-NEXT: s_add_i32 s5, s1, s51752; GFX7-NEXT: s_add_i32 s6, s8, s61753; GFX7-NEXT: s_add_i32 s7, s9, s71754; GFX7-NEXT: v_mov_b32_e32 v2, s41755; GFX7-NEXT: v_mov_b32_e32 v3, s51756; GFX7-NEXT: v_mov_b32_e32 v4, s61757; GFX7-NEXT: v_mov_b32_e32 v5, s71758; GFX7-NEXT: s_mov_b64 s[0:1], 01759; GFX7-NEXT: buffer_store_dwordx4 v[2:5], v[0:1], s[0:3], 0 addr641760; GFX7-NEXT: s_endpgm1761;1762; GFX11-LABEL: load_uniform_P4_v4i32:1763; GFX11: ; %bb.0:1764; GFX11-NEXT: v_mov_b32_e32 v2, 01765; GFX11-NEXT: global_load_b128 v[2:5], v2, s[0:1]1766; GFX11-NEXT: s_load_b128 s[0:3], s[0:1], 0x01767; GFX11-NEXT: s_waitcnt vmcnt(0)1768; GFX11-NEXT: v_readfirstlane_b32 s7, v51769; GFX11-NEXT: v_readfirstlane_b32 s4, v21770; GFX11-NEXT: v_readfirstlane_b32 s5, v31771; GFX11-NEXT: v_readfirstlane_b32 s6, v41772; GFX11-NEXT: s_waitcnt lgkmcnt(0)1773; GFX11-NEXT: s_add_i32 s3, s7, s31774; GFX11-NEXT: s_add_i32 s0, s4, s01775; GFX11-NEXT: s_add_i32 s1, s5, s11776; GFX11-NEXT: s_add_i32 s2, s6, s21777; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1778; GFX11-NEXT: v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s21779; GFX11-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01780; GFX11-NEXT: global_store_b128 v[0:1], v[2:5], off1781; GFX11-NEXT: s_endpgm1782;1783; GFX12-LABEL: load_uniform_P4_v4i32:1784; GFX12: ; %bb.0:1785; GFX12-NEXT: v_mov_b32_e32 v2, 01786; GFX12-NEXT: global_load_b128 v[2:5], v2, s[0:1]1787; GFX12-NEXT: s_load_b128 s[0:3], s[0:1], 0x01788; GFX12-NEXT: s_wait_loadcnt 0x01789; GFX12-NEXT: v_readfirstlane_b32 s7, v51790; GFX12-NEXT: v_readfirstlane_b32 s4, v21791; GFX12-NEXT: v_readfirstlane_b32 s5, v31792; GFX12-NEXT: v_readfirstlane_b32 s6, v41793; GFX12-NEXT: s_wait_kmcnt 0x01794; GFX12-NEXT: s_add_co_i32 s3, s7, s31795; GFX12-NEXT: s_add_co_i32 s0, s4, s01796; GFX12-NEXT: s_add_co_i32 s1, s5, s11797; GFX12-NEXT: s_add_co_i32 s2, s6, s21798; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1799; GFX12-NEXT: v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s21800; GFX12-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01801; GFX12-NEXT: global_store_b128 v[0:1], v[2:5], off1802; GFX12-NEXT: s_endpgm1803 %a = load <4 x i32>, ptr addrspace(4) %ptra, align 21804 %b = load volatile <4 x i32>, ptr addrspace(4) %ptra1805 %sum = add <4 x i32> %a, %b1806 store <4 x i32> %sum, ptr addrspace(1) %out1807 ret void1808}1809 1810; any target, 256bit load load, not align 41811define amdgpu_ps void @load_uniform_P4_v8i32(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1812; GFX7-LABEL: load_uniform_P4_v8i32:1813; GFX7: ; %bb.0:1814; GFX7-NEXT: s_mov_b32 s2, -11815; GFX7-NEXT: s_mov_b32 s3, 0xf0001816; GFX7-NEXT: buffer_load_dwordx4 v[2:5], off, s[0:3], 01817; GFX7-NEXT: buffer_load_dwordx4 v[6:9], off, s[0:3], 0 offset:161818; GFX7-NEXT: s_load_dwordx8 s[4:11], s[0:1], 0x01819; GFX7-NEXT: s_mov_b32 s2, 01820; GFX7-NEXT: s_mov_b64 s[0:1], 01821; GFX7-NEXT: s_waitcnt vmcnt(1)1822; GFX7-NEXT: v_readfirstlane_b32 s12, v21823; GFX7-NEXT: v_readfirstlane_b32 s13, v31824; GFX7-NEXT: v_readfirstlane_b32 s14, v41825; GFX7-NEXT: v_readfirstlane_b32 s15, v51826; GFX7-NEXT: s_waitcnt vmcnt(0)1827; GFX7-NEXT: v_readfirstlane_b32 s16, v61828; GFX7-NEXT: s_waitcnt lgkmcnt(0)1829; GFX7-NEXT: s_add_i32 s4, s12, s41830; GFX7-NEXT: v_readfirstlane_b32 s17, v71831; GFX7-NEXT: v_readfirstlane_b32 s18, v81832; GFX7-NEXT: v_readfirstlane_b32 s19, v91833; GFX7-NEXT: s_add_i32 s5, s13, s51834; GFX7-NEXT: s_add_i32 s6, s14, s61835; GFX7-NEXT: s_add_i32 s7, s15, s71836; GFX7-NEXT: s_add_i32 s8, s16, s81837; GFX7-NEXT: v_mov_b32_e32 v2, s41838; GFX7-NEXT: s_add_i32 s9, s17, s91839; GFX7-NEXT: s_add_i32 s10, s18, s101840; GFX7-NEXT: s_add_i32 s11, s19, s111841; GFX7-NEXT: v_mov_b32_e32 v3, s51842; GFX7-NEXT: v_mov_b32_e32 v4, s61843; GFX7-NEXT: v_mov_b32_e32 v5, s71844; GFX7-NEXT: v_mov_b32_e32 v6, s81845; GFX7-NEXT: v_mov_b32_e32 v7, s91846; GFX7-NEXT: v_mov_b32_e32 v8, s101847; GFX7-NEXT: v_mov_b32_e32 v9, s111848; GFX7-NEXT: buffer_store_dwordx4 v[2:5], v[0:1], s[0:3], 0 addr641849; GFX7-NEXT: buffer_store_dwordx4 v[6:9], v[0:1], s[0:3], 0 addr64 offset:161850; GFX7-NEXT: s_endpgm1851;1852; GFX11-LABEL: load_uniform_P4_v8i32:1853; GFX11: ; %bb.0:1854; GFX11-NEXT: v_mov_b32_e32 v6, 01855; GFX11-NEXT: s_clause 0x11856; GFX11-NEXT: global_load_b128 v[2:5], v6, s[0:1]1857; GFX11-NEXT: global_load_b128 v[6:9], v6, s[0:1] offset:161858; GFX11-NEXT: s_load_b256 s[0:7], s[0:1], 0x01859; GFX11-NEXT: s_waitcnt vmcnt(1)1860; GFX11-NEXT: v_readfirstlane_b32 s11, v51861; GFX11-NEXT: v_readfirstlane_b32 s8, v21862; GFX11-NEXT: v_readfirstlane_b32 s9, v31863; GFX11-NEXT: v_readfirstlane_b32 s10, v41864; GFX11-NEXT: s_waitcnt vmcnt(0)1865; GFX11-NEXT: v_readfirstlane_b32 s15, v91866; GFX11-NEXT: v_readfirstlane_b32 s12, v61867; GFX11-NEXT: v_readfirstlane_b32 s13, v71868; GFX11-NEXT: v_readfirstlane_b32 s14, v81869; GFX11-NEXT: s_waitcnt lgkmcnt(0)1870; GFX11-NEXT: s_add_i32 s3, s11, s31871; GFX11-NEXT: s_add_i32 s0, s8, s01872; GFX11-NEXT: s_add_i32 s1, s9, s11873; GFX11-NEXT: s_add_i32 s2, s10, s21874; GFX11-NEXT: s_add_i32 s7, s15, s71875; GFX11-NEXT: s_add_i32 s4, s12, s41876; GFX11-NEXT: s_add_i32 s5, s13, s51877; GFX11-NEXT: s_add_i32 s6, s14, s61878; GFX11-NEXT: v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s21879; GFX11-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01880; GFX11-NEXT: v_dual_mov_b32 v9, s7 :: v_dual_mov_b32 v8, s61881; GFX11-NEXT: v_dual_mov_b32 v7, s5 :: v_dual_mov_b32 v6, s41882; GFX11-NEXT: s_clause 0x11883; GFX11-NEXT: global_store_b128 v[0:1], v[2:5], off1884; GFX11-NEXT: global_store_b128 v[0:1], v[6:9], off offset:161885; GFX11-NEXT: s_endpgm1886;1887; GFX12-LABEL: load_uniform_P4_v8i32:1888; GFX12: ; %bb.0:1889; GFX12-NEXT: v_mov_b32_e32 v6, 01890; GFX12-NEXT: s_clause 0x11891; GFX12-NEXT: global_load_b128 v[2:5], v6, s[0:1]1892; GFX12-NEXT: global_load_b128 v[6:9], v6, s[0:1] offset:161893; GFX12-NEXT: s_load_b256 s[0:7], s[0:1], 0x01894; GFX12-NEXT: s_wait_loadcnt 0x11895; GFX12-NEXT: v_readfirstlane_b32 s11, v51896; GFX12-NEXT: v_readfirstlane_b32 s8, v21897; GFX12-NEXT: v_readfirstlane_b32 s9, v31898; GFX12-NEXT: v_readfirstlane_b32 s10, v41899; GFX12-NEXT: s_wait_loadcnt 0x01900; GFX12-NEXT: v_readfirstlane_b32 s15, v91901; GFX12-NEXT: v_readfirstlane_b32 s12, v61902; GFX12-NEXT: v_readfirstlane_b32 s13, v71903; GFX12-NEXT: v_readfirstlane_b32 s14, v81904; GFX12-NEXT: s_wait_kmcnt 0x01905; GFX12-NEXT: s_add_co_i32 s3, s11, s31906; GFX12-NEXT: s_add_co_i32 s0, s8, s01907; GFX12-NEXT: s_add_co_i32 s1, s9, s11908; GFX12-NEXT: s_add_co_i32 s2, s10, s21909; GFX12-NEXT: s_add_co_i32 s7, s15, s71910; GFX12-NEXT: s_add_co_i32 s4, s12, s41911; GFX12-NEXT: s_add_co_i32 s5, s13, s51912; GFX12-NEXT: s_add_co_i32 s6, s14, s61913; GFX12-NEXT: v_dual_mov_b32 v5, s3 :: v_dual_mov_b32 v4, s21914; GFX12-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01915; GFX12-NEXT: v_dual_mov_b32 v9, s7 :: v_dual_mov_b32 v8, s61916; GFX12-NEXT: v_dual_mov_b32 v7, s5 :: v_dual_mov_b32 v6, s41917; GFX12-NEXT: s_clause 0x11918; GFX12-NEXT: global_store_b128 v[0:1], v[2:5], off1919; GFX12-NEXT: global_store_b128 v[0:1], v[6:9], off offset:161920; GFX12-NEXT: s_endpgm1921 %a = load <8 x i32>, ptr addrspace(4) %ptra, align 21922 %b = load volatile <8 x i32>, ptr addrspace(4) %ptra1923 %sum = add <8 x i32> %a, %b1924 store <8 x i32> %sum, ptr addrspace(1) %out1925 ret void1926}1927 1928; any target, 512bit load load, not align 41929define amdgpu_ps void @load_uniform_P4_v16i32(ptr addrspace(4) inreg %ptra, ptr addrspace(4) inreg %ptrb, ptr addrspace(1) %out) {1930; GFX7-LABEL: load_uniform_P4_v16i32:1931; GFX7: ; %bb.0:1932; GFX7-NEXT: s_mov_b32 s2, -11933; GFX7-NEXT: s_mov_b32 s3, 0xf0001934; GFX7-NEXT: buffer_load_dwordx4 v[2:5], off, s[0:3], 01935; GFX7-NEXT: buffer_load_dwordx4 v[6:9], off, s[0:3], 0 offset:161936; GFX7-NEXT: buffer_load_dwordx4 v[10:13], off, s[0:3], 0 offset:321937; GFX7-NEXT: buffer_load_dwordx4 v[14:17], off, s[0:3], 0 offset:481938; GFX7-NEXT: s_load_dwordx16 s[4:19], s[0:1], 0x01939; GFX7-NEXT: s_mov_b32 s2, 01940; GFX7-NEXT: s_mov_b64 s[0:1], 01941; GFX7-NEXT: s_waitcnt vmcnt(3)1942; GFX7-NEXT: v_readfirstlane_b32 s20, v21943; GFX7-NEXT: v_readfirstlane_b32 s21, v31944; GFX7-NEXT: v_readfirstlane_b32 s22, v41945; GFX7-NEXT: v_readfirstlane_b32 s23, v51946; GFX7-NEXT: s_waitcnt vmcnt(2)1947; GFX7-NEXT: v_readfirstlane_b32 s24, v61948; GFX7-NEXT: s_waitcnt vmcnt(1)1949; GFX7-NEXT: v_readfirstlane_b32 s28, v101950; GFX7-NEXT: s_waitcnt vmcnt(0)1951; GFX7-NEXT: v_readfirstlane_b32 s33, v141952; GFX7-NEXT: s_waitcnt lgkmcnt(0)1953; GFX7-NEXT: s_add_i32 s4, s20, s41954; GFX7-NEXT: v_readfirstlane_b32 s25, v71955; GFX7-NEXT: v_readfirstlane_b32 s26, v81956; GFX7-NEXT: v_readfirstlane_b32 s27, v91957; GFX7-NEXT: v_readfirstlane_b32 s29, v111958; GFX7-NEXT: v_readfirstlane_b32 s30, v121959; GFX7-NEXT: v_readfirstlane_b32 s31, v131960; GFX7-NEXT: v_readfirstlane_b32 s34, v151961; GFX7-NEXT: v_readfirstlane_b32 s35, v161962; GFX7-NEXT: v_readfirstlane_b32 s36, v171963; GFX7-NEXT: s_add_i32 s5, s21, s51964; GFX7-NEXT: s_add_i32 s6, s22, s61965; GFX7-NEXT: s_add_i32 s7, s23, s71966; GFX7-NEXT: s_add_i32 s8, s24, s81967; GFX7-NEXT: s_add_i32 s12, s28, s121968; GFX7-NEXT: s_add_i32 s16, s33, s161969; GFX7-NEXT: v_mov_b32_e32 v2, s41970; GFX7-NEXT: s_add_i32 s9, s25, s91971; GFX7-NEXT: s_add_i32 s10, s26, s101972; GFX7-NEXT: s_add_i32 s11, s27, s111973; GFX7-NEXT: s_add_i32 s13, s29, s131974; GFX7-NEXT: s_add_i32 s14, s30, s141975; GFX7-NEXT: s_add_i32 s15, s31, s151976; GFX7-NEXT: s_add_i32 s17, s34, s171977; GFX7-NEXT: s_add_i32 s18, s35, s181978; GFX7-NEXT: s_add_i32 s19, s36, s191979; GFX7-NEXT: v_mov_b32_e32 v3, s51980; GFX7-NEXT: v_mov_b32_e32 v4, s61981; GFX7-NEXT: v_mov_b32_e32 v5, s71982; GFX7-NEXT: v_mov_b32_e32 v6, s81983; GFX7-NEXT: v_mov_b32_e32 v10, s121984; GFX7-NEXT: v_mov_b32_e32 v14, s161985; GFX7-NEXT: v_mov_b32_e32 v7, s91986; GFX7-NEXT: v_mov_b32_e32 v8, s101987; GFX7-NEXT: v_mov_b32_e32 v9, s111988; GFX7-NEXT: v_mov_b32_e32 v11, s131989; GFX7-NEXT: v_mov_b32_e32 v12, s141990; GFX7-NEXT: v_mov_b32_e32 v13, s151991; GFX7-NEXT: v_mov_b32_e32 v15, s171992; GFX7-NEXT: v_mov_b32_e32 v16, s181993; GFX7-NEXT: v_mov_b32_e32 v17, s191994; GFX7-NEXT: buffer_store_dwordx4 v[2:5], v[0:1], s[0:3], 0 addr641995; GFX7-NEXT: buffer_store_dwordx4 v[6:9], v[0:1], s[0:3], 0 addr64 offset:161996; GFX7-NEXT: buffer_store_dwordx4 v[10:13], v[0:1], s[0:3], 0 addr64 offset:321997; GFX7-NEXT: buffer_store_dwordx4 v[14:17], v[0:1], s[0:3], 0 addr64 offset:481998; GFX7-NEXT: s_endpgm1999;2000; GFX11-LABEL: load_uniform_P4_v16i32:2001; GFX11: ; %bb.0:2002; GFX11-NEXT: v_mov_b32_e32 v14, 02003; GFX11-NEXT: s_clause 0x32004; GFX11-NEXT: global_load_b128 v[2:5], v14, s[0:1]2005; GFX11-NEXT: global_load_b128 v[6:9], v14, s[0:1] offset:162006; GFX11-NEXT: global_load_b128 v[10:13], v14, s[0:1] offset:322007; GFX11-NEXT: global_load_b128 v[14:17], v14, s[0:1] offset:482008; GFX11-NEXT: s_load_b512 s[0:15], s[0:1], 0x02009; GFX11-NEXT: s_waitcnt vmcnt(3)2010; GFX11-NEXT: v_readfirstlane_b32 s19, v52011; GFX11-NEXT: v_readfirstlane_b32 s16, v22012; GFX11-NEXT: v_readfirstlane_b32 s17, v32013; GFX11-NEXT: v_readfirstlane_b32 s18, v42014; GFX11-NEXT: s_waitcnt vmcnt(2)2015; GFX11-NEXT: v_readfirstlane_b32 s23, v92016; GFX11-NEXT: v_readfirstlane_b32 s20, v62017; GFX11-NEXT: v_readfirstlane_b32 s21, v72018; GFX11-NEXT: v_readfirstlane_b32 s22, v82019; GFX11-NEXT: s_waitcnt vmcnt(1)2020; GFX11-NEXT: v_readfirstlane_b32 s27, v132021; GFX11-NEXT: v_readfirstlane_b32 s24, v102022; GFX11-NEXT: v_readfirstlane_b32 s25, v112023; GFX11-NEXT: v_readfirstlane_b32 s26, v122024; GFX11-NEXT: s_waitcnt vmcnt(0)2025; GFX11-NEXT: v_readfirstlane_b32 s31, v172026; GFX11-NEXT: v_readfirstlane_b32 s28, v142027; GFX11-NEXT: v_readfirstlane_b32 s29, v152028; GFX11-NEXT: v_readfirstlane_b32 s30, v162029; GFX11-NEXT: s_waitcnt lgkmcnt(0)2030; GFX11-NEXT: s_add_i32 s3, s19, s32031; GFX11-NEXT: s_add_i32 s0, s16, s02032; GFX11-NEXT: s_add_i32 s1, s17, s12033; GFX11-NEXT: s_add_i32 s2, s18, s22034; GFX11-NEXT: s_add_i32 s7, s23, s72035; GFX11-NEXT: s_add_i32 s4, s20, s42036; GFX11-NEXT: s_add_i32 s5, s21, s52037; GFX11-NEXT: s_add_i32 s6, s22, s62038; GFX11-NEXT: s_add_i32 s11, s27, s112039; GFX11-NEXT: v_mov_b32_e32 v5, s32040; GFX11-NEXT: s_add_i32 s8, s24, s82041; GFX11-NEXT: s_add_i32 s9, s25, s92042; GFX11-NEXT: s_add_i32 s10, s26, s102043; GFX11-NEXT: s_add_i32 s15, s31, s152044; GFX11-NEXT: v_dual_mov_b32 v4, s2 :: v_dual_mov_b32 v3, s12045; GFX11-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v9, s72046; GFX11-NEXT: s_add_i32 s12, s28, s122047; GFX11-NEXT: s_add_i32 s13, s29, s132048; GFX11-NEXT: s_add_i32 s14, s30, s142049; GFX11-NEXT: v_dual_mov_b32 v8, s6 :: v_dual_mov_b32 v7, s52050; GFX11-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v13, s112051; GFX11-NEXT: v_dual_mov_b32 v12, s10 :: v_dual_mov_b32 v11, s92052; GFX11-NEXT: v_dual_mov_b32 v10, s8 :: v_dual_mov_b32 v17, s152053; GFX11-NEXT: v_dual_mov_b32 v16, s14 :: v_dual_mov_b32 v15, s132054; GFX11-NEXT: v_mov_b32_e32 v14, s122055; GFX11-NEXT: s_clause 0x32056; GFX11-NEXT: global_store_b128 v[0:1], v[2:5], off2057; GFX11-NEXT: global_store_b128 v[0:1], v[6:9], off offset:162058; GFX11-NEXT: global_store_b128 v[0:1], v[10:13], off offset:322059; GFX11-NEXT: global_store_b128 v[0:1], v[14:17], off offset:482060; GFX11-NEXT: s_endpgm2061;2062; GFX12-LABEL: load_uniform_P4_v16i32:2063; GFX12: ; %bb.0:2064; GFX12-NEXT: v_mov_b32_e32 v14, 02065; GFX12-NEXT: s_clause 0x32066; GFX12-NEXT: global_load_b128 v[2:5], v14, s[0:1]2067; GFX12-NEXT: global_load_b128 v[6:9], v14, s[0:1] offset:162068; GFX12-NEXT: global_load_b128 v[10:13], v14, s[0:1] offset:322069; GFX12-NEXT: global_load_b128 v[14:17], v14, s[0:1] offset:482070; GFX12-NEXT: s_load_b512 s[0:15], s[0:1], 0x02071; GFX12-NEXT: s_wait_loadcnt 0x32072; GFX12-NEXT: v_readfirstlane_b32 s19, v52073; GFX12-NEXT: v_readfirstlane_b32 s16, v22074; GFX12-NEXT: v_readfirstlane_b32 s17, v32075; GFX12-NEXT: v_readfirstlane_b32 s18, v42076; GFX12-NEXT: s_wait_loadcnt 0x22077; GFX12-NEXT: v_readfirstlane_b32 s23, v92078; GFX12-NEXT: v_readfirstlane_b32 s20, v62079; GFX12-NEXT: v_readfirstlane_b32 s21, v72080; GFX12-NEXT: v_readfirstlane_b32 s22, v82081; GFX12-NEXT: s_wait_loadcnt 0x12082; GFX12-NEXT: v_readfirstlane_b32 s27, v132083; GFX12-NEXT: v_readfirstlane_b32 s24, v102084; GFX12-NEXT: v_readfirstlane_b32 s25, v112085; GFX12-NEXT: v_readfirstlane_b32 s26, v122086; GFX12-NEXT: s_wait_loadcnt 0x02087; GFX12-NEXT: v_readfirstlane_b32 s31, v172088; GFX12-NEXT: v_readfirstlane_b32 s28, v142089; GFX12-NEXT: v_readfirstlane_b32 s29, v152090; GFX12-NEXT: v_readfirstlane_b32 s30, v162091; GFX12-NEXT: s_wait_kmcnt 0x02092; GFX12-NEXT: s_add_co_i32 s3, s19, s32093; GFX12-NEXT: s_add_co_i32 s0, s16, s02094; GFX12-NEXT: s_add_co_i32 s1, s17, s12095; GFX12-NEXT: s_add_co_i32 s2, s18, s22096; GFX12-NEXT: s_add_co_i32 s7, s23, s72097; GFX12-NEXT: s_add_co_i32 s4, s20, s42098; GFX12-NEXT: s_add_co_i32 s5, s21, s52099; GFX12-NEXT: s_add_co_i32 s6, s22, s62100; GFX12-NEXT: s_add_co_i32 s11, s27, s112101; GFX12-NEXT: v_mov_b32_e32 v5, s32102; GFX12-NEXT: s_add_co_i32 s8, s24, s82103; GFX12-NEXT: s_add_co_i32 s9, s25, s92104; GFX12-NEXT: s_add_co_i32 s10, s26, s102105; GFX12-NEXT: s_add_co_i32 s15, s31, s152106; GFX12-NEXT: v_dual_mov_b32 v4, s2 :: v_dual_mov_b32 v3, s12107; GFX12-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v9, s72108; GFX12-NEXT: s_add_co_i32 s12, s28, s122109; GFX12-NEXT: s_add_co_i32 s13, s29, s132110; GFX12-NEXT: s_add_co_i32 s14, s30, s142111; GFX12-NEXT: v_dual_mov_b32 v8, s6 :: v_dual_mov_b32 v7, s52112; GFX12-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v13, s112113; GFX12-NEXT: v_dual_mov_b32 v12, s10 :: v_dual_mov_b32 v11, s92114; GFX12-NEXT: v_dual_mov_b32 v10, s8 :: v_dual_mov_b32 v17, s152115; GFX12-NEXT: v_dual_mov_b32 v16, s14 :: v_dual_mov_b32 v15, s132116; GFX12-NEXT: v_mov_b32_e32 v14, s122117; GFX12-NEXT: s_clause 0x32118; GFX12-NEXT: global_store_b128 v[0:1], v[2:5], off2119; GFX12-NEXT: global_store_b128 v[0:1], v[6:9], off offset:162120; GFX12-NEXT: global_store_b128 v[0:1], v[10:13], off offset:322121; GFX12-NEXT: global_store_b128 v[0:1], v[14:17], off offset:482122; GFX12-NEXT: s_endpgm2123 %a = load <16 x i32>, ptr addrspace(4) %ptra, align 22124 %b = load volatile <16 x i32>, ptr addrspace(4) %ptra2125 %sum = add <16 x i32> %a, %b2126 store <16 x i32> %sum, ptr addrspace(1) %out2127 ret void2128}2129