493 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdpal -mcpu=gfx1200 -mattr=+unaligned-access-mode,-real-true16 < %s | FileCheck --check-prefixes=GFX12,GFX12-True16 %s3; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdpal -mcpu=gfx1200 -mattr=+unaligned-access-mode,+real-true16 < %s | FileCheck --check-prefixes=GFX12,GFX12-NoTrue16 %s4 5define amdgpu_ps void @load_divergent_P0_i8_any_extending(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {6; GFX12-LABEL: load_divergent_P0_i8_any_extending:7; GFX12: ; %bb.0:8; GFX12-NEXT: flat_load_u8 v0, v[0:1]9; GFX12-NEXT: s_wait_loadcnt_dscnt 0x010; GFX12-NEXT: flat_store_b8 v[2:3], v011; GFX12-NEXT: s_endpgm12 %a = load i8, ptr addrspace(0) %ptra13 store i8 %a, ptr addrspace(0) %out14 ret void15}16 17; with true16, S16 16-bit load18; without true16, S32 16-bit any-extending load19define amdgpu_ps void @load_divergent_P0_i16(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {20; GFX12-True16-LABEL: load_divergent_P0_i16:21; GFX12-True16: ; %bb.0:22; GFX12-True16-NEXT: flat_load_u16 v0, v[0:1]23; GFX12-True16-NEXT: s_wait_loadcnt_dscnt 0x024; GFX12-True16-NEXT: flat_store_b16 v[2:3], v025; GFX12-True16-NEXT: s_endpgm26;27; GFX12-NoTrue16-LABEL: load_divergent_P0_i16:28; GFX12-NoTrue16: ; %bb.0:29; GFX12-NoTrue16-NEXT: flat_load_d16_b16 v0, v[0:1]30; GFX12-NoTrue16-NEXT: s_wait_loadcnt_dscnt 0x031; GFX12-NoTrue16-NEXT: flat_store_b16 v[2:3], v032; GFX12-NoTrue16-NEXT: s_endpgm33 %a = load i16, ptr addrspace(0) %ptra34 store i16 %a, ptr addrspace(0) %out35 ret void36}37 38define amdgpu_ps void @load_divergent_P0_i32(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {39; GFX12-LABEL: load_divergent_P0_i32:40; GFX12: ; %bb.0:41; GFX12-NEXT: flat_load_b32 v0, v[0:1]42; GFX12-NEXT: s_wait_loadcnt_dscnt 0x043; GFX12-NEXT: flat_store_b32 v[2:3], v044; GFX12-NEXT: s_endpgm45 %a = load i32, ptr addrspace(0) %ptra46 store i32 %a, ptr addrspace(0) %out47 ret void48}49 50define amdgpu_ps void @load_divergent_P0_v2i32(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {51; GFX12-LABEL: load_divergent_P0_v2i32:52; GFX12: ; %bb.0:53; GFX12-NEXT: flat_load_b64 v[0:1], v[0:1]54; GFX12-NEXT: s_wait_loadcnt_dscnt 0x055; GFX12-NEXT: flat_store_b64 v[2:3], v[0:1]56; GFX12-NEXT: s_endpgm57 %a = load <2 x i32>, ptr addrspace(0) %ptra58 store <2 x i32> %a, ptr addrspace(0) %out59 ret void60}61 62define amdgpu_ps void @load_divergent_P0_v3i32(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {63; GFX12-LABEL: load_divergent_P0_v3i32:64; GFX12: ; %bb.0:65; GFX12-NEXT: flat_load_b96 v[4:6], v[0:1]66; GFX12-NEXT: s_wait_loadcnt_dscnt 0x067; GFX12-NEXT: flat_store_b96 v[2:3], v[4:6]68; GFX12-NEXT: s_endpgm69 %a = load <3 x i32>, ptr addrspace(0) %ptra70 store <3 x i32> %a, ptr addrspace(0) %out71 ret void72}73 74define amdgpu_ps void @load_divergent_P0_v4i32(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {75; GFX12-LABEL: load_divergent_P0_v4i32:76; GFX12: ; %bb.0:77; GFX12-NEXT: flat_load_b128 v[4:7], v[0:1]78; GFX12-NEXT: s_wait_loadcnt_dscnt 0x079; GFX12-NEXT: flat_store_b128 v[2:3], v[4:7]80; GFX12-NEXT: s_endpgm81 %a = load <4 x i32>, ptr addrspace(0) %ptra82 store <4 x i32> %a, ptr addrspace(0) %out83 ret void84}85 86 87 88define amdgpu_ps void @load_divergent_P1_i8_any_extending(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {89; GFX12-LABEL: load_divergent_P1_i8_any_extending:90; GFX12: ; %bb.0:91; GFX12-NEXT: global_load_u8 v0, v[0:1], off92; GFX12-NEXT: s_wait_loadcnt 0x093; GFX12-NEXT: global_store_b8 v[2:3], v0, off94; GFX12-NEXT: s_endpgm95 %a = load i8, ptr addrspace(1) %ptra96 store i8 %a, ptr addrspace(1) %out97 ret void98}99 100; with true16, S16 16-bit load101; without true16, S32 16-bit any-extending load102define amdgpu_ps void @load_divergent_P1_i16(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {103; GFX12-True16-LABEL: load_divergent_P1_i16:104; GFX12-True16: ; %bb.0:105; GFX12-True16-NEXT: global_load_u16 v0, v[0:1], off106; GFX12-True16-NEXT: s_wait_loadcnt 0x0107; GFX12-True16-NEXT: global_store_b16 v[2:3], v0, off108; GFX12-True16-NEXT: s_endpgm109;110; GFX12-NoTrue16-LABEL: load_divergent_P1_i16:111; GFX12-NoTrue16: ; %bb.0:112; GFX12-NoTrue16-NEXT: global_load_d16_b16 v0, v[0:1], off113; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x0114; GFX12-NoTrue16-NEXT: global_store_b16 v[2:3], v0, off115; GFX12-NoTrue16-NEXT: s_endpgm116 %a = load i16, ptr addrspace(1) %ptra117 store i16 %a, ptr addrspace(1) %out118 ret void119}120 121define amdgpu_ps void @load_divergent_P1_i32(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {122; GFX12-LABEL: load_divergent_P1_i32:123; GFX12: ; %bb.0:124; GFX12-NEXT: global_load_b32 v0, v[0:1], off125; GFX12-NEXT: s_wait_loadcnt 0x0126; GFX12-NEXT: global_store_b32 v[2:3], v0, off127; GFX12-NEXT: s_endpgm128 %a = load i32, ptr addrspace(1) %ptra129 store i32 %a, ptr addrspace(1) %out130 ret void131}132 133define amdgpu_ps void @load_divergent_P1_v2i32(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {134; GFX12-LABEL: load_divergent_P1_v2i32:135; GFX12: ; %bb.0:136; GFX12-NEXT: global_load_b64 v[0:1], v[0:1], off137; GFX12-NEXT: s_wait_loadcnt 0x0138; GFX12-NEXT: global_store_b64 v[2:3], v[0:1], off139; GFX12-NEXT: s_endpgm140 %a = load <2 x i32>, ptr addrspace(1) %ptra141 store <2 x i32> %a, ptr addrspace(1) %out142 ret void143}144 145define amdgpu_ps void @load_divergent_P1_v3i32(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {146; GFX12-LABEL: load_divergent_P1_v3i32:147; GFX12: ; %bb.0:148; GFX12-NEXT: global_load_b96 v[4:6], v[0:1], off149; GFX12-NEXT: s_wait_loadcnt 0x0150; GFX12-NEXT: global_store_b96 v[2:3], v[4:6], off151; GFX12-NEXT: s_endpgm152 %a = load <3 x i32>, ptr addrspace(1) %ptra153 store <3 x i32> %a, ptr addrspace(1) %out154 ret void155}156 157define amdgpu_ps void @load_divergent_P1_v4i32(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {158; GFX12-LABEL: load_divergent_P1_v4i32:159; GFX12: ; %bb.0:160; GFX12-NEXT: global_load_b128 v[4:7], v[0:1], off161; GFX12-NEXT: s_wait_loadcnt 0x0162; GFX12-NEXT: global_store_b128 v[2:3], v[4:7], off163; GFX12-NEXT: s_endpgm164 %a = load <4 x i32>, ptr addrspace(1) %ptra165 store <4 x i32> %a, ptr addrspace(1) %out166 ret void167}168 169define amdgpu_ps void @load_divergent_P1_v8i32(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {170; GFX12-LABEL: load_divergent_P1_v8i32:171; GFX12: ; %bb.0:172; GFX12-NEXT: s_clause 0x1173; GFX12-NEXT: global_load_b128 v[4:7], v[0:1], off174; GFX12-NEXT: global_load_b128 v[8:11], v[0:1], off offset:16175; GFX12-NEXT: s_wait_loadcnt 0x1176; GFX12-NEXT: global_store_b128 v[2:3], v[4:7], off177; GFX12-NEXT: s_wait_loadcnt 0x0178; GFX12-NEXT: global_store_b128 v[2:3], v[8:11], off offset:16179; GFX12-NEXT: s_endpgm180 %a = load <8 x i32>, ptr addrspace(1) %ptra181 store <8 x i32> %a, ptr addrspace(1) %out182 ret void183}184 185define amdgpu_ps void @load_divergent_P1_v16i32(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {186; GFX12-LABEL: load_divergent_P1_v16i32:187; GFX12: ; %bb.0:188; GFX12-NEXT: s_clause 0x3189; GFX12-NEXT: global_load_b128 v[4:7], v[0:1], off190; GFX12-NEXT: global_load_b128 v[8:11], v[0:1], off offset:16191; GFX12-NEXT: global_load_b128 v[12:15], v[0:1], off offset:32192; GFX12-NEXT: global_load_b128 v[16:19], v[0:1], off offset:48193; GFX12-NEXT: s_wait_loadcnt 0x3194; GFX12-NEXT: global_store_b128 v[2:3], v[4:7], off195; GFX12-NEXT: s_wait_loadcnt 0x2196; GFX12-NEXT: global_store_b128 v[2:3], v[8:11], off offset:16197; GFX12-NEXT: s_wait_loadcnt 0x1198; GFX12-NEXT: global_store_b128 v[2:3], v[12:15], off offset:32199; GFX12-NEXT: s_wait_loadcnt 0x0200; GFX12-NEXT: global_store_b128 v[2:3], v[16:19], off offset:48201; GFX12-NEXT: s_endpgm202 %a = load <16 x i32>, ptr addrspace(1) %ptra203 store <16 x i32> %a, ptr addrspace(1) %out204 ret void205}206 207 208 209define amdgpu_ps void @load_divergent_P3_i8_any_extending(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {210; GFX12-LABEL: load_divergent_P3_i8_any_extending:211; GFX12: ; %bb.0:212; GFX12-NEXT: ds_load_u8 v0, v0213; GFX12-NEXT: s_wait_dscnt 0x0214; GFX12-NEXT: ds_store_b8 v1, v0215; GFX12-NEXT: s_endpgm216 %a = load i8, ptr addrspace(3) %ptra217 store i8 %a, ptr addrspace(3) %out218 ret void219}220 221; with true16, S16 16-bit load222; without true16, S32 16-bit any-extending load223define amdgpu_ps void @load_divergent_P3_i16(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {224; GFX12-True16-LABEL: load_divergent_P3_i16:225; GFX12-True16: ; %bb.0:226; GFX12-True16-NEXT: ds_load_u16 v0, v0227; GFX12-True16-NEXT: s_wait_dscnt 0x0228; GFX12-True16-NEXT: ds_store_b16 v1, v0229; GFX12-True16-NEXT: s_endpgm230;231; GFX12-NoTrue16-LABEL: load_divergent_P3_i16:232; GFX12-NoTrue16: ; %bb.0:233; GFX12-NoTrue16-NEXT: ds_load_u16_d16 v0, v0234; GFX12-NoTrue16-NEXT: s_wait_dscnt 0x0235; GFX12-NoTrue16-NEXT: ds_store_b16 v1, v0236; GFX12-NoTrue16-NEXT: s_endpgm237 %a = load i16, ptr addrspace(3) %ptra238 store i16 %a, ptr addrspace(3) %out239 ret void240}241 242define amdgpu_ps void @load_divergent_P3_i32(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {243; GFX12-LABEL: load_divergent_P3_i32:244; GFX12: ; %bb.0:245; GFX12-NEXT: ds_load_b32 v0, v0246; GFX12-NEXT: s_wait_dscnt 0x0247; GFX12-NEXT: ds_store_b32 v1, v0248; GFX12-NEXT: s_endpgm249 %a = load i32, ptr addrspace(3) %ptra250 store i32 %a, ptr addrspace(3) %out251 ret void252}253 254define amdgpu_ps void @load_divergent_P3_v2i32(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {255; GFX12-LABEL: load_divergent_P3_v2i32:256; GFX12: ; %bb.0:257; GFX12-NEXT: ds_load_b64 v[2:3], v0258; GFX12-NEXT: s_wait_dscnt 0x0259; GFX12-NEXT: ds_store_b64 v1, v[2:3]260; GFX12-NEXT: s_endpgm261 %a = load <2 x i32>, ptr addrspace(3) %ptra262 store <2 x i32> %a, ptr addrspace(3) %out263 ret void264}265 266define amdgpu_ps void @load_divergent_P3_v3i32(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {267; GFX12-LABEL: load_divergent_P3_v3i32:268; GFX12: ; %bb.0:269; GFX12-NEXT: ds_load_b96 v[2:4], v0270; GFX12-NEXT: s_wait_dscnt 0x0271; GFX12-NEXT: ds_store_b96 v1, v[2:4]272; GFX12-NEXT: s_endpgm273 %a = load <3 x i32>, ptr addrspace(3) %ptra274 store <3 x i32> %a, ptr addrspace(3) %out275 ret void276}277 278define amdgpu_ps void @load_divergent_P3_v4i32(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {279; GFX12-LABEL: load_divergent_P3_v4i32:280; GFX12: ; %bb.0:281; GFX12-NEXT: ds_load_b128 v[2:5], v0282; GFX12-NEXT: s_wait_dscnt 0x0283; GFX12-NEXT: ds_store_b128 v1, v[2:5]284; GFX12-NEXT: s_endpgm285 %a = load <4 x i32>, ptr addrspace(3) %ptra286 store <4 x i32> %a, ptr addrspace(3) %out287 ret void288}289 290 291 292define amdgpu_ps void @load_divergent_P4_i8_any_extending(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {293; GFX12-LABEL: load_divergent_P4_i8_any_extending:294; GFX12: ; %bb.0:295; GFX12-NEXT: global_load_u8 v0, v[0:1], off296; GFX12-NEXT: s_wait_loadcnt 0x0297; GFX12-NEXT: global_store_b8 v[2:3], v0, off298; GFX12-NEXT: s_endpgm299 %a = load i8, ptr addrspace(4) %ptra300 store i8 %a, ptr addrspace(1) %out301 ret void302}303 304; with true16, S16 16-bit load305; without true16, S32 16-bit any-extending load306define amdgpu_ps void @load_divergent_P4_i16(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {307; GFX12-True16-LABEL: load_divergent_P4_i16:308; GFX12-True16: ; %bb.0:309; GFX12-True16-NEXT: global_load_u16 v0, v[0:1], off310; GFX12-True16-NEXT: s_wait_loadcnt 0x0311; GFX12-True16-NEXT: global_store_b16 v[2:3], v0, off312; GFX12-True16-NEXT: s_endpgm313;314; GFX12-NoTrue16-LABEL: load_divergent_P4_i16:315; GFX12-NoTrue16: ; %bb.0:316; GFX12-NoTrue16-NEXT: global_load_d16_b16 v0, v[0:1], off317; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x0318; GFX12-NoTrue16-NEXT: global_store_b16 v[2:3], v0, off319; GFX12-NoTrue16-NEXT: s_endpgm320 %a = load i16, ptr addrspace(4) %ptra321 store i16 %a, ptr addrspace(1) %out322 ret void323}324 325define amdgpu_ps void @load_divergent_P4_i32(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {326; GFX12-LABEL: load_divergent_P4_i32:327; GFX12: ; %bb.0:328; GFX12-NEXT: global_load_b32 v0, v[0:1], off329; GFX12-NEXT: s_wait_loadcnt 0x0330; GFX12-NEXT: global_store_b32 v[2:3], v0, off331; GFX12-NEXT: s_endpgm332 %a = load i32, ptr addrspace(4) %ptra333 store i32 %a, ptr addrspace(1) %out334 ret void335}336 337define amdgpu_ps void @load_divergent_P4_v2i32(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {338; GFX12-LABEL: load_divergent_P4_v2i32:339; GFX12: ; %bb.0:340; GFX12-NEXT: global_load_b64 v[0:1], v[0:1], off341; GFX12-NEXT: s_wait_loadcnt 0x0342; GFX12-NEXT: global_store_b64 v[2:3], v[0:1], off343; GFX12-NEXT: s_endpgm344 %a = load <2 x i32>, ptr addrspace(4) %ptra345 store <2 x i32> %a, ptr addrspace(1) %out346 ret void347}348 349define amdgpu_ps void @load_divergent_P4_v3i32(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {350; GFX12-LABEL: load_divergent_P4_v3i32:351; GFX12: ; %bb.0:352; GFX12-NEXT: global_load_b96 v[4:6], v[0:1], off353; GFX12-NEXT: s_wait_loadcnt 0x0354; GFX12-NEXT: global_store_b96 v[2:3], v[4:6], off355; GFX12-NEXT: s_endpgm356 %a = load <3 x i32>, ptr addrspace(4) %ptra357 store <3 x i32> %a, ptr addrspace(1) %out358 ret void359}360 361define amdgpu_ps void @load_divergent_P4_v4i32(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {362; GFX12-LABEL: load_divergent_P4_v4i32:363; GFX12: ; %bb.0:364; GFX12-NEXT: global_load_b128 v[4:7], v[0:1], off365; GFX12-NEXT: s_wait_loadcnt 0x0366; GFX12-NEXT: global_store_b128 v[2:3], v[4:7], off367; GFX12-NEXT: s_endpgm368 %a = load <4 x i32>, ptr addrspace(4) %ptra369 store <4 x i32> %a, ptr addrspace(1) %out370 ret void371}372 373define amdgpu_ps void @load_divergent_P4_v8i32(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {374; GFX12-LABEL: load_divergent_P4_v8i32:375; GFX12: ; %bb.0:376; GFX12-NEXT: s_clause 0x1377; GFX12-NEXT: global_load_b128 v[4:7], v[0:1], off378; GFX12-NEXT: global_load_b128 v[8:11], v[0:1], off offset:16379; GFX12-NEXT: s_wait_loadcnt 0x1380; GFX12-NEXT: global_store_b128 v[2:3], v[4:7], off381; GFX12-NEXT: s_wait_loadcnt 0x0382; GFX12-NEXT: global_store_b128 v[2:3], v[8:11], off offset:16383; GFX12-NEXT: s_endpgm384 %a = load <8 x i32>, ptr addrspace(4) %ptra385 store <8 x i32> %a, ptr addrspace(1) %out386 ret void387}388 389define amdgpu_ps void @load_divergent_P4_v16i32(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {390; GFX12-LABEL: load_divergent_P4_v16i32:391; GFX12: ; %bb.0:392; GFX12-NEXT: s_clause 0x3393; GFX12-NEXT: global_load_b128 v[4:7], v[0:1], off394; GFX12-NEXT: global_load_b128 v[8:11], v[0:1], off offset:16395; GFX12-NEXT: global_load_b128 v[12:15], v[0:1], off offset:32396; GFX12-NEXT: global_load_b128 v[16:19], v[0:1], off offset:48397; GFX12-NEXT: s_wait_loadcnt 0x3398; GFX12-NEXT: global_store_b128 v[2:3], v[4:7], off399; GFX12-NEXT: s_wait_loadcnt 0x2400; GFX12-NEXT: global_store_b128 v[2:3], v[8:11], off offset:16401; GFX12-NEXT: s_wait_loadcnt 0x1402; GFX12-NEXT: global_store_b128 v[2:3], v[12:15], off offset:32403; GFX12-NEXT: s_wait_loadcnt 0x0404; GFX12-NEXT: global_store_b128 v[2:3], v[16:19], off offset:48405; GFX12-NEXT: s_endpgm406 %a = load <16 x i32>, ptr addrspace(4) %ptra407 store <16 x i32> %a, ptr addrspace(1) %out408 ret void409}410 411 412 413define amdgpu_ps void @load_divergent_P5_i8_any_extending(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {414; GFX12-LABEL: load_divergent_P5_i8_any_extending:415; GFX12: ; %bb.0:416; GFX12-NEXT: scratch_load_u8 v0, v0, off417; GFX12-NEXT: s_wait_loadcnt 0x0418; GFX12-NEXT: scratch_store_b8 v1, v0, off419; GFX12-NEXT: s_endpgm420 %a = load i8, ptr addrspace(5) %ptra421 store i8 %a, ptr addrspace(5) %out422 ret void423}424 425; with true16, S16 16-bit load426; without true16, S32 16-bit any-extending load427define amdgpu_ps void @load_divergent_P5_i16(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {428; GFX12-True16-LABEL: load_divergent_P5_i16:429; GFX12-True16: ; %bb.0:430; GFX12-True16-NEXT: scratch_load_u16 v0, v0, off431; GFX12-True16-NEXT: s_wait_loadcnt 0x0432; GFX12-True16-NEXT: scratch_store_b16 v1, v0, off433; GFX12-True16-NEXT: s_endpgm434;435; GFX12-NoTrue16-LABEL: load_divergent_P5_i16:436; GFX12-NoTrue16: ; %bb.0:437; GFX12-NoTrue16-NEXT: scratch_load_d16_b16 v0, v0, off438; GFX12-NoTrue16-NEXT: s_wait_loadcnt 0x0439; GFX12-NoTrue16-NEXT: scratch_store_b16 v1, v0, off440; GFX12-NoTrue16-NEXT: s_endpgm441 %a = load i16, ptr addrspace(5) %ptra442 store i16 %a, ptr addrspace(5) %out443 ret void444}445 446define amdgpu_ps void @load_divergent_P5_i32(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {447; GFX12-LABEL: load_divergent_P5_i32:448; GFX12: ; %bb.0:449; GFX12-NEXT: scratch_load_b32 v0, v0, off450; GFX12-NEXT: s_wait_loadcnt 0x0451; GFX12-NEXT: scratch_store_b32 v1, v0, off452; GFX12-NEXT: s_endpgm453 %a = load i32, ptr addrspace(5) %ptra454 store i32 %a, ptr addrspace(5) %out455 ret void456}457 458define amdgpu_ps void @load_divergent_P5_v2i32(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {459; GFX12-LABEL: load_divergent_P5_v2i32:460; GFX12: ; %bb.0:461; GFX12-NEXT: scratch_load_b64 v[2:3], v0, off462; GFX12-NEXT: s_wait_loadcnt 0x0463; GFX12-NEXT: scratch_store_b64 v1, v[2:3], off464; GFX12-NEXT: s_endpgm465 %a = load <2 x i32>, ptr addrspace(5) %ptra466 store <2 x i32> %a, ptr addrspace(5) %out467 ret void468}469 470define amdgpu_ps void @load_divergent_P5_v3i32(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {471; GFX12-LABEL: load_divergent_P5_v3i32:472; GFX12: ; %bb.0:473; GFX12-NEXT: scratch_load_b96 v[2:4], v0, off474; GFX12-NEXT: s_wait_loadcnt 0x0475; GFX12-NEXT: scratch_store_b96 v1, v[2:4], off476; GFX12-NEXT: s_endpgm477 %a = load <3 x i32>, ptr addrspace(5) %ptra478 store <3 x i32> %a, ptr addrspace(5) %out479 ret void480}481 482define amdgpu_ps void @load_divergent_P5_v4i32(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {483; GFX12-LABEL: load_divergent_P5_v4i32:484; GFX12: ; %bb.0:485; GFX12-NEXT: scratch_load_b128 v[2:5], v0, off486; GFX12-NEXT: s_wait_loadcnt 0x0487; GFX12-NEXT: scratch_store_b128 v1, v[2:5], off488; GFX12-NEXT: s_endpgm489 %a = load <4 x i32>, ptr addrspace(5) %ptra490 store <4 x i32> %a, ptr addrspace(5) %out491 ret void492}493