2676 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx803 < %s | FileCheck -check-prefixes=GFX8 %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90A %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s7; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s8 9declare i64 @_Z13get_global_idj(i32) #010 11define amdgpu_kernel void @clmem_read_simplified(ptr addrspace(1) %buffer) {12; GFX8-LABEL: clmem_read_simplified:13; GFX8: ; %bb.0: ; %entry14; GFX8-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD015; GFX8-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD116; GFX8-NEXT: s_mov_b32 s38, -117; GFX8-NEXT: s_mov_b32 s39, 0xe8000018; GFX8-NEXT: s_add_u32 s36, s36, s1119; GFX8-NEXT: s_addc_u32 s37, s37, 020; GFX8-NEXT: s_getpc_b64 s[0:1]21; GFX8-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+422; GFX8-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+1223; GFX8-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x2424; GFX8-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x025; GFX8-NEXT: s_mov_b64 s[0:1], s[36:37]26; GFX8-NEXT: v_mov_b32_e32 v31, v027; GFX8-NEXT: s_mov_b64 s[2:3], s[38:39]28; GFX8-NEXT: v_mov_b32_e32 v0, 029; GFX8-NEXT: s_mov_b32 s32, 030; GFX8-NEXT: s_waitcnt lgkmcnt(0)31; GFX8-NEXT: s_swappc_b64 s[30:31], s[4:5]32; GFX8-NEXT: v_lshlrev_b32_e32 v1, 7, v033; GFX8-NEXT: v_and_b32_e32 v1, 0xffff8000, v134; GFX8-NEXT: v_mov_b32_e32 v2, s3535; GFX8-NEXT: v_add_u32_e32 v1, vcc, s34, v136; GFX8-NEXT: v_mov_b32_e32 v3, 337; GFX8-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc38; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_039; GFX8-NEXT: v_add_u32_e32 v3, vcc, v1, v040; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v2, vcc41; GFX8-NEXT: s_movk_i32 s0, 0x80042; GFX8-NEXT: v_add_u32_e32 v5, vcc, s0, v343; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v4, vcc44; GFX8-NEXT: s_movk_i32 s0, 0x100045; GFX8-NEXT: v_add_u32_e32 v7, vcc, s0, v346; GFX8-NEXT: v_addc_u32_e32 v8, vcc, 0, v4, vcc47; GFX8-NEXT: s_movk_i32 s0, 0x180048; GFX8-NEXT: v_add_u32_e32 v9, vcc, s0, v349; GFX8-NEXT: v_addc_u32_e32 v10, vcc, 0, v4, vcc50; GFX8-NEXT: flat_load_dwordx2 v[11:12], v[3:4]51; GFX8-NEXT: flat_load_dwordx2 v[5:6], v[5:6]52; GFX8-NEXT: flat_load_dwordx2 v[7:8], v[7:8]53; GFX8-NEXT: flat_load_dwordx2 v[9:10], v[9:10]54; GFX8-NEXT: s_movk_i32 s0, 0x200055; GFX8-NEXT: v_add_u32_e32 v13, vcc, s0, v356; GFX8-NEXT: v_addc_u32_e32 v14, vcc, 0, v4, vcc57; GFX8-NEXT: s_movk_i32 s0, 0x280058; GFX8-NEXT: v_add_u32_e32 v15, vcc, s0, v359; GFX8-NEXT: v_addc_u32_e32 v16, vcc, 0, v4, vcc60; GFX8-NEXT: flat_load_dwordx2 v[13:14], v[13:14]61; GFX8-NEXT: flat_load_dwordx2 v[15:16], v[15:16]62; GFX8-NEXT: s_movk_i32 s0, 0x300063; GFX8-NEXT: v_add_u32_e32 v17, vcc, s0, v364; GFX8-NEXT: v_addc_u32_e32 v18, vcc, 0, v4, vcc65; GFX8-NEXT: flat_load_dwordx2 v[17:18], v[17:18]66; GFX8-NEXT: v_add_u32_e32 v3, vcc, 0x3800, v367; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v4, vcc68; GFX8-NEXT: flat_load_dwordx2 v[3:4], v[3:4]69; GFX8-NEXT: s_waitcnt vmcnt(6)70; GFX8-NEXT: v_add_u32_e32 v0, vcc, v5, v1171; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v6, v12, vcc72; GFX8-NEXT: s_waitcnt vmcnt(5)73; GFX8-NEXT: v_add_u32_e32 v0, vcc, v7, v074; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v8, v5, vcc75; GFX8-NEXT: s_waitcnt vmcnt(4)76; GFX8-NEXT: v_add_u32_e32 v0, vcc, v9, v077; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v10, v5, vcc78; GFX8-NEXT: s_waitcnt vmcnt(3)79; GFX8-NEXT: v_add_u32_e32 v0, vcc, v13, v080; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v14, v5, vcc81; GFX8-NEXT: s_waitcnt vmcnt(2)82; GFX8-NEXT: v_add_u32_e32 v0, vcc, v15, v083; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v16, v5, vcc84; GFX8-NEXT: s_waitcnt vmcnt(1)85; GFX8-NEXT: v_add_u32_e32 v0, vcc, v17, v086; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v18, v5, vcc87; GFX8-NEXT: s_waitcnt vmcnt(0)88; GFX8-NEXT: v_add_u32_e32 v3, vcc, v3, v089; GFX8-NEXT: v_addc_u32_e32 v4, vcc, v4, v5, vcc90; GFX8-NEXT: flat_store_dwordx2 v[1:2], v[3:4]91; GFX8-NEXT: s_endpgm92;93; GFX9-LABEL: clmem_read_simplified:94; GFX9: ; %bb.0: ; %entry95; GFX9-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD096; GFX9-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD197; GFX9-NEXT: s_mov_b32 s38, -198; GFX9-NEXT: s_mov_b32 s39, 0xe0000099; GFX9-NEXT: s_add_u32 s36, s36, s11100; GFX9-NEXT: s_addc_u32 s37, s37, 0101; GFX9-NEXT: s_getpc_b64 s[0:1]102; GFX9-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+4103; GFX9-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+12104; GFX9-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x24105; GFX9-NEXT: v_mov_b32_e32 v31, v0106; GFX9-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0107; GFX9-NEXT: s_mov_b64 s[0:1], s[36:37]108; GFX9-NEXT: s_mov_b64 s[2:3], s[38:39]109; GFX9-NEXT: v_mov_b32_e32 v0, 0110; GFX9-NEXT: s_mov_b32 s32, 0111; GFX9-NEXT: s_waitcnt lgkmcnt(0)112; GFX9-NEXT: s_swappc_b64 s[30:31], s[4:5]113; GFX9-NEXT: v_lshlrev_b32_e32 v1, 7, v0114; GFX9-NEXT: v_and_b32_e32 v18, 0xffff8000, v1115; GFX9-NEXT: v_mov_b32_e32 v1, s35116; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s34, v18117; GFX9-NEXT: v_mov_b32_e32 v3, 3118; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc119; GFX9-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0120; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0121; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc122; GFX9-NEXT: s_movk_i32 s1, 0x2000123; GFX9-NEXT: global_load_dwordx2 v[2:3], v[0:1], off124; GFX9-NEXT: global_load_dwordx2 v[4:5], v[0:1], off offset:2048125; GFX9-NEXT: v_add_co_u32_e32 v6, vcc, s1, v0126; GFX9-NEXT: v_addc_co_u32_e32 v7, vcc, 0, v1, vcc127; GFX9-NEXT: global_load_dwordx2 v[8:9], v[6:7], off offset:-4096128; GFX9-NEXT: s_movk_i32 s0, 0x1000129; GFX9-NEXT: v_add_co_u32_e32 v10, vcc, s0, v0130; GFX9-NEXT: v_addc_co_u32_e32 v11, vcc, 0, v1, vcc131; GFX9-NEXT: global_load_dwordx2 v[12:13], v[10:11], off offset:2048132; GFX9-NEXT: global_load_dwordx2 v[14:15], v[6:7], off133; GFX9-NEXT: global_load_dwordx2 v[16:17], v[6:7], off offset:2048134; GFX9-NEXT: s_movk_i32 s0, 0x3000135; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, s0, v0136; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc137; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off138; GFX9-NEXT: global_load_dwordx2 v[10:11], v[0:1], off offset:2048139; GFX9-NEXT: s_waitcnt vmcnt(6)140; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v4, v2141; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v5, v3, vcc142; GFX9-NEXT: s_waitcnt vmcnt(5)143; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v8, v0144; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v9, v1, vcc145; GFX9-NEXT: s_waitcnt vmcnt(4)146; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v12, v0147; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v13, v1, vcc148; GFX9-NEXT: s_waitcnt vmcnt(3)149; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v14, v0150; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v15, v1, vcc151; GFX9-NEXT: s_waitcnt vmcnt(2)152; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v16, v0153; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v17, v1, vcc154; GFX9-NEXT: s_waitcnt vmcnt(1)155; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v6, v0156; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v7, v1, vcc157; GFX9-NEXT: s_waitcnt vmcnt(0)158; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v10, v0159; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v11, v1, vcc160; GFX9-NEXT: global_store_dwordx2 v18, v[0:1], s[34:35]161; GFX9-NEXT: s_endpgm162;163; GFX10-LABEL: clmem_read_simplified:164; GFX10: ; %bb.0: ; %entry165; GFX10-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD0166; GFX10-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD1167; GFX10-NEXT: s_mov_b32 s38, -1168; GFX10-NEXT: s_mov_b32 s39, 0x31c16000169; GFX10-NEXT: s_add_u32 s36, s36, s11170; GFX10-NEXT: s_addc_u32 s37, s37, 0171; GFX10-NEXT: s_getpc_b64 s[0:1]172; GFX10-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+4173; GFX10-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+12174; GFX10-NEXT: v_mov_b32_e32 v31, v0175; GFX10-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x0176; GFX10-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x24177; GFX10-NEXT: v_mov_b32_e32 v0, 0178; GFX10-NEXT: s_mov_b64 s[0:1], s[36:37]179; GFX10-NEXT: s_mov_b64 s[2:3], s[38:39]180; GFX10-NEXT: s_mov_b32 s32, 0181; GFX10-NEXT: s_waitcnt lgkmcnt(0)182; GFX10-NEXT: s_swappc_b64 s[30:31], s[6:7]183; GFX10-NEXT: v_lshlrev_b32_e32 v1, 7, v0184; GFX10-NEXT: v_mov_b32_e32 v2, 3185; GFX10-NEXT: v_and_b32_e32 v20, 0xffff8000, v1186; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0187; GFX10-NEXT: v_add_co_u32 v1, s0, s34, v20188; GFX10-NEXT: v_add_co_ci_u32_e64 v2, s0, s35, 0, s0189; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0190; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo191; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, v0, 0x1000192; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v1, vcc_lo193; GFX10-NEXT: v_add_co_u32 v8, vcc_lo, v0, 0x2000194; GFX10-NEXT: s_clause 0x1195; GFX10-NEXT: global_load_dwordx2 v[4:5], v[0:1], off196; GFX10-NEXT: global_load_dwordx2 v[6:7], v[2:3], off offset:-2048197; GFX10-NEXT: v_add_co_ci_u32_e32 v9, vcc_lo, 0, v1, vcc_lo198; GFX10-NEXT: s_clause 0x1199; GFX10-NEXT: global_load_dwordx2 v[10:11], v[2:3], off200; GFX10-NEXT: global_load_dwordx2 v[12:13], v[8:9], off offset:-2048201; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, v0, 0x3000202; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v1, vcc_lo203; GFX10-NEXT: s_clause 0x1204; GFX10-NEXT: global_load_dwordx2 v[14:15], v[8:9], off205; GFX10-NEXT: global_load_dwordx2 v[16:17], v[2:3], off offset:-2048206; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, 0x3800, v0207; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo208; GFX10-NEXT: s_clause 0x1209; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off210; GFX10-NEXT: global_load_dwordx2 v[18:19], v[0:1], off211; GFX10-NEXT: s_waitcnt vmcnt(6)212; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v6, v4213; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v7, v5, vcc_lo214; GFX10-NEXT: s_waitcnt vmcnt(5)215; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v10, v0216; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v11, v1, vcc_lo217; GFX10-NEXT: s_waitcnt vmcnt(4)218; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v12, v0219; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v13, v1, vcc_lo220; GFX10-NEXT: s_waitcnt vmcnt(3)221; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v14, v0222; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v15, v1, vcc_lo223; GFX10-NEXT: s_waitcnt vmcnt(2)224; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v16, v0225; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v17, v1, vcc_lo226; GFX10-NEXT: s_waitcnt vmcnt(1)227; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v8, v0228; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v9, v1, vcc_lo229; GFX10-NEXT: s_waitcnt vmcnt(0)230; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v18, v0231; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v19, v1, vcc_lo232; GFX10-NEXT: global_store_dwordx2 v20, v[0:1], s[34:35]233; GFX10-NEXT: s_endpgm234;235; GFX11-LABEL: clmem_read_simplified:236; GFX11: ; %bb.0: ; %entry237; GFX11-NEXT: s_getpc_b64 s[0:1]238; GFX11-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+4239; GFX11-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+12240; GFX11-NEXT: v_dual_mov_b32 v31, v0 :: v_dual_mov_b32 v0, 0241; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x0242; GFX11-NEXT: s_load_b64 s[34:35], s[4:5], 0x24243; GFX11-NEXT: s_mov_b32 s32, 0244; GFX11-NEXT: s_waitcnt lgkmcnt(0)245; GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]246; GFX11-NEXT: v_lshlrev_b32_e32 v1, 7, v0247; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v0248; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)249; GFX11-NEXT: v_and_b32_e32 v16, 0xffff8000, v1250; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v0251; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)252; GFX11-NEXT: v_add_co_u32 v1, s0, s34, v16253; GFX11-NEXT: v_add_co_ci_u32_e64 v2, null, s35, 0, s0254; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)255; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0256; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo257; GFX11-NEXT: s_clause 0x1258; GFX11-NEXT: global_load_b64 v[2:3], v[0:1], off259; GFX11-NEXT: global_load_b64 v[4:5], v[0:1], off offset:2048260; GFX11-NEXT: v_add_co_u32 v6, vcc_lo, v0, 0x2000261; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)262; GFX11-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v1, vcc_lo263; GFX11-NEXT: v_add_co_u32 v8, vcc_lo, 0x1000, v0264; GFX11-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v1, vcc_lo265; GFX11-NEXT: s_clause 0x1266; GFX11-NEXT: global_load_b64 v[10:11], v[6:7], off offset:-4096267; GFX11-NEXT: global_load_b64 v[8:9], v[8:9], off offset:2048268; GFX11-NEXT: v_add_co_u32 v12, vcc_lo, 0x2000, v0269; GFX11-NEXT: global_load_b64 v[6:7], v[6:7], off270; GFX11-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v1, vcc_lo271; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, 0x3000, v0272; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)273; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo274; GFX11-NEXT: s_clause 0x2275; GFX11-NEXT: global_load_b64 v[12:13], v[12:13], off offset:2048276; GFX11-NEXT: global_load_b64 v[14:15], v[0:1], off277; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off offset:2048278; GFX11-NEXT: s_waitcnt vmcnt(6)279; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v4, v2280; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)281; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v5, v3, vcc_lo282; GFX11-NEXT: s_waitcnt vmcnt(5)283; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v10, v2284; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)285; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v11, v3, vcc_lo286; GFX11-NEXT: s_waitcnt vmcnt(4)287; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v8, v2288; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)289; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v9, v3, vcc_lo290; GFX11-NEXT: s_waitcnt vmcnt(3)291; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v6, v2292; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)293; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v7, v3, vcc_lo294; GFX11-NEXT: s_waitcnt vmcnt(2)295; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v12, v2296; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)297; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v13, v3, vcc_lo298; GFX11-NEXT: s_waitcnt vmcnt(1)299; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v14, v2300; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)301; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v15, v3, vcc_lo302; GFX11-NEXT: s_waitcnt vmcnt(0)303; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2304; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)305; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo306; GFX11-NEXT: global_store_b64 v16, v[0:1], s[34:35]307; GFX11-NEXT: s_endpgm308entry:309 %call = tail call i64 @_Z13get_global_idj(i32 0)310 %conv = and i64 %call, 255311 %a0 = shl i64 %call, 7312 %idx.ext11 = and i64 %a0, 4294934528313 %add.ptr12 = getelementptr inbounds i8, ptr addrspace(1) %buffer, i64 %idx.ext11314 315 %addr1 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr12, i64 %conv316 %load1 = load i64, ptr addrspace(1) %addr1, align 8317 %addr2 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 256318 %load2 = load i64, ptr addrspace(1) %addr2, align 8319 %add.1 = add i64 %load2, %load1320 321 %add.ptr8.2 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 512322 %load3 = load i64, ptr addrspace(1) %add.ptr8.2, align 8323 %add.2 = add i64 %load3, %add.1324 %add.ptr8.3 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 768325 %load4 = load i64, ptr addrspace(1) %add.ptr8.3, align 8326 %add.3 = add i64 %load4, %add.2327 328 %add.ptr8.4 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 1024329 %load5 = load i64, ptr addrspace(1) %add.ptr8.4, align 8330 %add.4 = add i64 %load5, %add.3331 %add.ptr8.5 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 1280332 %load6 = load i64, ptr addrspace(1) %add.ptr8.5, align 8333 %add.5 = add i64 %load6, %add.4334 335 %add.ptr8.6 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 1536336 %load7 = load i64, ptr addrspace(1) %add.ptr8.6, align 8337 %add.6 = add i64 %load7, %add.5338 %add.ptr8.7 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 1792339 %load8 = load i64, ptr addrspace(1) %add.ptr8.7, align 8340 %add.7 = add i64 %load8, %add.6341 342 store i64 %add.7, ptr addrspace(1) %add.ptr12, align 8343 ret void344}345 346define hidden amdgpu_kernel void @clmem_read(ptr addrspace(1) %buffer) {347; GFX8-LABEL: clmem_read:348; GFX8: ; %bb.0: ; %entry349; GFX8-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD0350; GFX8-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD1351; GFX8-NEXT: s_mov_b32 s38, -1352; GFX8-NEXT: s_mov_b32 s39, 0xe80000353; GFX8-NEXT: s_add_u32 s36, s36, s11354; GFX8-NEXT: s_addc_u32 s37, s37, 0355; GFX8-NEXT: s_getpc_b64 s[0:1]356; GFX8-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+4357; GFX8-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+12358; GFX8-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x24359; GFX8-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0360; GFX8-NEXT: s_mov_b64 s[0:1], s[36:37]361; GFX8-NEXT: v_mov_b32_e32 v31, v0362; GFX8-NEXT: s_mov_b64 s[2:3], s[38:39]363; GFX8-NEXT: v_mov_b32_e32 v0, 0364; GFX8-NEXT: s_mov_b32 s32, 0365; GFX8-NEXT: s_waitcnt lgkmcnt(0)366; GFX8-NEXT: s_swappc_b64 s[30:31], s[4:5]367; GFX8-NEXT: v_lshlrev_b32_e32 v1, 17, v0368; GFX8-NEXT: v_and_b32_e32 v12, 0xfe000000, v1369; GFX8-NEXT: v_mov_b32_e32 v1, 3370; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0371; GFX8-NEXT: v_or_b32_e32 v0, v12, v0372; GFX8-NEXT: v_mov_b32_e32 v1, s35373; GFX8-NEXT: v_add_u32_e32 v0, vcc, s34, v0374; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc375; GFX8-NEXT: s_movk_i32 s0, 0x5000376; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v0377; GFX8-NEXT: v_mov_b32_e32 v10, 0378; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc379; GFX8-NEXT: v_mov_b32_e32 v11, 0380; GFX8-NEXT: v_mov_b32_e32 v13, 0x7f381; GFX8-NEXT: .LBB1_1: ; %for.cond.preheader382; GFX8-NEXT: ; =>This Loop Header: Depth=1383; GFX8-NEXT: ; Child Loop BB1_2 Depth 2384; GFX8-NEXT: v_mov_b32_e32 v3, v1385; GFX8-NEXT: s_mov_b32 s0, 0386; GFX8-NEXT: v_mov_b32_e32 v2, v0387; GFX8-NEXT: .LBB1_2: ; %for.body388; GFX8-NEXT: ; Parent Loop BB1_1 Depth=1389; GFX8-NEXT: ; => This Inner Loop Header: Depth=2390; GFX8-NEXT: v_add_u32_e32 v4, vcc, 0xffffb000, v2391; GFX8-NEXT: v_addc_u32_e32 v5, vcc, -1, v3, vcc392; GFX8-NEXT: flat_load_dwordx2 v[14:15], v[4:5]393; GFX8-NEXT: v_add_u32_e32 v6, vcc, 0xffffb800, v2394; GFX8-NEXT: v_addc_u32_e32 v7, vcc, -1, v3, vcc395; GFX8-NEXT: flat_load_dwordx2 v[16:17], v[6:7]396; GFX8-NEXT: v_add_u32_e32 v4, vcc, 0xffffc000, v2397; GFX8-NEXT: v_addc_u32_e32 v5, vcc, -1, v3, vcc398; GFX8-NEXT: flat_load_dwordx2 v[18:19], v[4:5]399; GFX8-NEXT: v_add_u32_e32 v6, vcc, 0xffffc800, v2400; GFX8-NEXT: v_addc_u32_e32 v7, vcc, -1, v3, vcc401; GFX8-NEXT: v_add_u32_e32 v4, vcc, 0xffffd000, v2402; GFX8-NEXT: v_addc_u32_e32 v5, vcc, -1, v3, vcc403; GFX8-NEXT: v_add_u32_e32 v20, vcc, 0xffffd800, v2404; GFX8-NEXT: v_addc_u32_e32 v21, vcc, -1, v3, vcc405; GFX8-NEXT: flat_load_dwordx2 v[6:7], v[6:7]406; GFX8-NEXT: v_add_u32_e32 v22, vcc, 0xffffe000, v2407; GFX8-NEXT: v_addc_u32_e32 v23, vcc, -1, v3, vcc408; GFX8-NEXT: flat_load_dwordx2 v[8:9], v[4:5]409; GFX8-NEXT: flat_load_dwordx2 v[4:5], v[20:21]410; GFX8-NEXT: s_addk_i32 s0, 0x2000411; GFX8-NEXT: s_cmp_gt_u32 s0, 0x3fffff412; GFX8-NEXT: s_waitcnt vmcnt(5)413; GFX8-NEXT: v_add_u32_e32 v24, vcc, v14, v10414; GFX8-NEXT: v_addc_u32_e32 v25, vcc, v15, v11, vcc415; GFX8-NEXT: v_add_u32_e32 v10, vcc, 0xffffe800, v2416; GFX8-NEXT: v_addc_u32_e32 v11, vcc, -1, v3, vcc417; GFX8-NEXT: v_add_u32_e32 v14, vcc, 0xfffff000, v2418; GFX8-NEXT: flat_load_dwordx2 v[20:21], v[22:23]419; GFX8-NEXT: flat_load_dwordx2 v[10:11], v[10:11]420; GFX8-NEXT: v_addc_u32_e32 v15, vcc, -1, v3, vcc421; GFX8-NEXT: s_waitcnt vmcnt(6)422; GFX8-NEXT: v_add_u32_e32 v22, vcc, v16, v24423; GFX8-NEXT: v_addc_u32_e32 v23, vcc, v17, v25, vcc424; GFX8-NEXT: v_add_u32_e32 v16, vcc, 0xfffff800, v2425; GFX8-NEXT: flat_load_dwordx2 v[14:15], v[14:15]426; GFX8-NEXT: v_addc_u32_e32 v17, vcc, -1, v3, vcc427; GFX8-NEXT: flat_load_dwordx2 v[16:17], v[16:17]428; GFX8-NEXT: s_waitcnt vmcnt(7)429; GFX8-NEXT: v_add_u32_e32 v22, vcc, v18, v22430; GFX8-NEXT: v_addc_u32_e32 v23, vcc, v19, v23, vcc431; GFX8-NEXT: flat_load_dwordx2 v[18:19], v[2:3]432; GFX8-NEXT: v_add_u32_e32 v2, vcc, 0x10000, v2433; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc434; GFX8-NEXT: s_waitcnt vmcnt(7)435; GFX8-NEXT: v_add_u32_e32 v6, vcc, v6, v22436; GFX8-NEXT: v_addc_u32_e32 v7, vcc, v7, v23, vcc437; GFX8-NEXT: s_waitcnt vmcnt(6)438; GFX8-NEXT: v_add_u32_e32 v6, vcc, v8, v6439; GFX8-NEXT: v_addc_u32_e32 v7, vcc, v9, v7, vcc440; GFX8-NEXT: s_waitcnt vmcnt(5)441; GFX8-NEXT: v_add_u32_e32 v4, vcc, v4, v6442; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v5, v7, vcc443; GFX8-NEXT: s_waitcnt vmcnt(4)444; GFX8-NEXT: v_add_u32_e32 v4, vcc, v20, v4445; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v21, v5, vcc446; GFX8-NEXT: s_waitcnt vmcnt(3)447; GFX8-NEXT: v_add_u32_e32 v4, vcc, v10, v4448; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v11, v5, vcc449; GFX8-NEXT: s_waitcnt vmcnt(2)450; GFX8-NEXT: v_add_u32_e32 v4, vcc, v14, v4451; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v15, v5, vcc452; GFX8-NEXT: s_waitcnt vmcnt(1)453; GFX8-NEXT: v_add_u32_e32 v4, vcc, v16, v4454; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v17, v5, vcc455; GFX8-NEXT: s_waitcnt vmcnt(0)456; GFX8-NEXT: v_add_u32_e32 v10, vcc, v18, v4457; GFX8-NEXT: v_addc_u32_e32 v11, vcc, v19, v5, vcc458; GFX8-NEXT: s_cbranch_scc0 .LBB1_2459; GFX8-NEXT: ; %bb.3: ; %while.cond.loopexit460; GFX8-NEXT: ; in Loop: Header=BB1_1 Depth=1461; GFX8-NEXT: v_subrev_u32_e32 v13, vcc, 1, v13462; GFX8-NEXT: s_and_b64 vcc, exec, vcc463; GFX8-NEXT: s_cbranch_vccz .LBB1_1464; GFX8-NEXT: ; %bb.4: ; %while.end465; GFX8-NEXT: v_mov_b32_e32 v1, s35466; GFX8-NEXT: v_add_u32_e32 v0, vcc, s34, v12467; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc468; GFX8-NEXT: flat_store_dwordx2 v[0:1], v[10:11]469; GFX8-NEXT: s_endpgm470;471; GFX900-LABEL: clmem_read:472; GFX900: ; %bb.0: ; %entry473; GFX900-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD0474; GFX900-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD1475; GFX900-NEXT: s_mov_b32 s38, -1476; GFX900-NEXT: s_mov_b32 s39, 0xe00000477; GFX900-NEXT: s_add_u32 s36, s36, s11478; GFX900-NEXT: s_addc_u32 s37, s37, 0479; GFX900-NEXT: s_getpc_b64 s[0:1]480; GFX900-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+4481; GFX900-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+12482; GFX900-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x24483; GFX900-NEXT: v_mov_b32_e32 v31, v0484; GFX900-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0485; GFX900-NEXT: s_mov_b64 s[0:1], s[36:37]486; GFX900-NEXT: s_mov_b64 s[2:3], s[38:39]487; GFX900-NEXT: v_mov_b32_e32 v0, 0488; GFX900-NEXT: s_mov_b32 s32, 0489; GFX900-NEXT: s_waitcnt lgkmcnt(0)490; GFX900-NEXT: s_swappc_b64 s[30:31], s[4:5]491; GFX900-NEXT: v_and_b32_e32 v1, 0xff, v0492; GFX900-NEXT: v_lshlrev_b32_e32 v0, 17, v0493; GFX900-NEXT: v_and_b32_e32 v6, 0xfe000000, v0494; GFX900-NEXT: v_lshl_or_b32 v0, v1, 3, v6495; GFX900-NEXT: v_mov_b32_e32 v1, s35496; GFX900-NEXT: v_add_co_u32_e32 v0, vcc, s34, v0497; GFX900-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc498; GFX900-NEXT: v_add_co_u32_e32 v0, vcc, 0x5000, v0499; GFX900-NEXT: v_mov_b32_e32 v4, 0500; GFX900-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc501; GFX900-NEXT: v_mov_b32_e32 v5, 0502; GFX900-NEXT: v_mov_b32_e32 v7, 0x7f503; GFX900-NEXT: s_movk_i32 s2, 0xd000504; GFX900-NEXT: s_movk_i32 s3, 0xe000505; GFX900-NEXT: s_movk_i32 s4, 0xf000506; GFX900-NEXT: .LBB1_1: ; %for.cond.preheader507; GFX900-NEXT: ; =>This Loop Header: Depth=1508; GFX900-NEXT: ; Child Loop BB1_2 Depth 2509; GFX900-NEXT: v_mov_b32_e32 v3, v1510; GFX900-NEXT: s_mov_b32 s5, 0511; GFX900-NEXT: v_mov_b32_e32 v2, v0512; GFX900-NEXT: .LBB1_2: ; %for.body513; GFX900-NEXT: ; Parent Loop BB1_1 Depth=1514; GFX900-NEXT: ; => This Inner Loop Header: Depth=2515; GFX900-NEXT: v_add_co_u32_e32 v8, vcc, 0xffffb000, v2516; GFX900-NEXT: v_addc_co_u32_e32 v9, vcc, -1, v3, vcc517; GFX900-NEXT: global_load_dwordx2 v[8:9], v[8:9], off518; GFX900-NEXT: v_add_co_u32_e32 v14, vcc, 0xffffc000, v2519; GFX900-NEXT: v_addc_co_u32_e32 v15, vcc, -1, v3, vcc520; GFX900-NEXT: global_load_dwordx2 v[18:19], v[14:15], off offset:-2048521; GFX900-NEXT: global_load_dwordx2 v[20:21], v[14:15], off522; GFX900-NEXT: v_add_co_u32_e32 v16, vcc, s2, v2523; GFX900-NEXT: v_addc_co_u32_e32 v17, vcc, -1, v3, vcc524; GFX900-NEXT: v_add_co_u32_e32 v14, vcc, s3, v2525; GFX900-NEXT: global_load_dwordx2 v[16:17], v[16:17], off offset:-2048526; GFX900-NEXT: v_addc_co_u32_e32 v15, vcc, -1, v3, vcc527; GFX900-NEXT: global_load_dwordx2 v[10:11], v[2:3], off offset:-4096528; GFX900-NEXT: global_load_dwordx2 v[12:13], v[2:3], off offset:-2048529; GFX900-NEXT: s_addk_i32 s5, 0x2000530; GFX900-NEXT: s_cmp_gt_u32 s5, 0x3fffff531; GFX900-NEXT: s_waitcnt vmcnt(5)532; GFX900-NEXT: v_add_co_u32_e32 v22, vcc, v8, v4533; GFX900-NEXT: v_addc_co_u32_e32 v5, vcc, v9, v5, vcc534; GFX900-NEXT: global_load_dwordx2 v[8:9], v[14:15], off offset:-4096535; GFX900-NEXT: s_waitcnt vmcnt(5)536; GFX900-NEXT: v_add_co_u32_e64 v24, s[0:1], v18, v22537; GFX900-NEXT: v_addc_co_u32_e64 v25, s[0:1], v19, v5, s[0:1]538; GFX900-NEXT: global_load_dwordx2 v[18:19], v[14:15], off offset:-2048539; GFX900-NEXT: global_load_dwordx2 v[22:23], v[14:15], off540; GFX900-NEXT: v_add_co_u32_e32 v4, vcc, s4, v2541; GFX900-NEXT: v_addc_co_u32_e32 v5, vcc, -1, v3, vcc542; GFX900-NEXT: global_load_dwordx2 v[4:5], v[4:5], off offset:-2048543; GFX900-NEXT: s_waitcnt vmcnt(7)544; GFX900-NEXT: v_add_co_u32_e32 v20, vcc, v20, v24545; GFX900-NEXT: global_load_dwordx2 v[14:15], v[2:3], off546; GFX900-NEXT: v_addc_co_u32_e32 v21, vcc, v21, v25, vcc547; GFX900-NEXT: v_add_co_u32_e32 v2, vcc, 0x10000, v2548; GFX900-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc549; GFX900-NEXT: s_waitcnt vmcnt(7)550; GFX900-NEXT: v_add_co_u32_e32 v16, vcc, v16, v20551; GFX900-NEXT: v_addc_co_u32_e32 v17, vcc, v17, v21, vcc552; GFX900-NEXT: s_waitcnt vmcnt(4)553; GFX900-NEXT: v_add_co_u32_e32 v8, vcc, v8, v16554; GFX900-NEXT: v_addc_co_u32_e32 v9, vcc, v9, v17, vcc555; GFX900-NEXT: s_waitcnt vmcnt(3)556; GFX900-NEXT: v_add_co_u32_e32 v8, vcc, v18, v8557; GFX900-NEXT: v_addc_co_u32_e32 v9, vcc, v19, v9, vcc558; GFX900-NEXT: s_waitcnt vmcnt(2)559; GFX900-NEXT: v_add_co_u32_e32 v8, vcc, v22, v8560; GFX900-NEXT: v_addc_co_u32_e32 v9, vcc, v23, v9, vcc561; GFX900-NEXT: s_waitcnt vmcnt(1)562; GFX900-NEXT: v_add_co_u32_e32 v4, vcc, v4, v8563; GFX900-NEXT: v_addc_co_u32_e32 v5, vcc, v5, v9, vcc564; GFX900-NEXT: v_add_co_u32_e32 v4, vcc, v10, v4565; GFX900-NEXT: v_addc_co_u32_e32 v5, vcc, v11, v5, vcc566; GFX900-NEXT: v_add_co_u32_e32 v4, vcc, v12, v4567; GFX900-NEXT: v_addc_co_u32_e32 v5, vcc, v13, v5, vcc568; GFX900-NEXT: s_waitcnt vmcnt(0)569; GFX900-NEXT: v_add_co_u32_e32 v4, vcc, v14, v4570; GFX900-NEXT: v_addc_co_u32_e32 v5, vcc, v15, v5, vcc571; GFX900-NEXT: s_cbranch_scc0 .LBB1_2572; GFX900-NEXT: ; %bb.3: ; %while.cond.loopexit573; GFX900-NEXT: ; in Loop: Header=BB1_1 Depth=1574; GFX900-NEXT: v_subrev_co_u32_e32 v7, vcc, 1, v7575; GFX900-NEXT: s_and_b64 vcc, exec, vcc576; GFX900-NEXT: s_cbranch_vccz .LBB1_1577; GFX900-NEXT: ; %bb.4: ; %while.end578; GFX900-NEXT: v_mov_b32_e32 v1, s35579; GFX900-NEXT: v_add_co_u32_e32 v0, vcc, s34, v6580; GFX900-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc581; GFX900-NEXT: global_store_dwordx2 v[0:1], v[4:5], off582; GFX900-NEXT: s_endpgm583;584; GFX10-LABEL: clmem_read:585; GFX10: ; %bb.0: ; %entry586; GFX10-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD0587; GFX10-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD1588; GFX10-NEXT: s_mov_b32 s38, -1589; GFX10-NEXT: s_mov_b32 s39, 0x31c16000590; GFX10-NEXT: s_add_u32 s36, s36, s11591; GFX10-NEXT: s_addc_u32 s37, s37, 0592; GFX10-NEXT: s_getpc_b64 s[0:1]593; GFX10-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+4594; GFX10-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+12595; GFX10-NEXT: v_mov_b32_e32 v31, v0596; GFX10-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x0597; GFX10-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x24598; GFX10-NEXT: v_mov_b32_e32 v0, 0599; GFX10-NEXT: s_mov_b64 s[0:1], s[36:37]600; GFX10-NEXT: s_mov_b64 s[2:3], s[38:39]601; GFX10-NEXT: s_mov_b32 s32, 0602; GFX10-NEXT: s_waitcnt lgkmcnt(0)603; GFX10-NEXT: s_swappc_b64 s[30:31], s[6:7]604; GFX10-NEXT: v_lshlrev_b32_e32 v1, 17, v0605; GFX10-NEXT: v_and_b32_e32 v0, 0xff, v0606; GFX10-NEXT: v_mov_b32_e32 v2, 0607; GFX10-NEXT: v_mov_b32_e32 v3, 0608; GFX10-NEXT: v_mov_b32_e32 v7, 0x7f609; GFX10-NEXT: v_and_b32_e32 v6, 0xfe000000, v1610; GFX10-NEXT: v_lshl_or_b32 v0, v0, 3, v6611; GFX10-NEXT: v_add_co_u32 v0, s0, s34, v0612; GFX10-NEXT: v_add_co_ci_u32_e64 v1, s0, s35, 0, s0613; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, 0x5000, v0614; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo615; GFX10-NEXT: .LBB1_1: ; %for.cond.preheader616; GFX10-NEXT: ; =>This Loop Header: Depth=1617; GFX10-NEXT: ; Child Loop BB1_2 Depth 2618; GFX10-NEXT: v_mov_b32_e32 v5, v1619; GFX10-NEXT: v_mov_b32_e32 v4, v0620; GFX10-NEXT: s_mov_b32 s1, 0621; GFX10-NEXT: .LBB1_2: ; %for.body622; GFX10-NEXT: ; Parent Loop BB1_1 Depth=1623; GFX10-NEXT: ; => This Inner Loop Header: Depth=2624; GFX10-NEXT: v_add_co_u32 v8, vcc_lo, v4, 0xffffb800625; GFX10-NEXT: v_add_co_ci_u32_e32 v9, vcc_lo, -1, v5, vcc_lo626; GFX10-NEXT: v_add_co_u32 v10, vcc_lo, v4, 0xffffc800627; GFX10-NEXT: v_add_co_ci_u32_e32 v11, vcc_lo, -1, v5, vcc_lo628; GFX10-NEXT: v_add_co_u32 v14, vcc_lo, v4, 0xffffd800629; GFX10-NEXT: v_add_co_ci_u32_e32 v15, vcc_lo, -1, v5, vcc_lo630; GFX10-NEXT: v_add_co_u32 v18, vcc_lo, v4, 0xffffe800631; GFX10-NEXT: s_clause 0x2632; GFX10-NEXT: global_load_dwordx2 v[12:13], v[8:9], off offset:-2048633; GFX10-NEXT: global_load_dwordx2 v[16:17], v[10:11], off offset:-2048634; GFX10-NEXT: global_load_dwordx2 v[20:21], v[14:15], off offset:-2048635; GFX10-NEXT: v_add_co_ci_u32_e32 v19, vcc_lo, -1, v5, vcc_lo636; GFX10-NEXT: v_add_co_u32 v22, vcc_lo, 0xfffff000, v4637; GFX10-NEXT: v_add_co_ci_u32_e32 v23, vcc_lo, -1, v5, vcc_lo638; GFX10-NEXT: s_clause 0x7639; GFX10-NEXT: global_load_dwordx2 v[24:25], v[18:19], off offset:-2048640; GFX10-NEXT: global_load_dwordx2 v[8:9], v[8:9], off641; GFX10-NEXT: global_load_dwordx2 v[10:11], v[10:11], off642; GFX10-NEXT: global_load_dwordx2 v[14:15], v[14:15], off643; GFX10-NEXT: global_load_dwordx2 v[26:27], v[18:19], off644; GFX10-NEXT: global_load_dwordx2 v[28:29], v[22:23], off645; GFX10-NEXT: global_load_dwordx2 v[30:31], v[4:5], off offset:-2048646; GFX10-NEXT: global_load_dwordx2 v[32:33], v[4:5], off647; GFX10-NEXT: v_add_co_u32 v4, vcc_lo, 0x10000, v4648; GFX10-NEXT: v_add_co_ci_u32_e32 v5, vcc_lo, 0, v5, vcc_lo649; GFX10-NEXT: s_addk_i32 s1, 0x2000650; GFX10-NEXT: s_cmp_gt_u32 s1, 0x3fffff651; GFX10-NEXT: s_waitcnt vmcnt(10)652; GFX10-NEXT: v_add_co_u32 v2, s0, v12, v2653; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v13, v3, s0654; GFX10-NEXT: s_waitcnt vmcnt(6)655; GFX10-NEXT: v_add_co_u32 v2, s0, v8, v2656; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v9, v3, s0657; GFX10-NEXT: v_add_co_u32 v2, s0, v16, v2658; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v17, v3, s0659; GFX10-NEXT: s_waitcnt vmcnt(5)660; GFX10-NEXT: v_add_co_u32 v2, s0, v10, v2661; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v11, v3, s0662; GFX10-NEXT: v_add_co_u32 v2, s0, v20, v2663; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v21, v3, s0664; GFX10-NEXT: s_waitcnt vmcnt(4)665; GFX10-NEXT: v_add_co_u32 v2, s0, v14, v2666; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v15, v3, s0667; GFX10-NEXT: v_add_co_u32 v2, s0, v24, v2668; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v25, v3, s0669; GFX10-NEXT: s_waitcnt vmcnt(3)670; GFX10-NEXT: v_add_co_u32 v2, s0, v26, v2671; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v27, v3, s0672; GFX10-NEXT: s_waitcnt vmcnt(2)673; GFX10-NEXT: v_add_co_u32 v2, s0, v28, v2674; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v29, v3, s0675; GFX10-NEXT: s_waitcnt vmcnt(1)676; GFX10-NEXT: v_add_co_u32 v2, s0, v30, v2677; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s0, v31, v3, s0678; GFX10-NEXT: s_waitcnt vmcnt(0)679; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, v32, v2680; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, v33, v3, vcc_lo681; GFX10-NEXT: s_cbranch_scc0 .LBB1_2682; GFX10-NEXT: ; %bb.3: ; %while.cond.loopexit683; GFX10-NEXT: ; in Loop: Header=BB1_1 Depth=1684; GFX10-NEXT: v_sub_co_u32 v7, s0, v7, 1685; GFX10-NEXT: s_and_b32 vcc_lo, exec_lo, s0686; GFX10-NEXT: s_cbranch_vccz .LBB1_1687; GFX10-NEXT: ; %bb.4: ; %while.end688; GFX10-NEXT: v_add_co_u32 v0, s0, s34, v6689; GFX10-NEXT: v_add_co_ci_u32_e64 v1, s0, s35, 0, s0690; GFX10-NEXT: global_store_dwordx2 v[0:1], v[2:3], off691; GFX10-NEXT: s_endpgm692;693; GFX90A-LABEL: clmem_read:694; GFX90A: ; %bb.0: ; %entry695; GFX90A-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD0696; GFX90A-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD1697; GFX90A-NEXT: s_mov_b32 s38, -1698; GFX90A-NEXT: s_mov_b32 s39, 0xe00000699; GFX90A-NEXT: s_add_u32 s36, s36, s11700; GFX90A-NEXT: s_addc_u32 s37, s37, 0701; GFX90A-NEXT: s_getpc_b64 s[0:1]702; GFX90A-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+4703; GFX90A-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+12704; GFX90A-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x24705; GFX90A-NEXT: v_mov_b32_e32 v31, v0706; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0707; GFX90A-NEXT: s_mov_b64 s[0:1], s[36:37]708; GFX90A-NEXT: s_mov_b64 s[2:3], s[38:39]709; GFX90A-NEXT: v_mov_b32_e32 v0, 0710; GFX90A-NEXT: s_mov_b32 s32, 0711; GFX90A-NEXT: s_waitcnt lgkmcnt(0)712; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]713; GFX90A-NEXT: v_and_b32_e32 v1, 0xff, v0714; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 17, v0715; GFX90A-NEXT: v_and_b32_e32 v0, 0xfe000000, v0716; GFX90A-NEXT: v_lshl_or_b32 v1, v1, 3, v0717; GFX90A-NEXT: v_mov_b32_e32 v2, s35718; GFX90A-NEXT: v_add_co_u32_e32 v1, vcc, s34, v1719; GFX90A-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v2, vcc720; GFX90A-NEXT: v_add_co_u32_e32 v2, vcc, 0x5000, v1721; GFX90A-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc722; GFX90A-NEXT: v_mov_b32_e32 v1, 0x7f723; GFX90A-NEXT: v_pk_mov_b32 v[4:5], 0, 0724; GFX90A-NEXT: s_movk_i32 s0, 0xd000725; GFX90A-NEXT: s_movk_i32 s1, 0xe000726; GFX90A-NEXT: s_movk_i32 s2, 0xf000727; GFX90A-NEXT: .LBB1_1: ; %for.cond.preheader728; GFX90A-NEXT: ; =>This Loop Header: Depth=1729; GFX90A-NEXT: ; Child Loop BB1_2 Depth 2730; GFX90A-NEXT: s_mov_b32 s3, 0731; GFX90A-NEXT: v_pk_mov_b32 v[6:7], v[2:3], v[2:3] op_sel:[0,1]732; GFX90A-NEXT: .LBB1_2: ; %for.body733; GFX90A-NEXT: ; Parent Loop BB1_1 Depth=1734; GFX90A-NEXT: ; => This Inner Loop Header: Depth=2735; GFX90A-NEXT: v_add_co_u32_e32 v12, vcc, 0xffffb000, v6736; GFX90A-NEXT: v_addc_co_u32_e32 v13, vcc, -1, v7, vcc737; GFX90A-NEXT: global_load_dwordx2 v[12:13], v[12:13], off738; GFX90A-NEXT: v_add_co_u32_e32 v14, vcc, 0xffffc000, v6739; GFX90A-NEXT: v_addc_co_u32_e32 v15, vcc, -1, v7, vcc740; GFX90A-NEXT: global_load_dwordx2 v[18:19], v[14:15], off offset:-2048741; GFX90A-NEXT: global_load_dwordx2 v[20:21], v[14:15], off742; GFX90A-NEXT: v_add_co_u32_e32 v16, vcc, s0, v6743; GFX90A-NEXT: v_addc_co_u32_e32 v17, vcc, -1, v7, vcc744; GFX90A-NEXT: global_load_dwordx2 v[16:17], v[16:17], off offset:-2048745; GFX90A-NEXT: v_add_co_u32_e32 v14, vcc, s1, v6746; GFX90A-NEXT: v_addc_co_u32_e32 v15, vcc, -1, v7, vcc747; GFX90A-NEXT: global_load_dwordx2 v[24:25], v[14:15], off offset:-4096748; GFX90A-NEXT: global_load_dwordx2 v[26:27], v[14:15], off offset:-2048749; GFX90A-NEXT: global_load_dwordx2 v[28:29], v[14:15], off750; GFX90A-NEXT: v_add_co_u32_e32 v22, vcc, s2, v6751; GFX90A-NEXT: v_addc_co_u32_e32 v23, vcc, -1, v7, vcc752; GFX90A-NEXT: global_load_dwordx2 v[14:15], v[22:23], off offset:-2048753; GFX90A-NEXT: global_load_dwordx2 v[30:31], v[6:7], off754; GFX90A-NEXT: global_load_dwordx2 v[8:9], v[6:7], off offset:-4096755; GFX90A-NEXT: global_load_dwordx2 v[10:11], v[6:7], off offset:-2048756; GFX90A-NEXT: v_add_co_u32_e32 v6, vcc, 0x10000, v6757; GFX90A-NEXT: v_addc_co_u32_e32 v7, vcc, 0, v7, vcc758; GFX90A-NEXT: s_addk_i32 s3, 0x2000759; GFX90A-NEXT: s_cmp_gt_u32 s3, 0x3fffff760; GFX90A-NEXT: s_waitcnt vmcnt(10)761; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v12, v4762; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v13, v5, vcc763; GFX90A-NEXT: s_waitcnt vmcnt(9)764; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v18, v4765; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v19, v5, vcc766; GFX90A-NEXT: s_waitcnt vmcnt(8)767; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v20, v4768; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v21, v5, vcc769; GFX90A-NEXT: s_waitcnt vmcnt(7)770; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v16, v4771; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v17, v5, vcc772; GFX90A-NEXT: s_waitcnt vmcnt(6)773; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v24, v4774; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v25, v5, vcc775; GFX90A-NEXT: s_waitcnt vmcnt(5)776; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v26, v4777; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v27, v5, vcc778; GFX90A-NEXT: s_waitcnt vmcnt(4)779; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v28, v4780; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v29, v5, vcc781; GFX90A-NEXT: s_waitcnt vmcnt(3)782; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v14, v4783; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v15, v5, vcc784; GFX90A-NEXT: s_waitcnt vmcnt(1)785; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v8, v4786; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v9, v5, vcc787; GFX90A-NEXT: s_waitcnt vmcnt(0)788; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v10, v4789; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v11, v5, vcc790; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, v30, v4791; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, v31, v5, vcc792; GFX90A-NEXT: s_cbranch_scc0 .LBB1_2793; GFX90A-NEXT: ; %bb.3: ; %while.cond.loopexit794; GFX90A-NEXT: ; in Loop: Header=BB1_1 Depth=1795; GFX90A-NEXT: v_subrev_co_u32_e32 v1, vcc, 1, v1796; GFX90A-NEXT: s_and_b64 vcc, exec, vcc797; GFX90A-NEXT: s_cbranch_vccz .LBB1_1798; GFX90A-NEXT: ; %bb.4: ; %while.end799; GFX90A-NEXT: v_mov_b32_e32 v1, s35800; GFX90A-NEXT: v_add_co_u32_e32 v0, vcc, s34, v0801; GFX90A-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc802; GFX90A-NEXT: global_store_dwordx2 v[0:1], v[4:5], off803; GFX90A-NEXT: s_endpgm804;805; GFX11-LABEL: clmem_read:806; GFX11: ; %bb.0: ; %entry807; GFX11-NEXT: s_getpc_b64 s[0:1]808; GFX11-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+4809; GFX11-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+12810; GFX11-NEXT: v_dual_mov_b32 v31, v0 :: v_dual_mov_b32 v0, 0811; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x0812; GFX11-NEXT: s_load_b64 s[34:35], s[4:5], 0x24813; GFX11-NEXT: s_mov_b32 s32, 0814; GFX11-NEXT: s_waitcnt lgkmcnt(0)815; GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]816; GFX11-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_lshlrev_b32 v1, 17, v0817; GFX11-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0xff, v0818; GFX11-NEXT: v_mov_b32_e32 v7, 0x7f819; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)820; GFX11-NEXT: v_and_b32_e32 v6, 0xfe000000, v1821; GFX11-NEXT: v_lshl_or_b32 v0, v0, 3, v6822; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)823; GFX11-NEXT: v_add_co_u32 v0, s0, s34, v0824; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, s35, 0, s0825; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)826; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, 0x5000, v0827; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo828; GFX11-NEXT: .LBB1_1: ; %for.cond.preheader829; GFX11-NEXT: ; =>This Loop Header: Depth=1830; GFX11-NEXT: ; Child Loop BB1_2 Depth 2831; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)832; GFX11-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0833; GFX11-NEXT: s_mov_b32 s1, 0834; GFX11-NEXT: .LBB1_2: ; %for.body835; GFX11-NEXT: ; Parent Loop BB1_1 Depth=1836; GFX11-NEXT: ; => This Inner Loop Header: Depth=2837; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)838; GFX11-NEXT: v_add_co_u32 v8, vcc_lo, v4, 0xffffc000839; GFX11-NEXT: v_add_co_ci_u32_e64 v9, null, -1, v5, vcc_lo840; GFX11-NEXT: v_add_co_u32 v10, vcc_lo, 0xffffc000, v4841; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)842; GFX11-NEXT: v_add_co_ci_u32_e64 v11, null, -1, v5, vcc_lo843; GFX11-NEXT: global_load_b64 v[14:15], v[8:9], off offset:-4096844; GFX11-NEXT: v_add_co_u32 v12, vcc_lo, 0xffffd000, v4845; GFX11-NEXT: v_add_co_ci_u32_e64 v13, null, -1, v5, vcc_lo846; GFX11-NEXT: v_add_co_u32 v16, vcc_lo, v4, 0xffffe000847; GFX11-NEXT: global_load_b64 v[10:11], v[10:11], off offset:-2048848; GFX11-NEXT: v_add_co_ci_u32_e64 v17, null, -1, v5, vcc_lo849; GFX11-NEXT: global_load_b64 v[12:13], v[12:13], off offset:-2048850; GFX11-NEXT: v_add_co_u32 v18, vcc_lo, 0xffffe000, v4851; GFX11-NEXT: s_clause 0x1852; GFX11-NEXT: global_load_b64 v[20:21], v[16:17], off offset:-4096853; GFX11-NEXT: global_load_b64 v[8:9], v[8:9], off854; GFX11-NEXT: v_add_co_ci_u32_e64 v19, null, -1, v5, vcc_lo855; GFX11-NEXT: v_add_co_u32 v22, vcc_lo, 0xfffff000, v4856; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)857; GFX11-NEXT: v_add_co_ci_u32_e64 v23, null, -1, v5, vcc_lo858; GFX11-NEXT: s_clause 0x5859; GFX11-NEXT: global_load_b64 v[18:19], v[18:19], off offset:-2048860; GFX11-NEXT: global_load_b64 v[16:17], v[16:17], off861; GFX11-NEXT: global_load_b64 v[22:23], v[22:23], off offset:-2048862; GFX11-NEXT: global_load_b64 v[24:25], v[4:5], off offset:-4096863; GFX11-NEXT: global_load_b64 v[26:27], v[4:5], off offset:-2048864; GFX11-NEXT: global_load_b64 v[28:29], v[4:5], off865; GFX11-NEXT: v_add_co_u32 v4, vcc_lo, 0x10000, v4866; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)867; GFX11-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo868; GFX11-NEXT: s_addk_i32 s1, 0x2000869; GFX11-NEXT: s_cmp_gt_u32 s1, 0x3fffff870; GFX11-NEXT: s_waitcnt vmcnt(10)871; GFX11-NEXT: v_add_co_u32 v2, s0, v14, v2872; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)873; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v15, v3, s0874; GFX11-NEXT: s_waitcnt vmcnt(9)875; GFX11-NEXT: v_add_co_u32 v2, s0, v10, v2876; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)877; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v11, v3, s0878; GFX11-NEXT: s_waitcnt vmcnt(6)879; GFX11-NEXT: v_add_co_u32 v2, s0, v8, v2880; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)881; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v9, v3, s0882; GFX11-NEXT: v_add_co_u32 v2, s0, v12, v2883; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)884; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v13, v3, s0885; GFX11-NEXT: v_add_co_u32 v2, s0, v20, v2886; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)887; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v21, v3, s0888; GFX11-NEXT: s_waitcnt vmcnt(5)889; GFX11-NEXT: v_add_co_u32 v2, s0, v18, v2890; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)891; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v19, v3, s0892; GFX11-NEXT: s_waitcnt vmcnt(4)893; GFX11-NEXT: v_add_co_u32 v2, s0, v16, v2894; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)895; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v17, v3, s0896; GFX11-NEXT: s_waitcnt vmcnt(3)897; GFX11-NEXT: v_add_co_u32 v2, s0, v22, v2898; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)899; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v23, v3, s0900; GFX11-NEXT: s_waitcnt vmcnt(2)901; GFX11-NEXT: v_add_co_u32 v2, s0, v24, v2902; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)903; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v25, v3, s0904; GFX11-NEXT: s_waitcnt vmcnt(1)905; GFX11-NEXT: v_add_co_u32 v2, s0, v26, v2906; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)907; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v27, v3, s0908; GFX11-NEXT: s_waitcnt vmcnt(0)909; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v28, v2910; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)911; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v29, v3, vcc_lo912; GFX11-NEXT: s_cbranch_scc0 .LBB1_2913; GFX11-NEXT: ; %bb.3: ; %while.cond.loopexit914; GFX11-NEXT: ; in Loop: Header=BB1_1 Depth=1915; GFX11-NEXT: v_sub_co_u32 v7, s0, v7, 1916; GFX11-NEXT: s_and_b32 vcc_lo, exec_lo, s0917; GFX11-NEXT: s_cbranch_vccz .LBB1_1918; GFX11-NEXT: ; %bb.4: ; %while.end919; GFX11-NEXT: v_add_co_u32 v0, s0, s34, v6920; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)921; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, s35, 0, s0922; GFX11-NEXT: global_store_b64 v[0:1], v[2:3], off923; GFX11-NEXT: s_endpgm924entry:925 %call = tail call i64 @_Z13get_global_idj(i32 0)926 %conv = and i64 %call, 255927 %a0 = shl i64 %call, 17928 %idx.ext11 = and i64 %a0, 4261412864929 %add.ptr12 = getelementptr inbounds i8, ptr addrspace(1) %buffer, i64 %idx.ext11930 %add.ptr6 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr12, i64 %conv931 br label %for.cond.preheader932 933while.cond.loopexit: ; preds = %for.body934 %dec = add nsw i32 %dec31, -1935 %tobool = icmp eq i32 %dec31, 0936 br i1 %tobool, label %while.end, label %for.cond.preheader937 938for.cond.preheader: ; preds = %entry, %while.cond.loopexit939 %dec31 = phi i32 [ 127, %entry ], [ %dec, %while.cond.loopexit ]940 %sum.030 = phi i64 [ 0, %entry ], [ %add.10, %while.cond.loopexit ]941 br label %for.body942 943for.body: ; preds = %for.body, %for.cond.preheader944 %block.029 = phi i32 [ 0, %for.cond.preheader ], [ %add9.31, %for.body ]945 %sum.128 = phi i64 [ %sum.030, %for.cond.preheader ], [ %add.10, %for.body ]946 %conv3 = zext i32 %block.029 to i64947 %add.ptr8 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3948 %load1 = load i64, ptr addrspace(1) %add.ptr8, align 8949 %add = add i64 %load1, %sum.128950 951 %add9 = or disjoint i32 %block.029, 256952 %conv3.1 = zext i32 %add9 to i64953 %add.ptr8.1 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.1954 %load2 = load i64, ptr addrspace(1) %add.ptr8.1, align 8955 %add.1 = add i64 %load2, %add956 957 %add9.1 = or disjoint i32 %block.029, 512958 %conv3.2 = zext i32 %add9.1 to i64959 %add.ptr8.2 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.2960 %l3 = load i64, ptr addrspace(1) %add.ptr8.2, align 8961 %add.2 = add i64 %l3, %add.1962 963 %add9.2 = or disjoint i32 %block.029, 768964 %conv3.3 = zext i32 %add9.2 to i64965 %add.ptr8.3 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.3966 %l4 = load i64, ptr addrspace(1) %add.ptr8.3, align 8967 %add.3 = add i64 %l4, %add.2968 969 %add9.3 = or disjoint i32 %block.029, 1024970 %conv3.4 = zext i32 %add9.3 to i64971 %add.ptr8.4 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.4972 %l5 = load i64, ptr addrspace(1) %add.ptr8.4, align 8973 %add.4 = add i64 %l5, %add.3974 975 %add9.4 = or disjoint i32 %block.029, 1280976 %conv3.5 = zext i32 %add9.4 to i64977 %add.ptr8.5 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.5978 %l6 = load i64, ptr addrspace(1) %add.ptr8.5, align 8979 %add.5 = add i64 %l6, %add.4980 981 %add9.5 = or disjoint i32 %block.029, 1536982 %conv3.6 = zext i32 %add9.5 to i64983 %add.ptr8.6 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.6984 %load7 = load i64, ptr addrspace(1) %add.ptr8.6, align 8985 %add.6 = add i64 %load7, %add.5986 987 %add9.6 = or disjoint i32 %block.029, 1792988 %conv3.7 = zext i32 %add9.6 to i64989 %add.ptr8.7 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.7990 %load8 = load i64, ptr addrspace(1) %add.ptr8.7, align 8991 %add.7 = add i64 %load8, %add.6992 993 %add9.7 = or disjoint i32 %block.029, 2048994 %conv3.8 = zext i32 %add9.7 to i64995 %add.ptr8.8 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.8996 %load9 = load i64, ptr addrspace(1) %add.ptr8.8, align 8997 %add.8 = add i64 %load9, %add.7998 999 %add9.8 = or disjoint i32 %block.029, 23041000 %conv3.9 = zext i32 %add9.8 to i641001 %add.ptr8.9 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.91002 %load10 = load i64, ptr addrspace(1) %add.ptr8.9, align 81003 %add.9 = add i64 %load10, %add.81004 1005 %add9.9 = or disjoint i32 %block.029, 25601006 %conv3.10 = zext i32 %add9.9 to i641007 %add.ptr8.10 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr6, i64 %conv3.101008 %load11 = load i64, ptr addrspace(1) %add.ptr8.10, align 81009 %add.10 = add i64 %load11, %add.91010 1011 %add9.31 = add nuw nsw i32 %block.029, 81921012 %cmp.31 = icmp ult i32 %add9.31, 41943041013 br i1 %cmp.31, label %for.body, label %while.cond.loopexit1014 1015while.end: ; preds = %while.cond.loopexit1016 store i64 %add.10, ptr addrspace(1) %add.ptr12, align 81017 ret void1018}1019 1020; using 32bit address.1021define amdgpu_kernel void @Address32(ptr addrspace(1) %buffer) {1022; GFX8-LABEL: Address32:1023; GFX8: ; %bb.0: ; %entry1024; GFX8-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01025; GFX8-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11026; GFX8-NEXT: s_mov_b32 s38, -11027; GFX8-NEXT: s_mov_b32 s39, 0xe800001028; GFX8-NEXT: s_add_u32 s36, s36, s111029; GFX8-NEXT: s_addc_u32 s37, s37, 01030; GFX8-NEXT: s_getpc_b64 s[0:1]1031; GFX8-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41032; GFX8-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121033; GFX8-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241034; GFX8-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x01035; GFX8-NEXT: s_mov_b64 s[0:1], s[36:37]1036; GFX8-NEXT: v_mov_b32_e32 v31, v01037; GFX8-NEXT: s_mov_b64 s[2:3], s[38:39]1038; GFX8-NEXT: v_mov_b32_e32 v0, 01039; GFX8-NEXT: s_mov_b32 s32, 01040; GFX8-NEXT: s_waitcnt lgkmcnt(0)1041; GFX8-NEXT: s_swappc_b64 s[30:31], s[4:5]1042; GFX8-NEXT: v_lshlrev_b32_e32 v1, 7, v01043; GFX8-NEXT: v_and_b32_e32 v1, 0xffff8000, v11044; GFX8-NEXT: v_mov_b32_e32 v2, s351045; GFX8-NEXT: v_add_u32_e32 v1, vcc, s34, v11046; GFX8-NEXT: v_mov_b32_e32 v3, 21047; GFX8-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc1048; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01049; GFX8-NEXT: v_add_u32_e32 v3, vcc, v1, v01050; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v2, vcc1051; GFX8-NEXT: s_movk_i32 s0, 0x4001052; GFX8-NEXT: v_add_u32_e32 v5, vcc, s0, v31053; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v4, vcc1054; GFX8-NEXT: s_movk_i32 s0, 0x8001055; GFX8-NEXT: v_add_u32_e32 v7, vcc, s0, v31056; GFX8-NEXT: v_addc_u32_e32 v8, vcc, 0, v4, vcc1057; GFX8-NEXT: s_movk_i32 s0, 0xc001058; GFX8-NEXT: v_add_u32_e32 v9, vcc, s0, v31059; GFX8-NEXT: v_addc_u32_e32 v10, vcc, 0, v4, vcc1060; GFX8-NEXT: s_movk_i32 s0, 0x10001061; GFX8-NEXT: v_add_u32_e32 v11, vcc, s0, v31062; GFX8-NEXT: v_addc_u32_e32 v12, vcc, 0, v4, vcc1063; GFX8-NEXT: s_movk_i32 s0, 0x14001064; GFX8-NEXT: v_add_u32_e32 v13, vcc, s0, v31065; GFX8-NEXT: v_addc_u32_e32 v14, vcc, 0, v4, vcc1066; GFX8-NEXT: s_movk_i32 s0, 0x18001067; GFX8-NEXT: v_add_u32_e32 v15, vcc, s0, v31068; GFX8-NEXT: v_addc_u32_e32 v16, vcc, 0, v4, vcc1069; GFX8-NEXT: s_movk_i32 s0, 0x1c001070; GFX8-NEXT: v_add_u32_e32 v17, vcc, s0, v31071; GFX8-NEXT: v_addc_u32_e32 v18, vcc, 0, v4, vcc1072; GFX8-NEXT: s_movk_i32 s0, 0x20001073; GFX8-NEXT: flat_load_dword v0, v[3:4]1074; GFX8-NEXT: flat_load_dword v19, v[5:6]1075; GFX8-NEXT: flat_load_dword v7, v[7:8]1076; GFX8-NEXT: flat_load_dword v8, v[9:10]1077; GFX8-NEXT: flat_load_dword v9, v[11:12]1078; GFX8-NEXT: flat_load_dword v10, v[13:14]1079; GFX8-NEXT: flat_load_dword v11, v[15:16]1080; GFX8-NEXT: flat_load_dword v12, v[17:18]1081; GFX8-NEXT: v_add_u32_e32 v5, vcc, s0, v31082; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v4, vcc1083; GFX8-NEXT: v_add_u32_e32 v3, vcc, 0x2400, v31084; GFX8-NEXT: flat_load_dword v5, v[5:6]1085; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v4, vcc1086; GFX8-NEXT: flat_load_dword v3, v[3:4]1087; GFX8-NEXT: s_waitcnt vmcnt(8)1088; GFX8-NEXT: v_add_u32_e32 v0, vcc, v19, v01089; GFX8-NEXT: s_waitcnt vmcnt(7)1090; GFX8-NEXT: v_add_u32_e32 v0, vcc, v7, v01091; GFX8-NEXT: s_waitcnt vmcnt(6)1092; GFX8-NEXT: v_add_u32_e32 v0, vcc, v8, v01093; GFX8-NEXT: s_waitcnt vmcnt(5)1094; GFX8-NEXT: v_add_u32_e32 v0, vcc, v9, v01095; GFX8-NEXT: s_waitcnt vmcnt(4)1096; GFX8-NEXT: v_add_u32_e32 v0, vcc, v10, v01097; GFX8-NEXT: s_waitcnt vmcnt(3)1098; GFX8-NEXT: v_add_u32_e32 v0, vcc, v11, v01099; GFX8-NEXT: s_waitcnt vmcnt(2)1100; GFX8-NEXT: v_add_u32_e32 v0, vcc, v12, v01101; GFX8-NEXT: s_waitcnt vmcnt(1)1102; GFX8-NEXT: v_add_u32_e32 v0, vcc, v5, v01103; GFX8-NEXT: s_waitcnt vmcnt(0)1104; GFX8-NEXT: v_add_u32_e32 v0, vcc, v3, v01105; GFX8-NEXT: flat_store_dword v[1:2], v01106; GFX8-NEXT: s_endpgm1107;1108; GFX9-LABEL: Address32:1109; GFX9: ; %bb.0: ; %entry1110; GFX9-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01111; GFX9-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11112; GFX9-NEXT: s_mov_b32 s38, -11113; GFX9-NEXT: s_mov_b32 s39, 0xe000001114; GFX9-NEXT: s_add_u32 s36, s36, s111115; GFX9-NEXT: s_addc_u32 s37, s37, 01116; GFX9-NEXT: s_getpc_b64 s[0:1]1117; GFX9-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41118; GFX9-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121119; GFX9-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241120; GFX9-NEXT: v_mov_b32_e32 v31, v01121; GFX9-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x01122; GFX9-NEXT: s_mov_b64 s[0:1], s[36:37]1123; GFX9-NEXT: s_mov_b64 s[2:3], s[38:39]1124; GFX9-NEXT: v_mov_b32_e32 v0, 01125; GFX9-NEXT: s_mov_b32 s32, 01126; GFX9-NEXT: s_waitcnt lgkmcnt(0)1127; GFX9-NEXT: s_swappc_b64 s[30:31], s[4:5]1128; GFX9-NEXT: v_lshlrev_b32_e32 v1, 7, v01129; GFX9-NEXT: v_and_b32_e32 v4, 0xffff8000, v11130; GFX9-NEXT: v_mov_b32_e32 v1, s351131; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s34, v41132; GFX9-NEXT: v_mov_b32_e32 v3, 21133; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1134; GFX9-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01135; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v2, v01136; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1137; GFX9-NEXT: s_movk_i32 s0, 0x10001138; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s0, v01139; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v1, vcc1140; GFX9-NEXT: global_load_dword v5, v[0:1], off1141; GFX9-NEXT: global_load_dword v6, v[0:1], off offset:10241142; GFX9-NEXT: global_load_dword v7, v[0:1], off offset:20481143; GFX9-NEXT: global_load_dword v8, v[0:1], off offset:30721144; GFX9-NEXT: global_load_dword v9, v[2:3], off1145; GFX9-NEXT: global_load_dword v10, v[2:3], off offset:10241146; GFX9-NEXT: global_load_dword v11, v[2:3], off offset:20481147; GFX9-NEXT: global_load_dword v12, v[2:3], off offset:30721148; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, 0x2000, v01149; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1150; GFX9-NEXT: global_load_dword v2, v[0:1], off1151; GFX9-NEXT: global_load_dword v3, v[0:1], off offset:10241152; GFX9-NEXT: s_waitcnt vmcnt(8)1153; GFX9-NEXT: v_add_u32_e32 v0, v6, v51154; GFX9-NEXT: s_waitcnt vmcnt(6)1155; GFX9-NEXT: v_add3_u32 v0, v7, v0, v81156; GFX9-NEXT: s_waitcnt vmcnt(4)1157; GFX9-NEXT: v_add3_u32 v0, v9, v0, v101158; GFX9-NEXT: s_waitcnt vmcnt(2)1159; GFX9-NEXT: v_add3_u32 v0, v11, v0, v121160; GFX9-NEXT: s_waitcnt vmcnt(0)1161; GFX9-NEXT: v_add3_u32 v0, v2, v0, v31162; GFX9-NEXT: global_store_dword v4, v0, s[34:35]1163; GFX9-NEXT: s_endpgm1164;1165; GFX10-LABEL: Address32:1166; GFX10: ; %bb.0: ; %entry1167; GFX10-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01168; GFX10-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11169; GFX10-NEXT: s_mov_b32 s38, -11170; GFX10-NEXT: s_mov_b32 s39, 0x31c160001171; GFX10-NEXT: s_add_u32 s36, s36, s111172; GFX10-NEXT: s_addc_u32 s37, s37, 01173; GFX10-NEXT: s_getpc_b64 s[0:1]1174; GFX10-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41175; GFX10-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121176; GFX10-NEXT: v_mov_b32_e32 v31, v01177; GFX10-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x01178; GFX10-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241179; GFX10-NEXT: v_mov_b32_e32 v0, 01180; GFX10-NEXT: s_mov_b64 s[0:1], s[36:37]1181; GFX10-NEXT: s_mov_b64 s[2:3], s[38:39]1182; GFX10-NEXT: s_mov_b32 s32, 01183; GFX10-NEXT: s_waitcnt lgkmcnt(0)1184; GFX10-NEXT: s_swappc_b64 s[30:31], s[6:7]1185; GFX10-NEXT: v_lshlrev_b32_e32 v1, 7, v01186; GFX10-NEXT: v_mov_b32_e32 v2, 21187; GFX10-NEXT: v_and_b32_e32 v10, 0xffff8000, v11188; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01189; GFX10-NEXT: v_add_co_u32 v1, s0, s34, v101190; GFX10-NEXT: v_add_co_ci_u32_e64 v2, s0, s35, 0, s01191; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v1, v01192; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo1193; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, 0x800, v01194; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v1, vcc_lo1195; GFX10-NEXT: v_add_co_u32 v4, vcc_lo, v0, 0x10001196; GFX10-NEXT: v_add_co_ci_u32_e32 v5, vcc_lo, 0, v1, vcc_lo1197; GFX10-NEXT: s_clause 0x31198; GFX10-NEXT: global_load_dword v11, v[0:1], off1199; GFX10-NEXT: global_load_dword v12, v[0:1], off offset:10241200; GFX10-NEXT: global_load_dword v13, v[4:5], off offset:-20481201; GFX10-NEXT: global_load_dword v14, v[2:3], off offset:10241202; GFX10-NEXT: v_add_co_u32 v6, vcc_lo, 0x1000, v01203; GFX10-NEXT: v_add_co_ci_u32_e32 v7, vcc_lo, 0, v1, vcc_lo1204; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, 0x1800, v01205; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v1, vcc_lo1206; GFX10-NEXT: v_add_co_u32 v8, vcc_lo, v0, 0x20001207; GFX10-NEXT: v_add_co_ci_u32_e32 v9, vcc_lo, 0, v1, vcc_lo1208; GFX10-NEXT: s_clause 0x21209; GFX10-NEXT: global_load_dword v15, v[4:5], off1210; GFX10-NEXT: global_load_dword v16, v[6:7], off offset:10241211; GFX10-NEXT: global_load_dword v17, v[2:3], off offset:10241212; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, 0x2000, v01213; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1214; GFX10-NEXT: s_clause 0x21215; GFX10-NEXT: global_load_dword v2, v[8:9], off offset:-20481216; GFX10-NEXT: global_load_dword v3, v[8:9], off1217; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:10241218; GFX10-NEXT: s_waitcnt vmcnt(8)1219; GFX10-NEXT: v_add_nc_u32_e32 v0, v12, v111220; GFX10-NEXT: s_waitcnt vmcnt(6)1221; GFX10-NEXT: v_add3_u32 v0, v13, v0, v141222; GFX10-NEXT: s_waitcnt vmcnt(4)1223; GFX10-NEXT: v_add3_u32 v0, v15, v0, v161224; GFX10-NEXT: s_waitcnt vmcnt(2)1225; GFX10-NEXT: v_add3_u32 v0, v2, v0, v171226; GFX10-NEXT: s_waitcnt vmcnt(0)1227; GFX10-NEXT: v_add3_u32 v0, v3, v0, v41228; GFX10-NEXT: global_store_dword v10, v0, s[34:35]1229; GFX10-NEXT: s_endpgm1230;1231; GFX11-LABEL: Address32:1232; GFX11: ; %bb.0: ; %entry1233; GFX11-NEXT: s_getpc_b64 s[0:1]1234; GFX11-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41235; GFX11-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121236; GFX11-NEXT: v_dual_mov_b32 v31, v0 :: v_dual_mov_b32 v0, 01237; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x01238; GFX11-NEXT: s_load_b64 s[34:35], s[4:5], 0x241239; GFX11-NEXT: s_mov_b32 s32, 01240; GFX11-NEXT: s_waitcnt lgkmcnt(0)1241; GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]1242; GFX11-NEXT: v_lshlrev_b32_e32 v1, 7, v01243; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v01244; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1245; GFX11-NEXT: v_and_b32_e32 v6, 0xffff8000, v11246; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v01247; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1248; GFX11-NEXT: v_add_co_u32 v1, s0, s34, v61249; GFX11-NEXT: v_add_co_ci_u32_e64 v2, null, s35, 0, s01250; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1251; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v1, v01252; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo1253; GFX11-NEXT: s_clause 0x11254; GFX11-NEXT: global_load_b32 v7, v[0:1], off1255; GFX11-NEXT: global_load_b32 v8, v[0:1], off offset:10241256; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, 0x1000, v01257; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)1258; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v1, vcc_lo1259; GFX11-NEXT: v_add_co_u32 v4, vcc_lo, v0, 0x20001260; GFX11-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v1, vcc_lo1261; GFX11-NEXT: s_clause 0x51262; GFX11-NEXT: global_load_b32 v9, v[0:1], off offset:20481263; GFX11-NEXT: global_load_b32 v10, v[0:1], off offset:30721264; GFX11-NEXT: global_load_b32 v11, v[4:5], off offset:-40961265; GFX11-NEXT: global_load_b32 v12, v[2:3], off offset:10241266; GFX11-NEXT: global_load_b32 v13, v[2:3], off offset:20481267; GFX11-NEXT: global_load_b32 v2, v[2:3], off offset:30721268; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, 0x2000, v01269; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1270; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo1271; GFX11-NEXT: s_clause 0x11272; GFX11-NEXT: global_load_b32 v3, v[4:5], off1273; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:10241274; GFX11-NEXT: s_waitcnt vmcnt(8)1275; GFX11-NEXT: v_add_nc_u32_e32 v1, v8, v71276; GFX11-NEXT: s_waitcnt vmcnt(6)1277; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)1278; GFX11-NEXT: v_add3_u32 v1, v9, v1, v101279; GFX11-NEXT: s_waitcnt vmcnt(4)1280; GFX11-NEXT: v_add3_u32 v1, v11, v1, v121281; GFX11-NEXT: s_waitcnt vmcnt(2)1282; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)1283; GFX11-NEXT: v_add3_u32 v1, v13, v1, v21284; GFX11-NEXT: s_waitcnt vmcnt(0)1285; GFX11-NEXT: v_add3_u32 v0, v3, v1, v01286; GFX11-NEXT: global_store_b32 v6, v0, s[34:35]1287; GFX11-NEXT: s_endpgm1288entry:1289 %call = tail call i64 @_Z13get_global_idj(i32 0)1290 %conv = and i64 %call, 2551291 %id = shl i64 %call, 71292 %idx.ext11 = and i64 %id, 42949345281293 %add.ptr12 = getelementptr inbounds i8, ptr addrspace(1) %buffer, i64 %idx.ext111294 1295 %add.ptr6 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr12, i64 %conv1296 %load1 = load i32, ptr addrspace(1) %add.ptr6, align 41297 1298 %add.ptr8.1 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 2561299 %load2 = load i32, ptr addrspace(1) %add.ptr8.1, align 41300 %add.1 = add i32 %load2, %load11301 1302 %add.ptr8.2 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 5121303 %load3 = load i32, ptr addrspace(1) %add.ptr8.2, align 41304 %add.2 = add i32 %load3, %add.11305 1306 %add.ptr8.3 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 7681307 %load4 = load i32, ptr addrspace(1) %add.ptr8.3, align 41308 %add.3 = add i32 %load4, %add.21309 1310 %add.ptr8.4 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 10241311 %load5 = load i32, ptr addrspace(1) %add.ptr8.4, align 41312 %add.4 = add i32 %load5, %add.31313 1314 %add.ptr8.5 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 12801315 %load6 = load i32, ptr addrspace(1) %add.ptr8.5, align 41316 %add.5 = add i32 %load6, %add.41317 1318 %add.ptr8.6 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 15361319 %load7 = load i32, ptr addrspace(1) %add.ptr8.6, align 41320 %add.6 = add i32 %load7, %add.51321 1322 %add.ptr8.7 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 17921323 %load8 = load i32, ptr addrspace(1) %add.ptr8.7, align 41324 %add.7 = add i32 %load8, %add.61325 1326 %add.ptr8.8 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 20481327 %load9 = load i32, ptr addrspace(1) %add.ptr8.8, align 41328 %add.8 = add i32 %load9, %add.71329 1330 %add.ptr8.9 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr6, i64 23041331 %load10 = load i32, ptr addrspace(1) %add.ptr8.9, align 41332 %add.9 = add i32 %load10, %add.81333 1334 store i32 %add.9, ptr addrspace(1) %add.ptr12, align 41335 ret void1336}1337 1338define amdgpu_kernel void @Offset64(ptr addrspace(1) %buffer) {1339; GFX8-LABEL: Offset64:1340; GFX8: ; %bb.0: ; %entry1341; GFX8-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01342; GFX8-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11343; GFX8-NEXT: s_mov_b32 s38, -11344; GFX8-NEXT: s_mov_b32 s39, 0xe800001345; GFX8-NEXT: s_add_u32 s36, s36, s111346; GFX8-NEXT: s_addc_u32 s37, s37, 01347; GFX8-NEXT: s_getpc_b64 s[0:1]1348; GFX8-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41349; GFX8-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121350; GFX8-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241351; GFX8-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x01352; GFX8-NEXT: s_mov_b64 s[0:1], s[36:37]1353; GFX8-NEXT: v_mov_b32_e32 v31, v01354; GFX8-NEXT: s_mov_b64 s[2:3], s[38:39]1355; GFX8-NEXT: v_mov_b32_e32 v0, 01356; GFX8-NEXT: s_mov_b32 s32, 01357; GFX8-NEXT: s_waitcnt lgkmcnt(0)1358; GFX8-NEXT: s_swappc_b64 s[30:31], s[4:5]1359; GFX8-NEXT: v_lshlrev_b32_e32 v1, 7, v01360; GFX8-NEXT: v_and_b32_e32 v1, 0xffff8000, v11361; GFX8-NEXT: v_mov_b32_e32 v2, s351362; GFX8-NEXT: v_add_u32_e32 v1, vcc, s34, v11363; GFX8-NEXT: v_mov_b32_e32 v3, 31364; GFX8-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc1365; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01366; GFX8-NEXT: v_add_u32_e32 v3, vcc, v1, v01367; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v2, vcc1368; GFX8-NEXT: s_movk_i32 s0, 0xf0001369; GFX8-NEXT: v_add_u32_e32 v5, vcc, s0, v31370; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v4, vcc1371; GFX8-NEXT: s_movk_i32 s0, 0xf8001372; GFX8-NEXT: flat_load_dwordx2 v[7:8], v[3:4]1373; GFX8-NEXT: flat_load_dwordx2 v[5:6], v[5:6]1374; GFX8-NEXT: v_add_u32_e32 v9, vcc, s0, v31375; GFX8-NEXT: v_addc_u32_e32 v10, vcc, 0, v4, vcc1376; GFX8-NEXT: flat_load_dwordx2 v[9:10], v[9:10]1377; GFX8-NEXT: v_add_u32_e32 v4, vcc, 1, v41378; GFX8-NEXT: flat_load_dwordx2 v[3:4], v[3:4]1379; GFX8-NEXT: s_waitcnt vmcnt(2)1380; GFX8-NEXT: v_add_u32_e32 v0, vcc, v5, v71381; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v6, v8, vcc1382; GFX8-NEXT: s_waitcnt vmcnt(1)1383; GFX8-NEXT: v_add_u32_e32 v0, vcc, v9, v01384; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v10, v5, vcc1385; GFX8-NEXT: s_waitcnt vmcnt(0)1386; GFX8-NEXT: v_add_u32_e32 v3, vcc, v3, v01387; GFX8-NEXT: v_addc_u32_e32 v4, vcc, v4, v5, vcc1388; GFX8-NEXT: flat_store_dwordx2 v[1:2], v[3:4]1389; GFX8-NEXT: s_endpgm1390;1391; GFX9-LABEL: Offset64:1392; GFX9: ; %bb.0: ; %entry1393; GFX9-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01394; GFX9-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11395; GFX9-NEXT: s_mov_b32 s38, -11396; GFX9-NEXT: s_mov_b32 s39, 0xe000001397; GFX9-NEXT: s_add_u32 s36, s36, s111398; GFX9-NEXT: s_addc_u32 s37, s37, 01399; GFX9-NEXT: s_getpc_b64 s[0:1]1400; GFX9-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41401; GFX9-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121402; GFX9-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241403; GFX9-NEXT: v_mov_b32_e32 v31, v01404; GFX9-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x01405; GFX9-NEXT: s_mov_b64 s[0:1], s[36:37]1406; GFX9-NEXT: s_mov_b64 s[2:3], s[38:39]1407; GFX9-NEXT: v_mov_b32_e32 v0, 01408; GFX9-NEXT: s_mov_b32 s32, 01409; GFX9-NEXT: s_waitcnt lgkmcnt(0)1410; GFX9-NEXT: s_swappc_b64 s[30:31], s[4:5]1411; GFX9-NEXT: v_lshlrev_b32_e32 v1, 7, v01412; GFX9-NEXT: v_and_b32_e32 v10, 0xffff8000, v11413; GFX9-NEXT: v_mov_b32_e32 v1, s351414; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s34, v101415; GFX9-NEXT: v_mov_b32_e32 v3, 31416; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1417; GFX9-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01418; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v2, v01419; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1420; GFX9-NEXT: s_movk_i32 s0, 0xf0001421; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s0, v01422; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v1, vcc1423; GFX9-NEXT: global_load_dwordx2 v[4:5], v[0:1], off1424; GFX9-NEXT: global_load_dwordx2 v[6:7], v[2:3], off1425; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off offset:20481426; GFX9-NEXT: v_add_u32_e32 v1, 1, v11427; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1428; GFX9-NEXT: s_waitcnt vmcnt(2)1429; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v6, v41430; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v7, v5, vcc1431; GFX9-NEXT: s_waitcnt vmcnt(1)1432; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v8, v21433; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v9, v3, vcc1434; GFX9-NEXT: s_waitcnt vmcnt(0)1435; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v0, v21436; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc1437; GFX9-NEXT: global_store_dwordx2 v10, v[0:1], s[34:35]1438; GFX9-NEXT: s_endpgm1439;1440; GFX10-LABEL: Offset64:1441; GFX10: ; %bb.0: ; %entry1442; GFX10-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01443; GFX10-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11444; GFX10-NEXT: s_mov_b32 s38, -11445; GFX10-NEXT: s_mov_b32 s39, 0x31c160001446; GFX10-NEXT: s_add_u32 s36, s36, s111447; GFX10-NEXT: s_addc_u32 s37, s37, 01448; GFX10-NEXT: s_getpc_b64 s[0:1]1449; GFX10-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41450; GFX10-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121451; GFX10-NEXT: v_mov_b32_e32 v31, v01452; GFX10-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x01453; GFX10-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241454; GFX10-NEXT: v_mov_b32_e32 v0, 01455; GFX10-NEXT: s_mov_b64 s[0:1], s[36:37]1456; GFX10-NEXT: s_mov_b64 s[2:3], s[38:39]1457; GFX10-NEXT: s_mov_b32 s32, 01458; GFX10-NEXT: s_waitcnt lgkmcnt(0)1459; GFX10-NEXT: s_swappc_b64 s[30:31], s[6:7]1460; GFX10-NEXT: v_lshlrev_b32_e32 v1, 7, v01461; GFX10-NEXT: v_mov_b32_e32 v2, 31462; GFX10-NEXT: v_and_b32_e32 v12, 0xffff8000, v11463; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01464; GFX10-NEXT: v_add_co_u32 v1, s0, s34, v121465; GFX10-NEXT: v_add_co_ci_u32_e64 v2, s0, s35, 0, s01466; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v1, v01467; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo1468; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, v0, 0xfffff8001469; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v1, vcc_lo1470; GFX10-NEXT: s_clause 0x11471; GFX10-NEXT: global_load_dwordx2 v[4:5], v[0:1], off1472; GFX10-NEXT: global_load_dwordx2 v[6:7], v[2:3], off offset:-20481473; GFX10-NEXT: v_add_nc_u32_e32 v1, 1, v11474; GFX10-NEXT: s_clause 0x11475; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off1476; GFX10-NEXT: global_load_dwordx2 v[10:11], v[0:1], off1477; GFX10-NEXT: s_waitcnt vmcnt(2)1478; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v6, v41479; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v7, v5, vcc_lo1480; GFX10-NEXT: s_waitcnt vmcnt(1)1481; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v8, v01482; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v9, v1, vcc_lo1483; GFX10-NEXT: s_waitcnt vmcnt(0)1484; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v10, v01485; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v11, v1, vcc_lo1486; GFX10-NEXT: global_store_dwordx2 v12, v[0:1], s[34:35]1487; GFX10-NEXT: s_endpgm1488;1489; GFX11-LABEL: Offset64:1490; GFX11: ; %bb.0: ; %entry1491; GFX11-NEXT: s_getpc_b64 s[0:1]1492; GFX11-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41493; GFX11-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121494; GFX11-NEXT: v_dual_mov_b32 v31, v0 :: v_dual_mov_b32 v0, 01495; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x01496; GFX11-NEXT: s_load_b64 s[34:35], s[4:5], 0x241497; GFX11-NEXT: s_mov_b32 s32, 01498; GFX11-NEXT: s_waitcnt lgkmcnt(0)1499; GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]1500; GFX11-NEXT: v_lshlrev_b32_e32 v1, 7, v01501; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v01502; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1503; GFX11-NEXT: v_and_b32_e32 v8, 0xffff8000, v11504; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v01505; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1506; GFX11-NEXT: v_add_co_u32 v1, s0, s34, v81507; GFX11-NEXT: v_add_co_ci_u32_e64 v2, null, s35, 0, s01508; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1509; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v1, v01510; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo1511; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1512; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, 0xfffff000, v01513; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v1, vcc_lo1514; GFX11-NEXT: s_clause 0x21515; GFX11-NEXT: global_load_b64 v[4:5], v[0:1], off1516; GFX11-NEXT: global_load_b64 v[6:7], v[2:3], off1517; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off offset:20481518; GFX11-NEXT: v_add_nc_u32_e32 v1, 1, v11519; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off1520; GFX11-NEXT: s_waitcnt vmcnt(2)1521; GFX11-NEXT: v_add_co_u32 v4, vcc_lo, v6, v41522; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1523; GFX11-NEXT: v_add_co_ci_u32_e64 v5, null, v7, v5, vcc_lo1524; GFX11-NEXT: s_waitcnt vmcnt(1)1525; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v2, v41526; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1527; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v3, v5, vcc_lo1528; GFX11-NEXT: s_waitcnt vmcnt(0)1529; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v21530; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1531; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo1532; GFX11-NEXT: global_store_b64 v8, v[0:1], s[34:35]1533; GFX11-NEXT: s_endpgm1534entry:1535 %call = tail call i64 @_Z13get_global_idj(i32 0)1536 %conv = and i64 %call, 2551537 %a0 = shl i64 %call, 71538 %idx.ext11 = and i64 %a0, 42949345281539 %add.ptr12 = getelementptr inbounds i8, ptr addrspace(1) %buffer, i64 %idx.ext111540 1541 %addr1 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr12, i64 %conv1542 %load1 = load i64, ptr addrspace(1) %addr1, align 81543 1544 %addr2 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 5368704001545 %load2 = load i64, ptr addrspace(1) %addr2, align 81546 1547 %add1 = add i64 %load2, %load11548 1549 %addr3 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 5368706561550 %load3 = load i64, ptr addrspace(1) %addr3, align 81551 1552 %add2 = add i64 %load3, %add11553 1554 %addr4 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 5368709121555 %load4 = load i64, ptr addrspace(1) %addr4, align 81556 %add4 = add i64 %load4, %add21557 1558 store i64 %add4, ptr addrspace(1) %add.ptr12, align 81559 ret void1560}1561 1562; TODO: Support load4 as anchor instruction.1563define amdgpu_kernel void @p32Offset64(ptr addrspace(1) %buffer) {1564; GFX8-LABEL: p32Offset64:1565; GFX8: ; %bb.0: ; %entry1566; GFX8-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01567; GFX8-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11568; GFX8-NEXT: s_mov_b32 s38, -11569; GFX8-NEXT: s_mov_b32 s39, 0xe800001570; GFX8-NEXT: s_add_u32 s36, s36, s111571; GFX8-NEXT: s_addc_u32 s37, s37, 01572; GFX8-NEXT: s_getpc_b64 s[0:1]1573; GFX8-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41574; GFX8-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121575; GFX8-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241576; GFX8-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x01577; GFX8-NEXT: s_mov_b64 s[0:1], s[36:37]1578; GFX8-NEXT: v_mov_b32_e32 v31, v01579; GFX8-NEXT: s_mov_b64 s[2:3], s[38:39]1580; GFX8-NEXT: v_mov_b32_e32 v0, 01581; GFX8-NEXT: s_mov_b32 s32, 01582; GFX8-NEXT: s_waitcnt lgkmcnt(0)1583; GFX8-NEXT: s_swappc_b64 s[30:31], s[4:5]1584; GFX8-NEXT: v_lshlrev_b32_e32 v1, 7, v01585; GFX8-NEXT: v_and_b32_e32 v1, 0xffff8000, v11586; GFX8-NEXT: v_mov_b32_e32 v2, s351587; GFX8-NEXT: v_add_u32_e32 v1, vcc, s34, v11588; GFX8-NEXT: v_mov_b32_e32 v3, 21589; GFX8-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc1590; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01591; GFX8-NEXT: v_add_u32_e32 v3, vcc, v1, v01592; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v2, vcc1593; GFX8-NEXT: s_mov_b32 s0, 0x7ffff8001594; GFX8-NEXT: v_add_u32_e32 v5, vcc, s0, v31595; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v4, vcc1596; GFX8-NEXT: s_mov_b32 s0, 0x7ffffc001597; GFX8-NEXT: v_add_u32_e32 v7, vcc, s0, v31598; GFX8-NEXT: v_addc_u32_e32 v8, vcc, 0, v4, vcc1599; GFX8-NEXT: flat_load_dword v0, v[3:4]1600; GFX8-NEXT: flat_load_dword v5, v[5:6]1601; GFX8-NEXT: flat_load_dword v6, v[7:8]1602; GFX8-NEXT: v_add_u32_e32 v3, vcc, 0x80000000, v31603; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v4, vcc1604; GFX8-NEXT: flat_load_dword v3, v[3:4]1605; GFX8-NEXT: s_waitcnt vmcnt(2)1606; GFX8-NEXT: v_add_u32_e32 v0, vcc, v5, v01607; GFX8-NEXT: s_waitcnt vmcnt(1)1608; GFX8-NEXT: v_add_u32_e32 v0, vcc, v6, v01609; GFX8-NEXT: s_waitcnt vmcnt(0)1610; GFX8-NEXT: v_add_u32_e32 v0, vcc, v3, v01611; GFX8-NEXT: flat_store_dword v[1:2], v01612; GFX8-NEXT: s_endpgm1613;1614; GFX9-LABEL: p32Offset64:1615; GFX9: ; %bb.0: ; %entry1616; GFX9-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01617; GFX9-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11618; GFX9-NEXT: s_mov_b32 s38, -11619; GFX9-NEXT: s_mov_b32 s39, 0xe000001620; GFX9-NEXT: s_add_u32 s36, s36, s111621; GFX9-NEXT: s_addc_u32 s37, s37, 01622; GFX9-NEXT: s_getpc_b64 s[0:1]1623; GFX9-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41624; GFX9-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121625; GFX9-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241626; GFX9-NEXT: v_mov_b32_e32 v31, v01627; GFX9-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x01628; GFX9-NEXT: s_mov_b64 s[0:1], s[36:37]1629; GFX9-NEXT: s_mov_b64 s[2:3], s[38:39]1630; GFX9-NEXT: v_mov_b32_e32 v0, 01631; GFX9-NEXT: s_mov_b32 s32, 01632; GFX9-NEXT: s_waitcnt lgkmcnt(0)1633; GFX9-NEXT: s_swappc_b64 s[30:31], s[4:5]1634; GFX9-NEXT: v_lshlrev_b32_e32 v1, 7, v01635; GFX9-NEXT: v_and_b32_e32 v6, 0xffff8000, v11636; GFX9-NEXT: v_mov_b32_e32 v1, s351637; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s34, v61638; GFX9-NEXT: v_mov_b32_e32 v3, 21639; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1640; GFX9-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01641; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v2, v01642; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1643; GFX9-NEXT: s_mov_b32 s0, 0x7ffff0001644; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s0, v01645; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v1, vcc1646; GFX9-NEXT: v_add_co_u32_e32 v4, vcc, 0x80000000, v01647; GFX9-NEXT: v_addc_co_u32_e32 v5, vcc, 0, v1, vcc1648; GFX9-NEXT: global_load_dword v7, v[0:1], off1649; GFX9-NEXT: global_load_dword v8, v[2:3], off offset:20481650; GFX9-NEXT: global_load_dword v9, v[2:3], off offset:30721651; GFX9-NEXT: global_load_dword v10, v[4:5], off1652; GFX9-NEXT: s_waitcnt vmcnt(2)1653; GFX9-NEXT: v_add_u32_e32 v0, v8, v71654; GFX9-NEXT: s_waitcnt vmcnt(0)1655; GFX9-NEXT: v_add3_u32 v0, v9, v0, v101656; GFX9-NEXT: global_store_dword v6, v0, s[34:35]1657; GFX9-NEXT: s_endpgm1658;1659; GFX10-LABEL: p32Offset64:1660; GFX10: ; %bb.0: ; %entry1661; GFX10-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD01662; GFX10-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD11663; GFX10-NEXT: s_mov_b32 s38, -11664; GFX10-NEXT: s_mov_b32 s39, 0x31c160001665; GFX10-NEXT: s_add_u32 s36, s36, s111666; GFX10-NEXT: s_addc_u32 s37, s37, 01667; GFX10-NEXT: s_getpc_b64 s[0:1]1668; GFX10-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41669; GFX10-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121670; GFX10-NEXT: v_mov_b32_e32 v31, v01671; GFX10-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x01672; GFX10-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x241673; GFX10-NEXT: v_mov_b32_e32 v0, 01674; GFX10-NEXT: s_mov_b64 s[0:1], s[36:37]1675; GFX10-NEXT: s_mov_b64 s[2:3], s[38:39]1676; GFX10-NEXT: s_mov_b32 s32, 01677; GFX10-NEXT: s_waitcnt lgkmcnt(0)1678; GFX10-NEXT: s_swappc_b64 s[30:31], s[6:7]1679; GFX10-NEXT: v_lshlrev_b32_e32 v1, 7, v01680; GFX10-NEXT: v_mov_b32_e32 v2, 21681; GFX10-NEXT: v_and_b32_e32 v6, 0xffff8000, v11682; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01683; GFX10-NEXT: v_add_co_u32 v1, s0, s34, v61684; GFX10-NEXT: v_add_co_ci_u32_e64 v2, s0, s35, 0, s01685; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v1, v01686; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo1687; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, v0, 0x800000001688; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v1, vcc_lo1689; GFX10-NEXT: v_add_co_u32 v4, vcc_lo, 0x7ffff800, v01690; GFX10-NEXT: v_add_co_ci_u32_e32 v5, vcc_lo, 0, v1, vcc_lo1691; GFX10-NEXT: s_clause 0x31692; GFX10-NEXT: global_load_dword v7, v[0:1], off1693; GFX10-NEXT: global_load_dword v8, v[2:3], off offset:-20481694; GFX10-NEXT: global_load_dword v9, v[2:3], off1695; GFX10-NEXT: global_load_dword v10, v[4:5], off offset:10241696; GFX10-NEXT: s_waitcnt vmcnt(2)1697; GFX10-NEXT: v_add_nc_u32_e32 v0, v8, v71698; GFX10-NEXT: s_waitcnt vmcnt(0)1699; GFX10-NEXT: v_add3_u32 v0, v10, v0, v91700; GFX10-NEXT: global_store_dword v6, v0, s[34:35]1701; GFX10-NEXT: s_endpgm1702;1703; GFX11-LABEL: p32Offset64:1704; GFX11: ; %bb.0: ; %entry1705; GFX11-NEXT: s_getpc_b64 s[0:1]1706; GFX11-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41707; GFX11-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121708; GFX11-NEXT: v_dual_mov_b32 v31, v0 :: v_dual_mov_b32 v0, 01709; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x01710; GFX11-NEXT: s_load_b64 s[34:35], s[4:5], 0x241711; GFX11-NEXT: s_mov_b32 s32, 01712; GFX11-NEXT: s_waitcnt lgkmcnt(0)1713; GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]1714; GFX11-NEXT: v_lshlrev_b32_e32 v1, 7, v01715; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v01716; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1717; GFX11-NEXT: v_and_b32_e32 v6, 0xffff8000, v11718; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v01719; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1720; GFX11-NEXT: v_add_co_u32 v1, s0, s34, v61721; GFX11-NEXT: v_add_co_ci_u32_e64 v2, null, s35, 0, s01722; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1723; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v1, v01724; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo1725; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1726; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, 0x7ffff000, v01727; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v1, vcc_lo1728; GFX11-NEXT: v_add_co_u32 v4, vcc_lo, 0x80000000, v01729; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1730; GFX11-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v1, vcc_lo1731; GFX11-NEXT: s_clause 0x31732; GFX11-NEXT: global_load_b32 v0, v[0:1], off1733; GFX11-NEXT: global_load_b32 v1, v[2:3], off offset:20481734; GFX11-NEXT: global_load_b32 v2, v[2:3], off offset:30721735; GFX11-NEXT: global_load_b32 v3, v[4:5], off1736; GFX11-NEXT: s_waitcnt vmcnt(2)1737; GFX11-NEXT: v_add_nc_u32_e32 v0, v1, v01738; GFX11-NEXT: s_waitcnt vmcnt(0)1739; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1740; GFX11-NEXT: v_add3_u32 v0, v2, v0, v31741; GFX11-NEXT: global_store_b32 v6, v0, s[34:35]1742; GFX11-NEXT: s_endpgm1743entry:1744 %call = tail call i64 @_Z13get_global_idj(i32 0)1745 %conv = and i64 %call, 2551746 %a0 = shl i64 %call, 71747 %idx.ext11 = and i64 %a0, 42949345281748 %add.ptr12 = getelementptr inbounds i8, ptr addrspace(1) %buffer, i64 %idx.ext111749 1750 %addr1 = getelementptr inbounds i32, ptr addrspace(1) %add.ptr12, i64 %conv1751 %load1 = load i32, ptr addrspace(1) %addr1, align 81752 1753 %addr2 = getelementptr inbounds i32, ptr addrspace(1) %addr1, i64 5368704001754 %load2 = load i32, ptr addrspace(1) %addr2, align 81755 1756 %add1 = add i32 %load2, %load11757 1758 %addr3 = getelementptr inbounds i32, ptr addrspace(1) %addr1, i64 5368706561759 %load3 = load i32, ptr addrspace(1) %addr3, align 81760 1761 %add2 = add i32 %load3, %add11762 1763 %addr4 = getelementptr inbounds i32, ptr addrspace(1) %addr1, i64 5368709121764 %load4 = load i32, ptr addrspace(1) %addr4, align 81765 %add4 = add i32 %load4, %add21766 1767 store i32 %add4, ptr addrspace(1) %add.ptr12, align 81768 ret void1769}1770 1771define amdgpu_kernel void @DiffBase(ptr addrspace(1) %buffer1,1772; GFX8-LABEL: DiffBase:1773; GFX8: ; %bb.0: ; %entry1774; GFX8-NEXT: s_mov_b32 s48, SCRATCH_RSRC_DWORD01775; GFX8-NEXT: s_mov_b32 s49, SCRATCH_RSRC_DWORD11776; GFX8-NEXT: s_mov_b32 s50, -11777; GFX8-NEXT: s_mov_b32 s51, 0xe800001778; GFX8-NEXT: s_add_u32 s48, s48, s111779; GFX8-NEXT: s_addc_u32 s49, s49, 01780; GFX8-NEXT: s_getpc_b64 s[0:1]1781; GFX8-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41782; GFX8-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121783; GFX8-NEXT: s_load_dwordx4 s[36:39], s[4:5], 0x241784; GFX8-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x01785; GFX8-NEXT: s_mov_b64 s[0:1], s[48:49]1786; GFX8-NEXT: v_mov_b32_e32 v31, v01787; GFX8-NEXT: s_mov_b64 s[2:3], s[50:51]1788; GFX8-NEXT: v_mov_b32_e32 v0, 01789; GFX8-NEXT: s_mov_b32 s32, 01790; GFX8-NEXT: s_waitcnt lgkmcnt(0)1791; GFX8-NEXT: s_swappc_b64 s[30:31], s[4:5]1792; GFX8-NEXT: v_lshlrev_b32_e32 v0, 7, v01793; GFX8-NEXT: v_and_b32_e32 v2, 0xffff8000, v01794; GFX8-NEXT: v_mov_b32_e32 v1, s371795; GFX8-NEXT: v_add_u32_e32 v0, vcc, s36, v21796; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1797; GFX8-NEXT: v_mov_b32_e32 v3, s391798; GFX8-NEXT: v_add_u32_e32 v12, vcc, s38, v21799; GFX8-NEXT: v_addc_u32_e32 v13, vcc, 0, v3, vcc1800; GFX8-NEXT: v_add_u32_e32 v2, vcc, 0x1000, v01801; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v1, vcc1802; GFX8-NEXT: v_add_u32_e32 v4, vcc, 0x1800, v01803; GFX8-NEXT: v_addc_u32_e32 v5, vcc, 0, v1, vcc1804; GFX8-NEXT: v_add_u32_e32 v6, vcc, 0x2000, v01805; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v1, vcc1806; GFX8-NEXT: v_add_u32_e32 v8, vcc, 0x2800, v121807; GFX8-NEXT: flat_load_dwordx2 v[2:3], v[2:3]1808; GFX8-NEXT: flat_load_dwordx2 v[4:5], v[4:5]1809; GFX8-NEXT: flat_load_dwordx2 v[6:7], v[6:7]1810; GFX8-NEXT: v_addc_u32_e32 v9, vcc, 0, v13, vcc1811; GFX8-NEXT: v_add_u32_e32 v10, vcc, 0x3000, v121812; GFX8-NEXT: v_addc_u32_e32 v11, vcc, 0, v13, vcc1813; GFX8-NEXT: flat_load_dwordx2 v[8:9], v[8:9]1814; GFX8-NEXT: flat_load_dwordx2 v[10:11], v[10:11]1815; GFX8-NEXT: v_add_u32_e32 v12, vcc, 0x3800, v121816; GFX8-NEXT: v_addc_u32_e32 v13, vcc, 0, v13, vcc1817; GFX8-NEXT: flat_load_dwordx2 v[12:13], v[12:13]1818; GFX8-NEXT: s_waitcnt vmcnt(4)1819; GFX8-NEXT: v_add_u32_e32 v2, vcc, v4, v21820; GFX8-NEXT: v_addc_u32_e32 v3, vcc, v5, v3, vcc1821; GFX8-NEXT: s_waitcnt vmcnt(3)1822; GFX8-NEXT: v_add_u32_e32 v2, vcc, v6, v21823; GFX8-NEXT: v_addc_u32_e32 v3, vcc, v7, v3, vcc1824; GFX8-NEXT: s_waitcnt vmcnt(1)1825; GFX8-NEXT: v_add_u32_e32 v4, vcc, v10, v81826; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v11, v9, vcc1827; GFX8-NEXT: s_waitcnt vmcnt(0)1828; GFX8-NEXT: v_add_u32_e32 v4, vcc, v12, v41829; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v13, v5, vcc1830; GFX8-NEXT: v_add_u32_e32 v2, vcc, v2, v41831; GFX8-NEXT: v_addc_u32_e32 v3, vcc, v3, v5, vcc1832; GFX8-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1833; GFX8-NEXT: s_endpgm1834;1835; GFX9-LABEL: DiffBase:1836; GFX9: ; %bb.0: ; %entry1837; GFX9-NEXT: s_mov_b32 s48, SCRATCH_RSRC_DWORD01838; GFX9-NEXT: s_mov_b32 s49, SCRATCH_RSRC_DWORD11839; GFX9-NEXT: s_mov_b32 s50, -11840; GFX9-NEXT: s_mov_b32 s51, 0xe000001841; GFX9-NEXT: s_add_u32 s48, s48, s111842; GFX9-NEXT: s_addc_u32 s49, s49, 01843; GFX9-NEXT: s_getpc_b64 s[0:1]1844; GFX9-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41845; GFX9-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121846; GFX9-NEXT: s_load_dwordx4 s[36:39], s[4:5], 0x241847; GFX9-NEXT: v_mov_b32_e32 v31, v01848; GFX9-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x01849; GFX9-NEXT: s_mov_b64 s[0:1], s[48:49]1850; GFX9-NEXT: s_mov_b64 s[2:3], s[50:51]1851; GFX9-NEXT: v_mov_b32_e32 v0, 01852; GFX9-NEXT: s_mov_b32 s32, 01853; GFX9-NEXT: s_waitcnt lgkmcnt(0)1854; GFX9-NEXT: s_swappc_b64 s[30:31], s[4:5]1855; GFX9-NEXT: v_lshlrev_b32_e32 v0, 7, v01856; GFX9-NEXT: v_and_b32_e32 v16, 0xffff8000, v01857; GFX9-NEXT: v_mov_b32_e32 v0, s371858; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s36, v161859; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v0, vcc1860; GFX9-NEXT: v_mov_b32_e32 v0, s391861; GFX9-NEXT: v_add_co_u32_e32 v10, vcc, s38, v161862; GFX9-NEXT: v_addc_co_u32_e32 v11, vcc, 0, v0, vcc1863; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v21864; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc1865; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, 0x2000, v21866; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1867; GFX9-NEXT: global_load_dwordx2 v[4:5], v[0:1], off1868; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off offset:20481869; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off1870; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, 0x2000, v101871; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v11, vcc1872; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, 0x3000, v101873; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v11, vcc1874; GFX9-NEXT: global_load_dwordx2 v[10:11], v[0:1], off offset:20481875; GFX9-NEXT: global_load_dwordx2 v[12:13], v[2:3], off1876; GFX9-NEXT: global_load_dwordx2 v[14:15], v[2:3], off offset:20481877; GFX9-NEXT: s_waitcnt vmcnt(4)1878; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v6, v41879; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v7, v5, vcc1880; GFX9-NEXT: s_waitcnt vmcnt(3)1881; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v8, v01882; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v9, v1, vcc1883; GFX9-NEXT: s_waitcnt vmcnt(1)1884; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v12, v101885; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v13, v11, vcc1886; GFX9-NEXT: s_waitcnt vmcnt(0)1887; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v14, v21888; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v15, v3, vcc1889; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v0, v21890; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc1891; GFX9-NEXT: global_store_dwordx2 v16, v[0:1], s[36:37]1892; GFX9-NEXT: s_endpgm1893;1894; GFX10-LABEL: DiffBase:1895; GFX10: ; %bb.0: ; %entry1896; GFX10-NEXT: s_mov_b32 s48, SCRATCH_RSRC_DWORD01897; GFX10-NEXT: s_mov_b32 s49, SCRATCH_RSRC_DWORD11898; GFX10-NEXT: s_mov_b32 s50, -11899; GFX10-NEXT: s_mov_b32 s51, 0x31c160001900; GFX10-NEXT: s_add_u32 s48, s48, s111901; GFX10-NEXT: s_addc_u32 s49, s49, 01902; GFX10-NEXT: s_getpc_b64 s[0:1]1903; GFX10-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41904; GFX10-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121905; GFX10-NEXT: v_mov_b32_e32 v31, v01906; GFX10-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x01907; GFX10-NEXT: s_load_dwordx4 s[36:39], s[4:5], 0x241908; GFX10-NEXT: v_mov_b32_e32 v0, 01909; GFX10-NEXT: s_mov_b64 s[0:1], s[48:49]1910; GFX10-NEXT: s_mov_b64 s[2:3], s[50:51]1911; GFX10-NEXT: s_mov_b32 s32, 01912; GFX10-NEXT: s_waitcnt lgkmcnt(0)1913; GFX10-NEXT: s_swappc_b64 s[30:31], s[6:7]1914; GFX10-NEXT: v_lshlrev_b32_e32 v0, 7, v01915; GFX10-NEXT: v_and_b32_e32 v16, 0xffff8000, v01916; GFX10-NEXT: v_add_co_u32 v8, s0, s36, v161917; GFX10-NEXT: v_add_co_ci_u32_e64 v9, s0, s37, 0, s01918; GFX10-NEXT: v_add_co_u32 v12, s0, s38, v161919; GFX10-NEXT: v_add_co_ci_u32_e64 v13, s0, s39, 0, s01920; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v8, 0x18001921; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v9, vcc_lo1922; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, v12, 0x30001923; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v13, vcc_lo1924; GFX10-NEXT: s_clause 0x11925; GFX10-NEXT: global_load_dwordx2 v[4:5], v[0:1], off offset:-20481926; GFX10-NEXT: global_load_dwordx2 v[6:7], v[0:1], off1927; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, 0x2000, v81928; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v9, vcc_lo1929; GFX10-NEXT: s_clause 0x11930; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off offset:-20481931; GFX10-NEXT: global_load_dwordx2 v[10:11], v[2:3], off1932; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, 0x3800, v121933; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v13, vcc_lo1934; GFX10-NEXT: global_load_dwordx2 v[12:13], v[0:1], off1935; GFX10-NEXT: global_load_dwordx2 v[14:15], v[2:3], off1936; GFX10-NEXT: s_waitcnt vmcnt(4)1937; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v6, v41938; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v7, v5, vcc_lo1939; GFX10-NEXT: s_waitcnt vmcnt(2)1940; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, v10, v81941; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, v11, v9, vcc_lo1942; GFX10-NEXT: s_waitcnt vmcnt(1)1943; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v12, v01944; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v13, v1, vcc_lo1945; GFX10-NEXT: s_waitcnt vmcnt(0)1946; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, v14, v21947; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, v15, v3, vcc_lo1948; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v0, v21949; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo1950; GFX10-NEXT: global_store_dwordx2 v16, v[0:1], s[36:37]1951; GFX10-NEXT: s_endpgm1952;1953; GFX11-LABEL: DiffBase:1954; GFX11: ; %bb.0: ; %entry1955; GFX11-NEXT: s_getpc_b64 s[0:1]1956; GFX11-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+41957; GFX11-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+121958; GFX11-NEXT: v_dual_mov_b32 v31, v0 :: v_dual_mov_b32 v0, 01959; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x01960; GFX11-NEXT: s_load_b128 s[36:39], s[4:5], 0x241961; GFX11-NEXT: s_mov_b32 s32, 01962; GFX11-NEXT: s_waitcnt lgkmcnt(0)1963; GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]1964; GFX11-NEXT: v_lshlrev_b32_e32 v0, 7, v01965; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1966; GFX11-NEXT: v_and_b32_e32 v12, 0xffff8000, v01967; GFX11-NEXT: v_add_co_u32 v2, s0, s36, v121968; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_3)1969; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s37, 0, s01970; GFX11-NEXT: v_add_co_u32 v8, s0, s38, v121971; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v21972; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)1973; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v3, vcc_lo1974; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v2, 0x20001975; GFX11-NEXT: v_add_co_ci_u32_e64 v9, null, s39, 0, s01976; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo1977; GFX11-NEXT: v_add_co_u32 v4, vcc_lo, 0x2000, v81978; GFX11-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v9, vcc_lo1979; GFX11-NEXT: v_add_co_u32 v8, vcc_lo, 0x3000, v81980; GFX11-NEXT: global_load_b64 v[6:7], v[2:3], off offset:-40961981; GFX11-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo1982; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off offset:20481983; GFX11-NEXT: s_clause 0x11984; GFX11-NEXT: global_load_b64 v[4:5], v[4:5], off offset:20481985; GFX11-NEXT: global_load_b64 v[10:11], v[8:9], off1986; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off1987; GFX11-NEXT: global_load_b64 v[8:9], v[8:9], off offset:20481988; GFX11-NEXT: s_waitcnt vmcnt(4)1989; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v61990; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)1991; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v7, vcc_lo1992; GFX11-NEXT: s_waitcnt vmcnt(2)1993; GFX11-NEXT: v_add_co_u32 v4, vcc_lo, v10, v41994; GFX11-NEXT: v_add_co_ci_u32_e64 v5, null, v11, v5, vcc_lo1995; GFX11-NEXT: s_waitcnt vmcnt(1)1996; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v2, v01997; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)1998; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo1999; GFX11-NEXT: s_waitcnt vmcnt(0)2000; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v8, v42001; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v9, v5, vcc_lo2002; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2003; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v22004; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo2005; GFX11-NEXT: global_store_b64 v12, v[0:1], s[36:37]2006; GFX11-NEXT: s_endpgm2007 ptr addrspace(1) %buffer2) {2008entry:2009 %call = tail call i64 @_Z13get_global_idj(i32 0)2010 %conv = and i64 %call, 2552011 %a0 = shl i64 %call, 72012 %idx.ext11 = and i64 %a0, 42949345282013 %add.ptr12 = getelementptr inbounds i8, ptr addrspace(1) %buffer1, i64 %idx.ext112014 2015 %add.ptr2 = getelementptr inbounds i8, ptr addrspace(1) %buffer2, i64 %idx.ext112016 2017 %addr1 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr12, i64 5122018 %load1 = load i64, ptr addrspace(1) %addr1, align 82019 %add.ptr8.3 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr12, i64 7682020 %load2 = load i64, ptr addrspace(1) %add.ptr8.3, align 82021 %add1 = add i64 %load2, %load12022 %add.ptr8.4 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr12, i64 10242023 %load3 = load i64, ptr addrspace(1) %add.ptr8.4, align 82024 %add2 = add i64 %load3, %add12025 2026 %add.ptr8.5 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr2, i64 12802027 %load4 = load i64, ptr addrspace(1) %add.ptr8.5, align 82028 2029 %add.ptr8.6 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr2, i64 15362030 %load5 = load i64, ptr addrspace(1) %add.ptr8.6, align 82031 %add3 = add i64 %load5, %load42032 2033 %add.ptr8.7 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr2, i64 17922034 %load6 = load i64, ptr addrspace(1) %add.ptr8.7, align 82035 %add4 = add i64 %load6, %add32036 2037 %add5 = add i64 %add2, %add42038 2039 store i64 %add5, ptr addrspace(1) %add.ptr12, align 82040 ret void2041}2042 2043define amdgpu_kernel void @ReverseOrder(ptr addrspace(1) %buffer) {2044; GFX8-LABEL: ReverseOrder:2045; GFX8: ; %bb.0: ; %entry2046; GFX8-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD02047; GFX8-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD12048; GFX8-NEXT: s_mov_b32 s38, -12049; GFX8-NEXT: s_mov_b32 s39, 0xe800002050; GFX8-NEXT: s_add_u32 s36, s36, s112051; GFX8-NEXT: s_addc_u32 s37, s37, 02052; GFX8-NEXT: s_getpc_b64 s[0:1]2053; GFX8-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+42054; GFX8-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+122055; GFX8-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x242056; GFX8-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x02057; GFX8-NEXT: s_mov_b64 s[0:1], s[36:37]2058; GFX8-NEXT: v_mov_b32_e32 v31, v02059; GFX8-NEXT: s_mov_b64 s[2:3], s[38:39]2060; GFX8-NEXT: v_mov_b32_e32 v0, 02061; GFX8-NEXT: s_mov_b32 s32, 02062; GFX8-NEXT: s_waitcnt lgkmcnt(0)2063; GFX8-NEXT: s_swappc_b64 s[30:31], s[4:5]2064; GFX8-NEXT: v_lshlrev_b32_e32 v1, 7, v02065; GFX8-NEXT: v_and_b32_e32 v1, 0xffff8000, v12066; GFX8-NEXT: v_mov_b32_e32 v2, s352067; GFX8-NEXT: v_add_u32_e32 v1, vcc, s34, v12068; GFX8-NEXT: v_mov_b32_e32 v3, 32069; GFX8-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc2070; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02071; GFX8-NEXT: v_add_u32_e32 v3, vcc, v1, v02072; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v2, vcc2073; GFX8-NEXT: s_movk_i32 s0, 0x38002074; GFX8-NEXT: v_add_u32_e32 v5, vcc, s0, v32075; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v4, vcc2076; GFX8-NEXT: s_movk_i32 s0, 0x30002077; GFX8-NEXT: v_add_u32_e32 v7, vcc, s0, v32078; GFX8-NEXT: v_addc_u32_e32 v8, vcc, 0, v4, vcc2079; GFX8-NEXT: s_movk_i32 s0, 0x28002080; GFX8-NEXT: v_add_u32_e32 v9, vcc, s0, v32081; GFX8-NEXT: v_addc_u32_e32 v10, vcc, 0, v4, vcc2082; GFX8-NEXT: flat_load_dwordx2 v[11:12], v[3:4]2083; GFX8-NEXT: flat_load_dwordx2 v[5:6], v[5:6]2084; GFX8-NEXT: flat_load_dwordx2 v[7:8], v[7:8]2085; GFX8-NEXT: flat_load_dwordx2 v[9:10], v[9:10]2086; GFX8-NEXT: s_movk_i32 s0, 0x20002087; GFX8-NEXT: v_add_u32_e32 v13, vcc, s0, v32088; GFX8-NEXT: v_addc_u32_e32 v14, vcc, 0, v4, vcc2089; GFX8-NEXT: s_movk_i32 s0, 0x18002090; GFX8-NEXT: v_add_u32_e32 v15, vcc, s0, v32091; GFX8-NEXT: v_addc_u32_e32 v16, vcc, 0, v4, vcc2092; GFX8-NEXT: flat_load_dwordx2 v[13:14], v[13:14]2093; GFX8-NEXT: flat_load_dwordx2 v[15:16], v[15:16]2094; GFX8-NEXT: s_movk_i32 s0, 0x10002095; GFX8-NEXT: v_add_u32_e32 v17, vcc, s0, v32096; GFX8-NEXT: v_addc_u32_e32 v18, vcc, 0, v4, vcc2097; GFX8-NEXT: flat_load_dwordx2 v[17:18], v[17:18]2098; GFX8-NEXT: v_add_u32_e32 v3, vcc, 0x800, v32099; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v4, vcc2100; GFX8-NEXT: flat_load_dwordx2 v[3:4], v[3:4]2101; GFX8-NEXT: s_waitcnt vmcnt(6)2102; GFX8-NEXT: v_add_u32_e32 v0, vcc, v5, v112103; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v6, v12, vcc2104; GFX8-NEXT: s_waitcnt vmcnt(5)2105; GFX8-NEXT: v_add_u32_e32 v0, vcc, v7, v02106; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v8, v5, vcc2107; GFX8-NEXT: s_waitcnt vmcnt(4)2108; GFX8-NEXT: v_add_u32_e32 v0, vcc, v9, v02109; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v10, v5, vcc2110; GFX8-NEXT: s_waitcnt vmcnt(3)2111; GFX8-NEXT: v_add_u32_e32 v0, vcc, v13, v02112; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v14, v5, vcc2113; GFX8-NEXT: s_waitcnt vmcnt(2)2114; GFX8-NEXT: v_add_u32_e32 v0, vcc, v15, v02115; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v16, v5, vcc2116; GFX8-NEXT: s_waitcnt vmcnt(1)2117; GFX8-NEXT: v_add_u32_e32 v0, vcc, v17, v02118; GFX8-NEXT: v_addc_u32_e32 v5, vcc, v18, v5, vcc2119; GFX8-NEXT: s_waitcnt vmcnt(0)2120; GFX8-NEXT: v_add_u32_e32 v3, vcc, v3, v02121; GFX8-NEXT: v_addc_u32_e32 v4, vcc, v4, v5, vcc2122; GFX8-NEXT: flat_store_dwordx2 v[1:2], v[3:4]2123; GFX8-NEXT: s_endpgm2124;2125; GFX9-LABEL: ReverseOrder:2126; GFX9: ; %bb.0: ; %entry2127; GFX9-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD02128; GFX9-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD12129; GFX9-NEXT: s_mov_b32 s38, -12130; GFX9-NEXT: s_mov_b32 s39, 0xe000002131; GFX9-NEXT: s_add_u32 s36, s36, s112132; GFX9-NEXT: s_addc_u32 s37, s37, 02133; GFX9-NEXT: s_getpc_b64 s[0:1]2134; GFX9-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+42135; GFX9-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+122136; GFX9-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x242137; GFX9-NEXT: v_mov_b32_e32 v31, v02138; GFX9-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x02139; GFX9-NEXT: s_mov_b64 s[0:1], s[36:37]2140; GFX9-NEXT: s_mov_b64 s[2:3], s[38:39]2141; GFX9-NEXT: v_mov_b32_e32 v0, 02142; GFX9-NEXT: s_mov_b32 s32, 02143; GFX9-NEXT: s_waitcnt lgkmcnt(0)2144; GFX9-NEXT: s_swappc_b64 s[30:31], s[4:5]2145; GFX9-NEXT: v_lshlrev_b32_e32 v1, 7, v02146; GFX9-NEXT: v_and_b32_e32 v22, 0xffff8000, v12147; GFX9-NEXT: v_mov_b32_e32 v1, s352148; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s34, v222149; GFX9-NEXT: v_mov_b32_e32 v3, 32150; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2151; GFX9-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02152; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v2, v02153; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2154; GFX9-NEXT: s_movk_i32 s0, 0x30002155; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s0, v02156; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v1, vcc2157; GFX9-NEXT: global_load_dwordx2 v[4:5], v[0:1], off2158; GFX9-NEXT: global_load_dwordx2 v[6:7], v[2:3], off offset:20482159; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off2160; GFX9-NEXT: s_movk_i32 s0, 0x20002161; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s0, v02162; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v1, vcc2163; GFX9-NEXT: global_load_dwordx2 v[10:11], v[2:3], off offset:20482164; GFX9-NEXT: s_movk_i32 s0, 0x10002165; GFX9-NEXT: v_add_co_u32_e32 v12, vcc, s0, v02166; GFX9-NEXT: v_addc_co_u32_e32 v13, vcc, 0, v1, vcc2167; GFX9-NEXT: global_load_dwordx2 v[14:15], v[12:13], off2168; GFX9-NEXT: global_load_dwordx2 v[16:17], v[2:3], off2169; GFX9-NEXT: global_load_dwordx2 v[18:19], v[12:13], off offset:20482170; GFX9-NEXT: global_load_dwordx2 v[20:21], v[0:1], off offset:20482171; GFX9-NEXT: s_waitcnt vmcnt(6)2172; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v6, v42173; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v7, v5, vcc2174; GFX9-NEXT: s_waitcnt vmcnt(5)2175; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v8, v02176; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v9, v1, vcc2177; GFX9-NEXT: s_waitcnt vmcnt(4)2178; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v10, v02179; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v11, v1, vcc2180; GFX9-NEXT: s_waitcnt vmcnt(2)2181; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v16, v02182; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v17, v1, vcc2183; GFX9-NEXT: s_waitcnt vmcnt(1)2184; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v18, v02185; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v19, v1, vcc2186; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v14, v02187; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v15, v1, vcc2188; GFX9-NEXT: s_waitcnt vmcnt(0)2189; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v20, v02190; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v21, v1, vcc2191; GFX9-NEXT: global_store_dwordx2 v22, v[0:1], s[34:35]2192; GFX9-NEXT: s_endpgm2193;2194; GFX10-LABEL: ReverseOrder:2195; GFX10: ; %bb.0: ; %entry2196; GFX10-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD02197; GFX10-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD12198; GFX10-NEXT: s_mov_b32 s38, -12199; GFX10-NEXT: s_mov_b32 s39, 0x31c160002200; GFX10-NEXT: s_add_u32 s36, s36, s112201; GFX10-NEXT: s_addc_u32 s37, s37, 02202; GFX10-NEXT: s_getpc_b64 s[0:1]2203; GFX10-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+42204; GFX10-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+122205; GFX10-NEXT: v_mov_b32_e32 v31, v02206; GFX10-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x02207; GFX10-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x242208; GFX10-NEXT: v_mov_b32_e32 v0, 02209; GFX10-NEXT: s_mov_b64 s[0:1], s[36:37]2210; GFX10-NEXT: s_mov_b64 s[2:3], s[38:39]2211; GFX10-NEXT: s_mov_b32 s32, 02212; GFX10-NEXT: s_waitcnt lgkmcnt(0)2213; GFX10-NEXT: s_swappc_b64 s[30:31], s[6:7]2214; GFX10-NEXT: v_lshlrev_b32_e32 v1, 7, v02215; GFX10-NEXT: v_mov_b32_e32 v2, 32216; GFX10-NEXT: v_and_b32_e32 v20, 0xffff8000, v12217; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02218; GFX10-NEXT: v_add_co_u32 v1, s0, s34, v202219; GFX10-NEXT: v_add_co_ci_u32_e64 v2, s0, s35, 0, s02220; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v1, v02221; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo2222; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, 0x3800, v02223; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v1, vcc_lo2224; GFX10-NEXT: v_add_co_u32 v4, vcc_lo, 0x3000, v02225; GFX10-NEXT: v_add_co_ci_u32_e32 v5, vcc_lo, 0, v1, vcc_lo2226; GFX10-NEXT: s_clause 0x12227; GFX10-NEXT: global_load_dwordx2 v[6:7], v[0:1], off2228; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off2229; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, 0x2800, v02230; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, 0, v1, vcc_lo2231; GFX10-NEXT: v_add_co_u32 v10, vcc_lo, 0x2000, v02232; GFX10-NEXT: v_add_co_ci_u32_e32 v11, vcc_lo, 0, v1, vcc_lo2233; GFX10-NEXT: v_add_co_u32 v12, vcc_lo, 0x1800, v02234; GFX10-NEXT: s_clause 0x12235; GFX10-NEXT: global_load_dwordx2 v[4:5], v[4:5], off2236; GFX10-NEXT: global_load_dwordx2 v[10:11], v[10:11], off2237; GFX10-NEXT: v_add_co_ci_u32_e32 v13, vcc_lo, 0, v1, vcc_lo2238; GFX10-NEXT: v_add_co_u32 v14, vcc_lo, 0x1000, v02239; GFX10-NEXT: v_add_co_ci_u32_e32 v15, vcc_lo, 0, v1, vcc_lo2240; GFX10-NEXT: s_clause 0x12241; GFX10-NEXT: global_load_dwordx2 v[12:13], v[12:13], off2242; GFX10-NEXT: global_load_dwordx2 v[2:3], v[2:3], off2243; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v02244; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2245; GFX10-NEXT: s_clause 0x12246; GFX10-NEXT: global_load_dwordx2 v[16:17], v[14:15], off2247; GFX10-NEXT: global_load_dwordx2 v[18:19], v[0:1], off2248; GFX10-NEXT: s_waitcnt vmcnt(6)2249; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v8, v62250; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v9, v7, vcc_lo2251; GFX10-NEXT: s_waitcnt vmcnt(5)2252; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v4, v02253; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v5, v1, vcc_lo2254; GFX10-NEXT: s_waitcnt vmcnt(2)2255; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v2, v02256; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo2257; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v10, v02258; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v11, v1, vcc_lo2259; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v12, v02260; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v13, v1, vcc_lo2261; GFX10-NEXT: s_waitcnt vmcnt(1)2262; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v16, v02263; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v17, v1, vcc_lo2264; GFX10-NEXT: s_waitcnt vmcnt(0)2265; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v18, v02266; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v19, v1, vcc_lo2267; GFX10-NEXT: global_store_dwordx2 v20, v[0:1], s[34:35]2268; GFX10-NEXT: s_endpgm2269;2270; GFX11-LABEL: ReverseOrder:2271; GFX11: ; %bb.0: ; %entry2272; GFX11-NEXT: s_getpc_b64 s[0:1]2273; GFX11-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+42274; GFX11-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+122275; GFX11-NEXT: v_dual_mov_b32 v31, v0 :: v_dual_mov_b32 v0, 02276; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x02277; GFX11-NEXT: s_load_b64 s[34:35], s[4:5], 0x242278; GFX11-NEXT: s_mov_b32 s32, 02279; GFX11-NEXT: s_waitcnt lgkmcnt(0)2280; GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]2281; GFX11-NEXT: v_lshlrev_b32_e32 v1, 7, v02282; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v02283; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2284; GFX11-NEXT: v_and_b32_e32 v16, 0xffff8000, v12285; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v02286; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2287; GFX11-NEXT: v_add_co_u32 v1, s0, s34, v162288; GFX11-NEXT: v_add_co_ci_u32_e64 v2, null, s35, 0, s02289; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2290; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v1, v02291; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo2292; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2293; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, 0x3000, v02294; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v1, vcc_lo2295; GFX11-NEXT: v_add_co_u32 v8, vcc_lo, 0x2000, v02296; GFX11-NEXT: s_clause 0x22297; GFX11-NEXT: global_load_b64 v[4:5], v[0:1], off2298; GFX11-NEXT: global_load_b64 v[6:7], v[2:3], off offset:20482299; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off2300; GFX11-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v1, vcc_lo2301; GFX11-NEXT: v_add_co_u32 v10, vcc_lo, 0x1000, v02302; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2303; GFX11-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v1, vcc_lo2304; GFX11-NEXT: s_clause 0x42305; GFX11-NEXT: global_load_b64 v[12:13], v[8:9], off offset:20482306; GFX11-NEXT: global_load_b64 v[14:15], v[10:11], off2307; GFX11-NEXT: global_load_b64 v[8:9], v[8:9], off2308; GFX11-NEXT: global_load_b64 v[10:11], v[10:11], off offset:20482309; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off offset:20482310; GFX11-NEXT: s_waitcnt vmcnt(6)2311; GFX11-NEXT: v_add_co_u32 v4, vcc_lo, v6, v42312; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2313; GFX11-NEXT: v_add_co_ci_u32_e64 v5, null, v7, v5, vcc_lo2314; GFX11-NEXT: s_waitcnt vmcnt(5)2315; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v2, v42316; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2317; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v3, v5, vcc_lo2318; GFX11-NEXT: s_waitcnt vmcnt(4)2319; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v12, v22320; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2321; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v13, v3, vcc_lo2322; GFX11-NEXT: s_waitcnt vmcnt(2)2323; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v8, v22324; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2325; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v9, v3, vcc_lo2326; GFX11-NEXT: s_waitcnt vmcnt(1)2327; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v10, v22328; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2329; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v11, v3, vcc_lo2330; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, v14, v22331; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2332; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, v15, v3, vcc_lo2333; GFX11-NEXT: s_waitcnt vmcnt(0)2334; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v22335; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2336; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo2337; GFX11-NEXT: global_store_b64 v16, v[0:1], s[34:35]2338; GFX11-NEXT: s_endpgm2339entry:2340 %call = tail call i64 @_Z13get_global_idj(i32 0)2341 %conv = and i64 %call, 2552342 %a0 = shl i64 %call, 72343 %idx.ext11 = and i64 %a0, 42949345282344 %add.ptr12 = getelementptr inbounds i8, ptr addrspace(1) %buffer, i64 %idx.ext112345 2346 %addr1 = getelementptr inbounds i64, ptr addrspace(1) %add.ptr12, i64 %conv2347 %load1 = load i64, ptr addrspace(1) %addr1, align 82348 2349 %add.ptr8.7 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 17922350 %load8 = load i64, ptr addrspace(1) %add.ptr8.7, align 82351 %add7 = add i64 %load8, %load12352 2353 %add.ptr8.6 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 15362354 %load7 = load i64, ptr addrspace(1) %add.ptr8.6, align 82355 %add6 = add i64 %load7, %add72356 2357 %add.ptr8.5 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 12802358 %load6 = load i64, ptr addrspace(1) %add.ptr8.5, align 82359 %add5 = add i64 %load6, %add62360 2361 %add.ptr8.4 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 10242362 %load5 = load i64, ptr addrspace(1) %add.ptr8.4, align 82363 %add4 = add i64 %load5, %add52364 2365 %add.ptr8.3 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 7682366 %load4 = load i64, ptr addrspace(1) %add.ptr8.3, align 82367 %add3 = add i64 %load4, %add42368 2369 %add.ptr8.2 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 5122370 %load3 = load i64, ptr addrspace(1) %add.ptr8.2, align 82371 %add2 = add i64 %load3, %add32372 2373 %addr2 = getelementptr inbounds i64, ptr addrspace(1) %addr1, i64 2562374 %load2 = load i64, ptr addrspace(1) %addr2, align 82375 %add1 = add i64 %load2, %add22376 2377 store i64 %add1, ptr addrspace(1) %add.ptr12, align 82378 ret void2379}2380 2381define hidden amdgpu_kernel void @negativeoffset(ptr addrspace(1) nocapture %buffer) {2382; GFX8-LABEL: negativeoffset:2383; GFX8: ; %bb.0: ; %entry2384; GFX8-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD02385; GFX8-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD12386; GFX8-NEXT: s_mov_b32 s38, -12387; GFX8-NEXT: s_mov_b32 s39, 0xe800002388; GFX8-NEXT: s_add_u32 s36, s36, s112389; GFX8-NEXT: s_addc_u32 s37, s37, 02390; GFX8-NEXT: s_getpc_b64 s[0:1]2391; GFX8-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+42392; GFX8-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+122393; GFX8-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x242394; GFX8-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x02395; GFX8-NEXT: s_mov_b64 s[0:1], s[36:37]2396; GFX8-NEXT: v_mov_b32_e32 v31, v02397; GFX8-NEXT: s_mov_b64 s[2:3], s[38:39]2398; GFX8-NEXT: v_mov_b32_e32 v0, 02399; GFX8-NEXT: s_mov_b32 s32, 02400; GFX8-NEXT: s_waitcnt lgkmcnt(0)2401; GFX8-NEXT: s_swappc_b64 s[30:31], s[4:5]2402; GFX8-NEXT: v_lshlrev_b32_e32 v1, 7, v02403; GFX8-NEXT: v_and_b32_e32 v1, 0xffff8000, v12404; GFX8-NEXT: v_mov_b32_e32 v2, s352405; GFX8-NEXT: v_add_u32_e32 v1, vcc, s34, v12406; GFX8-NEXT: v_mov_b32_e32 v3, 32407; GFX8-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc2408; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02409; GFX8-NEXT: v_add_u32_e32 v3, vcc, v1, v02410; GFX8-NEXT: v_addc_u32_e32 v0, vcc, 0, v2, vcc2411; GFX8-NEXT: s_movk_i32 s0, 0x8002412; GFX8-NEXT: v_add_u32_e32 v5, vcc, s0, v32413; GFX8-NEXT: v_addc_u32_e32 v6, vcc, -1, v0, vcc2414; GFX8-NEXT: v_add_u32_e32 v4, vcc, -1, v02415; GFX8-NEXT: flat_load_dwordx2 v[5:6], v[5:6]2416; GFX8-NEXT: flat_load_dwordx2 v[3:4], v[3:4]2417; GFX8-NEXT: s_waitcnt vmcnt(0)2418; GFX8-NEXT: v_add_u32_e32 v3, vcc, v3, v52419; GFX8-NEXT: v_addc_u32_e32 v4, vcc, v4, v6, vcc2420; GFX8-NEXT: flat_store_dwordx2 v[1:2], v[3:4]2421; GFX8-NEXT: s_endpgm2422;2423; GFX9-LABEL: negativeoffset:2424; GFX9: ; %bb.0: ; %entry2425; GFX9-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD02426; GFX9-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD12427; GFX9-NEXT: s_mov_b32 s38, -12428; GFX9-NEXT: s_mov_b32 s39, 0xe000002429; GFX9-NEXT: s_add_u32 s36, s36, s112430; GFX9-NEXT: s_addc_u32 s37, s37, 02431; GFX9-NEXT: s_getpc_b64 s[0:1]2432; GFX9-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+42433; GFX9-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+122434; GFX9-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x242435; GFX9-NEXT: v_mov_b32_e32 v31, v02436; GFX9-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x02437; GFX9-NEXT: s_mov_b64 s[0:1], s[36:37]2438; GFX9-NEXT: s_mov_b64 s[2:3], s[38:39]2439; GFX9-NEXT: v_mov_b32_e32 v0, 02440; GFX9-NEXT: s_mov_b32 s32, 02441; GFX9-NEXT: s_waitcnt lgkmcnt(0)2442; GFX9-NEXT: s_swappc_b64 s[30:31], s[4:5]2443; GFX9-NEXT: v_lshlrev_b32_e32 v1, 7, v02444; GFX9-NEXT: v_and_b32_e32 v8, 0xffff8000, v12445; GFX9-NEXT: v_mov_b32_e32 v1, s352446; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s34, v82447; GFX9-NEXT: v_mov_b32_e32 v3, 32448; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2449; GFX9-NEXT: v_lshlrev_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02450; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v2, v02451; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2452; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, 0x1000, v02453; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, -1, v1, vcc2454; GFX9-NEXT: v_add_u32_e32 v1, -1, v12455; GFX9-NEXT: global_load_dwordx2 v[4:5], v[2:3], off offset:-20482456; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off2457; GFX9-NEXT: s_waitcnt vmcnt(0)2458; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v6, v42459; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v7, v5, vcc2460; GFX9-NEXT: global_store_dwordx2 v8, v[0:1], s[34:35]2461; GFX9-NEXT: s_endpgm2462;2463; GFX10-LABEL: negativeoffset:2464; GFX10: ; %bb.0: ; %entry2465; GFX10-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD02466; GFX10-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD12467; GFX10-NEXT: s_mov_b32 s38, -12468; GFX10-NEXT: s_mov_b32 s39, 0x31c160002469; GFX10-NEXT: s_add_u32 s36, s36, s112470; GFX10-NEXT: s_addc_u32 s37, s37, 02471; GFX10-NEXT: s_getpc_b64 s[0:1]2472; GFX10-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+42473; GFX10-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+122474; GFX10-NEXT: v_mov_b32_e32 v31, v02475; GFX10-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x02476; GFX10-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x242477; GFX10-NEXT: v_mov_b32_e32 v0, 02478; GFX10-NEXT: s_mov_b64 s[0:1], s[36:37]2479; GFX10-NEXT: s_mov_b64 s[2:3], s[38:39]2480; GFX10-NEXT: s_mov_b32 s32, 02481; GFX10-NEXT: s_waitcnt lgkmcnt(0)2482; GFX10-NEXT: s_swappc_b64 s[30:31], s[6:7]2483; GFX10-NEXT: v_lshlrev_b32_e32 v1, 7, v02484; GFX10-NEXT: v_mov_b32_e32 v2, 32485; GFX10-NEXT: v_and_b32_e32 v8, 0xffff8000, v12486; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02487; GFX10-NEXT: v_add_co_u32 v1, s0, s34, v82488; GFX10-NEXT: v_add_co_ci_u32_e64 v2, s0, s35, 0, s02489; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v1, v02490; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo2491; GFX10-NEXT: v_add_co_u32 v2, vcc_lo, 0x800, v02492; GFX10-NEXT: v_add_co_ci_u32_e32 v3, vcc_lo, -1, v1, vcc_lo2493; GFX10-NEXT: v_add_nc_u32_e32 v1, -1, v12494; GFX10-NEXT: s_clause 0x12495; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off2496; GFX10-NEXT: global_load_dwordx2 v[6:7], v[0:1], off2497; GFX10-NEXT: s_waitcnt vmcnt(0)2498; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v6, v42499; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v7, v5, vcc_lo2500; GFX10-NEXT: global_store_dwordx2 v8, v[0:1], s[34:35]2501; GFX10-NEXT: s_endpgm2502;2503; GFX11-LABEL: negativeoffset:2504; GFX11: ; %bb.0: ; %entry2505; GFX11-NEXT: s_getpc_b64 s[0:1]2506; GFX11-NEXT: s_add_u32 s0, s0, _Z13get_global_idj@gotpcrel32@lo+42507; GFX11-NEXT: s_addc_u32 s1, s1, _Z13get_global_idj@gotpcrel32@hi+122508; GFX11-NEXT: v_dual_mov_b32 v31, v0 :: v_dual_mov_b32 v0, 02509; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x02510; GFX11-NEXT: s_load_b64 s[34:35], s[4:5], 0x242511; GFX11-NEXT: s_mov_b32 s32, 02512; GFX11-NEXT: s_waitcnt lgkmcnt(0)2513; GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]2514; GFX11-NEXT: v_lshlrev_b32_e32 v1, 7, v02515; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v02516; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2517; GFX11-NEXT: v_and_b32_e32 v4, 0xffff8000, v12518; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v02519; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2520; GFX11-NEXT: v_add_co_u32 v1, s0, s34, v42521; GFX11-NEXT: v_add_co_ci_u32_e64 v2, null, s35, 0, s02522; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2523; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v1, v02524; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo2525; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2526; GFX11-NEXT: v_add_co_u32 v2, vcc_lo, 0x1000, v02527; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, -1, v1, vcc_lo2528; GFX11-NEXT: v_add_nc_u32_e32 v1, -1, v12529; GFX11-NEXT: s_clause 0x12530; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off offset:-20482531; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off2532; GFX11-NEXT: s_waitcnt vmcnt(0)2533; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v22534; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2535; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo2536; GFX11-NEXT: global_store_b64 v4, v[0:1], s[34:35]2537; GFX11-NEXT: s_endpgm2538entry:2539 %call = tail call i64 @_Z13get_global_idj(i32 0) #22540 %conv = and i64 %call, 2552541 %0 = shl i64 %call, 72542 %idx.ext11 = and i64 %0, 42949345282543 %add.ptr12 = getelementptr inbounds i8, ptr addrspace(1) %buffer, i64 %idx.ext112544 2545 %buffer_wave = getelementptr inbounds i64, ptr addrspace(1) %add.ptr12, i64 %conv2546 2547 %addr1 = getelementptr inbounds i64, ptr addrspace(1) %buffer_wave, i64 -5368706562548 %load1 = load i64, ptr addrspace(1) %addr1, align 82549 2550 %addr2 = getelementptr inbounds i64, ptr addrspace(1) %buffer_wave, i64 -5368709122551 %load2 = load i64, ptr addrspace(1) %addr2, align 82552 2553 2554 %add = add i64 %load2, %load12555 2556 store i64 %add, ptr addrspace(1) %add.ptr12, align 82557 ret void2558}2559 2560define amdgpu_kernel void @negativeoffsetnullptr(ptr %buffer) {2561; GFX8-LABEL: negativeoffsetnullptr:2562; GFX8: ; %bb.0: ; %entry2563; GFX8-NEXT: s_load_dword s1, s[4:5], 0xec2564; GFX8-NEXT: s_add_u32 s0, 0, -12565; GFX8-NEXT: s_waitcnt lgkmcnt(0)2566; GFX8-NEXT: s_addc_u32 s1, s1, -12567; GFX8-NEXT: v_mov_b32_e32 v0, s02568; GFX8-NEXT: v_mov_b32_e32 v1, s12569; GFX8-NEXT: flat_load_ubyte v0, v[0:1]2570; GFX8-NEXT: s_mov_b64 s[0:1], 02571; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)2572; GFX8-NEXT: v_cmp_eq_u16_e32 vcc, 0, v02573; GFX8-NEXT: .LBB8_1: ; %branch2574; GFX8-NEXT: ; =>This Inner Loop Header: Depth=12575; GFX8-NEXT: s_and_b64 s[2:3], exec, vcc2576; GFX8-NEXT: s_or_b64 s[0:1], s[2:3], s[0:1]2577; GFX8-NEXT: s_andn2_b64 exec, exec, s[0:1]2578; GFX8-NEXT: s_cbranch_execnz .LBB8_12579; GFX8-NEXT: ; %bb.2: ; %end2580; GFX8-NEXT: s_endpgm2581;2582; GFX9-LABEL: negativeoffsetnullptr:2583; GFX9: ; %bb.0: ; %entry2584; GFX9-NEXT: s_mov_b64 s[0:1], src_private_base2585; GFX9-NEXT: v_mov_b32_e32 v1, s12586; GFX9-NEXT: v_add_co_u32_e64 v0, vcc, -1, 02587; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc2588; GFX9-NEXT: flat_load_ubyte v0, v[0:1]2589; GFX9-NEXT: s_mov_b64 s[0:1], 02590; GFX9-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)2591; GFX9-NEXT: v_cmp_eq_u16_e32 vcc, 0, v02592; GFX9-NEXT: .LBB8_1: ; %branch2593; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12594; GFX9-NEXT: s_and_b64 s[2:3], exec, vcc2595; GFX9-NEXT: s_or_b64 s[0:1], s[2:3], s[0:1]2596; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2597; GFX9-NEXT: s_cbranch_execnz .LBB8_12598; GFX9-NEXT: ; %bb.2: ; %end2599; GFX9-NEXT: s_endpgm2600;2601; GFX10-LABEL: negativeoffsetnullptr:2602; GFX10: ; %bb.0: ; %entry2603; GFX10-NEXT: s_mov_b64 s[0:1], src_private_base2604; GFX10-NEXT: s_add_u32 s0, 0, -12605; GFX10-NEXT: s_addc_u32 s1, s1, -12606; GFX10-NEXT: v_mov_b32_e32 v0, s02607; GFX10-NEXT: v_mov_b32_e32 v1, s12608; GFX10-NEXT: s_mov_b32 s0, 02609; GFX10-NEXT: flat_load_ubyte v0, v[0:1]2610; GFX10-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)2611; GFX10-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0, v02612; GFX10-NEXT: .LBB8_1: ; %branch2613; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12614; GFX10-NEXT: s_and_b32 s1, exec_lo, vcc_lo2615; GFX10-NEXT: s_or_b32 s0, s1, s02616; GFX10-NEXT: s_andn2_b32 exec_lo, exec_lo, s02617; GFX10-NEXT: s_cbranch_execnz .LBB8_12618; GFX10-NEXT: ; %bb.2: ; %end2619; GFX10-NEXT: s_endpgm2620;2621; GFX11-TRUE16-LABEL: negativeoffsetnullptr:2622; GFX11-TRUE16: ; %bb.0: ; %entry2623; GFX11-TRUE16-NEXT: s_mov_b64 s[0:1], src_private_base2624; GFX11-TRUE16-NEXT: v_add_co_u32 v0, s0, -1, 02625; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2626; GFX11-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s02627; GFX11-TRUE16-NEXT: s_mov_b32 s0, 02628; GFX11-TRUE16-NEXT: flat_load_d16_u8 v0, v[0:1]2629; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)2630; GFX11-TRUE16-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0, v0.l2631; GFX11-TRUE16-NEXT: .LBB8_1: ; %branch2632; GFX11-TRUE16-NEXT: ; =>This Inner Loop Header: Depth=12633; GFX11-TRUE16-NEXT: s_and_b32 s1, exec_lo, vcc_lo2634; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2635; GFX11-TRUE16-NEXT: s_or_b32 s0, s1, s02636; GFX11-TRUE16-NEXT: s_and_not1_b32 exec_lo, exec_lo, s02637; GFX11-TRUE16-NEXT: s_cbranch_execnz .LBB8_12638; GFX11-TRUE16-NEXT: ; %bb.2: ; %end2639; GFX11-TRUE16-NEXT: s_endpgm2640;2641; GFX11-FAKE16-LABEL: negativeoffsetnullptr:2642; GFX11-FAKE16: ; %bb.0: ; %entry2643; GFX11-FAKE16-NEXT: s_mov_b64 s[0:1], src_private_base2644; GFX11-FAKE16-NEXT: v_add_co_u32 v0, s0, -1, 02645; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2646; GFX11-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s02647; GFX11-FAKE16-NEXT: s_mov_b32 s0, 02648; GFX11-FAKE16-NEXT: flat_load_u8 v0, v[0:1]2649; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)2650; GFX11-FAKE16-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0, v02651; GFX11-FAKE16-NEXT: .LBB8_1: ; %branch2652; GFX11-FAKE16-NEXT: ; =>This Inner Loop Header: Depth=12653; GFX11-FAKE16-NEXT: s_and_b32 s1, exec_lo, vcc_lo2654; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2655; GFX11-FAKE16-NEXT: s_or_b32 s0, s1, s02656; GFX11-FAKE16-NEXT: s_and_not1_b32 exec_lo, exec_lo, s02657; GFX11-FAKE16-NEXT: s_cbranch_execnz .LBB8_12658; GFX11-FAKE16-NEXT: ; %bb.2: ; %end2659; GFX11-FAKE16-NEXT: s_endpgm2660entry:2661 %null = select i1 false, ptr %buffer, ptr addrspacecast (ptr addrspace(5) null to ptr)2662 %gep = getelementptr inbounds i8, ptr %null, i64 -12663 %ld = load i8, ptr %gep2664 %cmp = icmp eq i8 %ld, 02665 br label %branch2666 2667branch:2668 br i1 %cmp, label %end, label %branch2669 2670end:2671 ret void2672}2673 2674 2675attributes #0 = { nounwind "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-cluster-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-cluster-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-cluster-id-z" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }2676