; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx9-generic < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX9-GENERIC-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx906 < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX906-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx908 < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX908-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX90A-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx9-4-generic < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX9-4-GENERIC-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX942-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx950 < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX950-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx10-1-generic < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX10-1-GENERIC-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1012 < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX1012-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx10-3-generic < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX10-3-GENERIC-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx11-generic < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX11-GENERIC-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1250 < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX1250-SDAG %s ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx12-generic < %s | FileCheck -check-prefixes=GFX,GFX-SDAG,GFX12-GENERIC-SDAG %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx9-generic < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX9-GENERIC-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx906 < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX906-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx908 < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX908-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX90A-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx9-4-generic < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX9-4-GENERIC-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX942-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx950 < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX950-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx10-1-generic < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX10-1-GENERIC-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1012 < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX1012-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx10-3-generic < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX10-3-GENERIC-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx11-generic < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX11-GENERIC-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1250 < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX1250-ISEL %s ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx12-generic < %s | FileCheck -check-prefixes=GFX,GFX-ISEL,GFX12-GENERIC-ISEL %s ;;============================================================================== ;; A few basic test cases ;;============================================================================== define <4 x i32> @global_load_b128_0_00(ptr addrspace(1) %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_0_00: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_0_00: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_0_00: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_0_00: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_0_00: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_0_00: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_0_00: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_0_00: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_0_00: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_0_00: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_0_00: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_0_00: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_0_00: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_0_00: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_0_00: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_0_00: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_0_00: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_0_00: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_0_00: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_0_00: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_0_00: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_0_00: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_0_00: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_0_00: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_0_00: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_0_00: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !0) ret <4 x i32> %data } define <4 x i32> @global_load_b128_0_01(ptr addrspace(1) %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_0_01: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_0_01: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_0_01: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_0_01: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_0_01: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_0_01: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_0_01: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_0_01: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_0_01: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_0_01: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_0_01: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_0_01: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_0_01: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_0_01: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_0_01: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_0_01: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_0_01: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_0_01: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_0_01: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_0_01: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_0_01: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_0_01: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_0_01: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_0_01: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_0_01: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_0_01: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !1) ret <4 x i32> %data } define <4 x i32> @global_load_b128_0_cluster(ptr addrspace(1) %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_0_cluster: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_0_cluster: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_0_cluster: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_0_cluster: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_0_cluster: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_0_cluster: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_0_cluster: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_0_cluster: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_0_cluster: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_0_cluster: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_0_cluster: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_0_cluster: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_0_cluster: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_0_cluster: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_0_cluster: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_0_cluster: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_0_cluster: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_0_cluster: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_0_cluster: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_0_cluster: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_0_cluster: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_0_cluster: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_0_cluster: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_0_cluster: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_0_cluster: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_0_cluster: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !2) ret <4 x i32> %data } define <4 x i32> @global_load_b128_0_10(ptr addrspace(1) %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_0_10: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_0_10: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_0_10: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_0_10: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_0_10: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_0_10: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_0_10: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_0_10: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_0_10: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_0_10: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_0_10: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_0_10: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_0_10: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_0_10: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_0_10: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_0_10: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_0_10: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_0_10: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_0_10: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_0_10: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_0_10: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_0_10: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_0_10: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_0_10: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_0_10: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_0_10: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !3) ret <4 x i32> %data } define <4 x i32> @global_load_b128_0_11(ptr addrspace(1) %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_0_11: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_0_11: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_0_11: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_0_11: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_0_11: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_0_11: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_0_11: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_0_11: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_0_11: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_0_11: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_0_11: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_0_11: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_0_11: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_0_11: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_0_11: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_0_11: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_0_11: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_0_11: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_0_11: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_0_11: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_0_11: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_0_11: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_0_11: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_0_11: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_0_11: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_0_11: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !4) ret <4 x i32> %data } define <4 x i32> @global_load_b128_saddr_0_00(ptr addrspace(1) inreg %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_00: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_00: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !0) ret <4 x i32> %data } define <4 x i32> @global_load_b128_saddr_0_01(ptr addrspace(1) inreg %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_01: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_01: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !1) ret <4 x i32> %data } define <4 x i32> @global_load_b128_saddr_0_cluster(ptr addrspace(1) inreg %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_cluster: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_cluster: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !2) ret <4 x i32> %data } define <4 x i32> @global_load_b128_saddr_0_02(ptr addrspace(1) inreg %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_02: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_02: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !3) ret <4 x i32> %data } define <4 x i32> @global_load_b128_saddr_0_03(ptr addrspace(1) inreg %addr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX906-SDAG: ; %bb.0: ; %entry ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX908-SDAG: ; %bb.0: ; %entry ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX90A-SDAG: ; %bb.0: ; %entry ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX942-SDAG: ; %bb.0: ; %entry ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX950-SDAG: ; %bb.0: ; %entry ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX1012-SDAG: ; %bb.0: ; %entry ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX1250-SDAG: ; %bb.0: ; %entry ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_b128_saddr_0_03: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %entry ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX906-ISEL: ; %bb.0: ; %entry ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX908-ISEL: ; %bb.0: ; %entry ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX90A-ISEL: ; %bb.0: ; %entry ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX942-ISEL: ; %bb.0: ; %entry ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX950-ISEL: ; %bb.0: ; %entry ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX1012-ISEL: ; %bb.0: ; %entry ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX1250-ISEL: ; %bb.0: ; %entry ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_b128_saddr_0_03: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %entry ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] entry: %data = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !4) ret <4 x i32> %data } ;;============================================================================== ;; Signed offset addressing modes (derived from global-saddr-load.ll) { ;;============================================================================== ;;------------------------------------------------------------------------------ ;; No vgpr offset, constants ;;------------------------------------------------------------------------------ ;; base only define <4 x float> @global_load_i8_offset_0(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_0: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_0: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_0: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_0: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_0: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_0: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_0: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_0: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_0: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_0: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_0: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_0: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_0: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_0: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_0: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_0: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_0: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_0: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_0: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_0: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_0: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_0: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_0: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_0: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_0: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_0: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %sbase, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum gfx9 immediate offset define <4 x float> @global_load_i8_offset_4095(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_4095: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_4095: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_4095: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_4095: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_4095: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_4095: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_4095: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_4095: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_4095: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_4095: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_4095: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_4095: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_4095: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_4095: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_4095: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_4095: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_4095: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_4095: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_4095: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_4095: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_4095: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_4095: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_4095: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_4095: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_4095: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_4095: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4095 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum gfx9 immediate offset + 1 define <4 x float> @global_load_i8_offset_4096(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_4096: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_4096: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_4096: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_4096: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_4096: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_4096: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_4096: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_4096: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_4096: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_4096: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_4096: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_4096: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_4096: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_4096: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_4096: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_4096: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_4096: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_4096: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_4096: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_4096: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_4096: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_4096: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_4096: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_4096: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_4096: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_4096: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4096 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum gfx9 immediate offset + 2 define <4 x float> @global_load_i8_offset_4097(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_4097: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_4097: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_4097: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_4097: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_4097: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_4097: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_4097: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_4097: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_4097: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_4097: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_4097: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:1 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_4097: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4097 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_4097: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4097 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_4097: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1001, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_4097: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1001, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_4097: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1001, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_4097: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1001, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_4097: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1001, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_4097: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1001, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_4097: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1001, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_4097: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1001, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_4097: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1001, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_4097: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1001, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_4097: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1001, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_4097: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4097 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_4097: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4097 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4097 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum negative gfx9 immediate offset define <4 x float> @global_load_i8_offset_neg4096(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4096: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4096: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4096 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum negative gfx9 immediate offset -1 define <4 x float> @global_load_i8_offset_neg4097(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4097 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4097: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4097 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4097 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4097: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4097 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4097 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum negative gfx9 immediate offset -2 define <4 x float> @global_load_i8_offset_neg4098(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4098 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg4098: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4098 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffeffe, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffeffe, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffeffe, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffeffe, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffeffe, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffeffe, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffeffe, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffeffe, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffeffe, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffeffe, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffeffe, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4098 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg4098: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4098 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4098 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum gfx10 immediate offset define <4 x float> @global_load_i8_offset_2048(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_2048: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_2048: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_2048: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_2048: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_2048: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_2048: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_2048: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_2048: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_2048: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_2048: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_2048: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_2048: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_2048: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_2048: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_2048: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_2048: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_2048: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_2048: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_2048: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_2048: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_2048: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_2048: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_2048: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_2048: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_2048: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_2048: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 2048 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum gfx10 immediate offset + 1 define <4 x float> @global_load_i8_offset_2049(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_2049: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_2049: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_2049: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_2049: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_2049: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_2049: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_2049: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_2049: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_2049: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_2049: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_2049: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2049 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_2049: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2049 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_2049: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2049 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_2049: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_2049: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_2049: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_2049: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_2049: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_2049: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_2049: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2049 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_2049: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x801, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_2049: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x801, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_2049: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x801, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_2049: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2049 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_2049: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2049 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_2049: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2049 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 2049 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum gfx10 immediate offset + 2 define <4 x float> @global_load_i8_offset_2050(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_2050: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_2050: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_2050: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_2050: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_2050: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_2050: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_2050: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_2050: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_2050: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_2050: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_2050: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2050 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_2050: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2050 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_2050: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2050 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_2050: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_2050: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_2050: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_2050: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_2050: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_2050: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_2050: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2050 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_2050: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x802, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_2050: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x802, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_2050: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x802, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_2050: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2050 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_2050: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2050 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_2050: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2050 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 2050 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum negative gfx10 immediate offset define <4 x float> @global_load_i8_offset_neg2048(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2048: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2048: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -2048 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum negative gfx10 immediate offset - 1 define <4 x float> @global_load_i8_offset_neg2049(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2049: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2049: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -2049 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; base with maximum negative gfx10 immediate offset - 1 define <4 x float> @global_load_i8_offset_neg2050(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2050 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2050 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg2050: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2050 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2050 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7fe, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7fe, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7fe, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2050 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2050 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg2050: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2050 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -2050 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_0x7FFFFF(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_0x7FFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 8388607 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_0xFFFFFF(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388608 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388608 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388608 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388608 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -8388608 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_0xFFFFFFFF(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_0xFFFFFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294967295 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_0x100000000(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_u32_e32 v1, 1, v1 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_u32_e32 v1, 1, v1 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_u32_e32 v1, 1, v1 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_u32_e32 v1, 1, v1 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_u32_e32 v1, 1, v1 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_u32_e32 v1, 1, v1 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_u32_e32 v1, 1, v1 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_nc_u32_e32 v1, 1, v1 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_nc_u32_e32 v1, 1, v1 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_nc_u32_e32 v1, 1, v1 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_nc_u32_e32 v1, 1, v1 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_nc_u32_e32 v1, 1, v1 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000000: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_nc_u32_e32 v1, 1, v1 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000000: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294967296 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_0x100000001(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:1 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:1 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000001: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:1 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000001: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294967297 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_0x100000FFF(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100000FFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xfff, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xfff, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xfff, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xfff, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xfff, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xfff, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xfff, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100000FFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294971391 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_0x100001000(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_0x100001000: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_0x100001000: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 1, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294971392 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_neg0xFFFFFFFF(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2047 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2047 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2047 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4095 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800000, v0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388607 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800000, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388607 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0xFFFFFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4294967295 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_neg0x100000000(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_u32_e32 v1, -1, v1 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_u32_e32 v1, -1, v1 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_u32_e32 v1, -1, v1 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_u32_e32 v1, -1, v1 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_u32_e32 v1, -1, v1 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_u32_e32 v1, -1, v1 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_u32_e32 v1, -1, v1 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_nc_u32_e32 v1, -1, v1 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_nc_u32_e32 v1, -1, v1 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_nc_u32_e32 v1, -1, v1 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_nc_u32_e32 v1, -1, v1 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_nc_u32_e32 v1, -1, v1 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000000: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_nc_u32_e32 v1, -1, v1 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000000: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, 0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4294967296 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_neg0x100000001(ptr addrspace(1) %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_neg0x100000001: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -2, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -2, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -2, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -2, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -2, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -2, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, -1, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -2, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -2, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -2, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -2, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -2, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -2, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_neg0x100000001: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, -1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -2, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4294967297 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; Basic addressing patterns ;;------------------------------------------------------------------------------ ;; Basic pattern, no immediate offset. define <4 x float> @global_load_i8_zext_vgpr(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx9 define <4 x float> @global_load_i8_zext_vgpr_offset_4095(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 4095 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx9 + 1 define <4 x float> @global_load_i8_zext_vgpr_offset_4096(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4096: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 4096 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum negative offset on gfx9 define <4 x float> @global_load_i8_zext_vgpr_offset_neg4096(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4096 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4096: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4096 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -4096 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum negative offset on gfx9 - 1 define <4 x float> @global_load_i8_zext_vgpr_offset_neg4097(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4097 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4097 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4097 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg4097: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4097 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -4097 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx10 define <4 x float> @global_load_i8_zext_vgpr_offset_2047(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2047 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2047 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2047 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2047 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2047 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2047: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2047 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 2047 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx10 + 1 define <4 x float> @global_load_i8_zext_vgpr_offset_2048(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2048 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_2048: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:2048 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 2048 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum negative offset on gfx10 define <4 x float> @global_load_i8_zext_vgpr_offset_neg2048(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2048 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2048: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2048 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -2048 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum negative offset on gfx10 - 1 define <4 x float> @global_load_i8_zext_vgpr_offset_neg2049(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2049 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_neg2049: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2049 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -2049 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx12. define <4 x float> @global_load_i8_zext_vgpr_offset_0x7FFFFF(ptr addrspace(1) %sbase, i32 %voffset) { %zext.offset = zext i32 %voffset to i64 ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0x7FFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 8388607 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Minimum offset on gfx12. define <4 x float> @global_load_i8_zext_vgpr_offset_0xFFFFFF(ptr addrspace(1) %sbase, i32 %voffset) { %zext.offset = zext i32 %voffset to i64 ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388608 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388608 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388608 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_0xFFFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388608 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -8388608 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx9, and immediate needs to be moved lower. define <4 x float> @global_load_i8_zext_vgpr_offset_4095_gep_order(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_offset_4095_gep_order: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4095 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; pointer addressing done in integers define <4 x float> @global_load_i8_zext_vgpr_ptrtoint(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %sbase.as.int, %zext.offset %dirty.gep = inttoptr i64 %add to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; zext forced to LHS of addressing expression define <4 x float> @global_load_i8_zext_vgpr_ptrtoint_commute_add(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[2:3], v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %zext.offset, %sbase.as.int %dirty.gep = inttoptr i64 %add to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; zext forced to LHS of addressing expression, with immediate offset define <4 x float> @global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[2:3], v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %zext.offset, %sbase.as.int %add.immoffset = add i64 %add, 128 %dirty.gep = inttoptr i64 %add.immoffset to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; zext forced to LHS of addressing expression, with immediate offset in non-canonical position define <4 x float> @global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1(ptr addrspace(1) %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add.immoffset = add i64 %sbase.as.int, 128 %add = add i64 %zext.offset, %add.immoffset %dirty.gep = inttoptr i64 %add to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; Uniformity edge cases ;;------------------------------------------------------------------------------ ;; Both 64-bit base and 32-bit offset are scalar define <4 x float> @global_load_i8_zext_uniform_offset(ptr addrspace(1) %sbase, i32 %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Both 64-bit base and 32-bit offset are scalar, with immediate offset. define <4 x float> @global_load_i8_zext_uniform_offset_immoffset(ptr addrspace(1) %sbase, i32 %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-24 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-24 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-24 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-24 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-24 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-24 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_uniform_offset_immoffset: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-24 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -24 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Both components uniform, zext forced to LHS of addressing expression define <4 x float> @global_load_i8_zext_sgpr_ptrtoint_commute_add(ptr addrspace(1) %sbase, i32 %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[2:3], v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %zext.offset, %sbase.as.int %dirty.gep = inttoptr i64 %add to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Both components uniform, zext forced to LHS of addressing expression, with immediate offset define <4 x float> @global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0(ptr addrspace(1) %sbase, i32 %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 0, v[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[2:3], v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %zext.offset, %sbase.as.int %add.immoffset = add i64 %add, 128 %dirty.gep = inttoptr i64 %add.immoffset to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; divergent 64-bit base, 32-bit scalar offset. define <4 x float> @global_load_i8_vgpr64_sgpr32(ptr addrspace(1) %vbase, i32 %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %vbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; divergent 64-bit base, 32-bit scalar offset, with imm offset define <4 x float> @global_load_i8_vgpr64_sgpr32_offset_4095(ptr addrspace(1) %vbase, i32 %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_vgpr64_sgpr32_offset_4095: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %vbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 4095 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; Natural addressing shifts with restricted range ;;------------------------------------------------------------------------------ ;; Cannot push the shift into 32-bits, and cannot match. define <4 x float> @global_load_f32_natural_addressing(ptr addrspace(1) %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX906-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX908-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-SDAG-NEXT: v_lshlrev_b64_e32 v[2:3], 2, v[2:3] ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX942-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX950-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-ISEL-NEXT: s_wait_xcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b64_e32 v[2:3], 2, v[2:3] ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr %zext.offset = zext i32 %voffset to i64 %gep = getelementptr inbounds float, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Cannot push the shift into 32-bits, with an immediate offset. define <4 x float> @global_load_f32_natural_addressing_immoffset(ptr addrspace(1) %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:128 glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_f32_natural_addressing_immoffset: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:128 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 128 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Range is sufficiently restricted to push the shift into 32-bits. define <4 x float> @global_load_f32_zext_vgpr_range(ptr addrspace(1) %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_lshlrev_b32 v2, 2, v2 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_xcnt 0x0 ; GFX1250-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr, !range !5, !noundef !{} %zext.offset = zext i32 %voffset to i64 %gep = getelementptr inbounds float, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Range is sufficiently restricted to push the shift into 32-bits, with an imm offset define <4 x float> @global_load_f32_zext_vgpr_range_imm_offset(ptr addrspace(1) %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:400 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_lshlrev_b32 v2, 2, v2 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[0:1], v[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:400 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:400 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:400 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:400 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_xcnt 0x0 ; GFX1250-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:400 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_imm_offset: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v2, 2, v2 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:400 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr, !range !5, !noundef !{} %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds float, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds float, ptr addrspace(1) %gep0, i64 100 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Range is 1 beyond the limit where we can move the shift into 32-bits. define <4 x float> @global_load_f32_zext_vgpr_range_too_large(ptr addrspace(1) %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX906-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX908-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-SDAG-NEXT: v_lshlrev_b64_e32 v[2:3], 2, v[2:3] ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX942-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX950-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v2, v[2:3], off ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX1250-ISEL-NEXT: s_wait_xcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_f32_zext_vgpr_range_too_large: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v2, v[2:3], off ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b64_e32 v[2:3], 2, v[2:3] ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr, !range !6, !noundef !{} %zext.offset = zext i32 %voffset to i64 %gep = getelementptr inbounds float, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; or-with-constant as add ;;------------------------------------------------------------------------------ ;; Check add-as-or with split 64-bit or. define <4 x float> @global_load_i8_offset_or_i64_imm_offset_16(ptr addrspace(6) %sbase, i32 %idx) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX10-1-GENERIC-SDAG-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[1:2], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX1012-SDAG-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[1:2], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX10-3-GENERIC-SDAG-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[1:2], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX11-GENERIC-SDAG-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[1:2], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_bitop2_b32 v2, 16, v1 bitop3:0x54 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[2:3], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX12-GENERIC-SDAG-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[1:2], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_or_b32_e32 v0, 16, v1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[1:2], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX1012-ISEL-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[1:2], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[1:2], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX11-GENERIC-ISEL-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[1:2], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_bitop2_b32 v2, 16, v1 bitop3:0x54 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[2:3], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_16: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX12-GENERIC-ISEL-NEXT: v_or_b32_e32 v1, 16, v1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[1:2], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.idx = zext i32 %idx to i64 %or = or i64 %zext.idx, 16 %addr = inttoptr i64 %or to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_i8_offset_or_i64_imm_offset_4160(ptr addrspace(6) %sbase, i32 %idx) { ; GFX9-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX10-1-GENERIC-SDAG-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[1:2], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX1012-SDAG-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[1:2], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX10-3-GENERIC-SDAG-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[1:2], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX11-GENERIC-SDAG-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[1:2], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-SDAG-NEXT: v_or_b32_e32 v2, 0x1040, v1 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[2:3], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, 0 ; GFX12-GENERIC-SDAG-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[1:2], off scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[1:2], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX1012-ISEL-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[1:2], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[1:2], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX11-GENERIC-ISEL-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[1:2], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-ISEL-NEXT: v_or_b32_e32 v2, 0x1040, v1 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[2:3], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_i8_offset_or_i64_imm_offset_4160: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, 0 ; GFX12-GENERIC-ISEL-NEXT: v_or_b32_e32 v1, 0x1040, v1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[1:2], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.idx = zext i32 %idx to i64 %or = or i64 %zext.idx, 4160 %addr = inttoptr i64 %or to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; Full 64-bit scalar add. ;;------------------------------------------------------------------------------ define <4 x float> @global_addr_64bit_lsr_iv(ptr addrspace(1) %arg) { ; GFX9-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX9-GENERIC-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX9-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX9-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX9-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX9-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX9-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX9-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, s5 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s4, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v2, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX906-SDAG: ; %bb.0: ; %bb ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX906-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX906-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX906-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX906-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX906-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX906-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX906-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX906-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v2, s5 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s4, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v2, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX908-SDAG: ; %bb.0: ; %bb ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX908-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX908-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX908-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX908-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX908-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX908-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX908-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX908-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v2, s5 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s4, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v2, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX90A-SDAG: ; %bb.0: ; %bb ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX90A-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX90A-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX90A-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX90A-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX90A-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX90A-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX90A-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX90A-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v2, s5 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s4, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v2, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX9-4-GENERIC-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX9-4-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-4-GENERIC-SDAG-NEXT: s_add_i32 s0, s0, 1 ; GFX9-4-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s0, 0xff ; GFX9-4-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX9-4-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 2, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX942-SDAG: ; %bb.0: ; %bb ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX942-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX942-SDAG-NEXT: s_add_i32 s0, s0, 1 ; GFX942-SDAG-NEXT: s_cmpk_eq_i32 s0, 0xff ; GFX942-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX942-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX942-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 2, v[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX950-SDAG: ; %bb.0: ; %bb ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX950-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX950-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX950-SDAG-NEXT: s_add_i32 s0, s0, 1 ; GFX950-SDAG-NEXT: s_cmpk_eq_i32 s0, 0xff ; GFX950-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX950-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX950-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 2, v[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX10-1-GENERIC-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX10-1-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-1-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX10-1-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX10-1-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX10-1-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX10-1-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, s5, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX1012-SDAG: ; %bb.0: ; %bb ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX1012-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX1012-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1012-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX1012-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX1012-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX1012-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX1012-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX1012-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s4 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, s5, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX10-3-GENERIC-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX10-3-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-3-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX10-3-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX10-3-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX10-3-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX10-3-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s5, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX11-GENERIC-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX11-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX11-GENERIC-SDAG-NEXT: s_add_i32 s0, s0, 1 ; GFX11-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s0, 0xff ; GFX11-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX11-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX11-GENERIC-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX11-GENERIC-SDAG-NEXT: s_lshl_b64 s[0:1], s[0:1], 2 ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX1250-SDAG: ; %bb.0: ; %bb ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX1250-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX1250-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, 1 ; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s0, 0xff ; GFX1250-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX1250-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX1250-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 2, v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX12-GENERIC-SDAG-NEXT: .LBB62_1: ; %bb3 ; GFX12-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_add_co_i32 s0, s0, 1 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_cmp_eq_u32 s0, 0xff ; GFX12-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB62_1 ; GFX12-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX12-GENERIC-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_lshl_b64 s[0:1], s[0:1], 2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX9-GENERIC-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX9-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-GENERIC-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX9-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX9-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX9-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX906-ISEL: ; %bb.0: ; %bb ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX906-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX906-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX906-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX906-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX906-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX906-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX906-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX908-ISEL: ; %bb.0: ; %bb ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX908-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX908-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX908-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX908-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX908-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX908-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX908-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX90A-ISEL: ; %bb.0: ; %bb ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX90A-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX90A-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX90A-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX90A-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX90A-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX90A-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX90A-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX9-4-GENERIC-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX9-4-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-4-GENERIC-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX9-4-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX9-4-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX9-4-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX942-ISEL: ; %bb.0: ; %bb ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX942-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX942-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX942-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX942-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX942-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX942-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX942-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX950-ISEL: ; %bb.0: ; %bb ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX950-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX950-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX950-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX950-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX950-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX950-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX950-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX10-1-GENERIC-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX10-1-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX10-1-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX10-1-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX1012-ISEL: ; %bb.0: ; %bb ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX1012-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX1012-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1012-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX1012-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX1012-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX1012-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1012-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX10-3-GENERIC-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX10-3-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX10-3-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX10-3-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX11-GENERIC-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX11-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX11-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX11-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX11-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX1250-ISEL: ; %bb.0: ; %bb ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX1250-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX1250-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX1250-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX1250-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX1250-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX12-GENERIC-ISEL-NEXT: .LBB62_1: ; %bb3 ; GFX12-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX12-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX12-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB62_1 ; GFX12-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b64_e32 v[2:3], 2, v[2:3] ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] bb: br label %bb3 bb2: ; preds = %bb3 ret <4 x float> %i6 bb3: ; preds = %bb3, %bb %i = phi i32 [ 0, %bb ], [ %i8, %bb3 ] %i4 = zext i32 %i to i64 %i5 = getelementptr inbounds float, ptr addrspace(1) %arg, i64 %i4 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %i5, metadata !2) %i6 = bitcast <4 x i32> %load to <4 x float> %i8 = add nuw nsw i32 %i, 1 %i9 = icmp eq i32 %i8, 256 br i1 %i9, label %bb2, label %bb3 } ;; Make sure we only have a single zero vaddr initialization. define <4 x float> @global_addr_64bit_lsr_iv_multiload(ptr addrspace(1) %arg, ptr addrspace(1) %arg.1, i32 %x) { ; GFX9-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX9-GENERIC-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX9-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX9-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX9-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX9-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX9-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX9-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, s5 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s4, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v2, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX906-SDAG: ; %bb.0: ; %bb ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX906-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX906-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX906-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX906-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX906-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX906-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX906-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX906-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v2, s5 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s4, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v2, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX908-SDAG: ; %bb.0: ; %bb ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX908-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX908-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX908-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX908-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX908-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX908-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX908-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX908-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v2, s5 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s4, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v2, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX90A-SDAG: ; %bb.0: ; %bb ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX90A-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX90A-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX90A-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX90A-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX90A-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX90A-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX90A-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX90A-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v2, s5 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s4, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v2, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX9-4-GENERIC-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX9-4-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-4-GENERIC-SDAG-NEXT: s_add_i32 s0, s0, 1 ; GFX9-4-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s0, 0xff ; GFX9-4-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX9-4-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 2, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX942-SDAG: ; %bb.0: ; %bb ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX942-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX942-SDAG-NEXT: s_add_i32 s0, s0, 1 ; GFX942-SDAG-NEXT: s_cmpk_eq_i32 s0, 0xff ; GFX942-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX942-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX942-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 2, v[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX950-SDAG: ; %bb.0: ; %bb ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX950-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX950-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX950-SDAG-NEXT: s_add_i32 s0, s0, 1 ; GFX950-SDAG-NEXT: s_cmpk_eq_i32 s0, 0xff ; GFX950-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX950-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX950-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 2, v[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX10-1-GENERIC-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX10-1-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-1-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX10-1-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX10-1-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX10-1-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX10-1-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, s5, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX1012-SDAG: ; %bb.0: ; %bb ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX1012-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX1012-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1012-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX1012-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX1012-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX1012-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX1012-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX1012-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s4 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, s5, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX10-3-GENERIC-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX10-3-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-3-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX10-3-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX10-3-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX10-3-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX10-3-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s5, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX11-GENERIC-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX11-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX11-GENERIC-SDAG-NEXT: s_add_i32 s0, s0, 1 ; GFX11-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s0, 0xff ; GFX11-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX11-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX11-GENERIC-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX11-GENERIC-SDAG-NEXT: s_lshl_b64 s[0:1], s[0:1], 2 ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX1250-SDAG: ; %bb.0: ; %bb ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX1250-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX1250-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, 1 ; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s0, 0xff ; GFX1250-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX1250-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX1250-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 2, v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_mov_b32 s0, -1 ; GFX12-GENERIC-SDAG-NEXT: .LBB63_1: ; %bb5 ; GFX12-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_add_co_i32 s0, s0, 1 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_cmp_eq_u32 s0, 0xff ; GFX12-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB63_1 ; GFX12-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX12-GENERIC-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_lshl_b64 s[0:1], s[0:1], 2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX9-GENERIC-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX9-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-GENERIC-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX9-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX9-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX9-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX906-ISEL: ; %bb.0: ; %bb ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX906-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX906-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX906-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX906-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX906-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX906-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX906-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX908-ISEL: ; %bb.0: ; %bb ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX908-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX908-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX908-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX908-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX908-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX908-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX908-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX90A-ISEL: ; %bb.0: ; %bb ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX90A-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX90A-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX90A-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX90A-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX90A-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX90A-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX90A-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX9-4-GENERIC-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX9-4-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-4-GENERIC-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX9-4-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX9-4-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX9-4-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX9-4-GENERIC-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX942-ISEL: ; %bb.0: ; %bb ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX942-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX942-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX942-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX942-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX942-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX942-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX942-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX942-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX950-ISEL: ; %bb.0: ; %bb ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v3, 0xff ; GFX950-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX950-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX950-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX950-ISEL-NEXT: v_add_u32_e32 v2, 1, v2 ; GFX950-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3 ; GFX950-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX950-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX950-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX10-1-GENERIC-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX10-1-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX10-1-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX10-1-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX1012-ISEL: ; %bb.0: ; %bb ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX1012-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX1012-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1012-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX1012-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX1012-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX1012-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1012-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s4 ; GFX10-3-GENERIC-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX10-3-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX10-3-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX10-3-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX11-GENERIC-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX11-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX11-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX11-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX11-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[2:3], 2, v[2:3] ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX1250-ISEL: ; %bb.0: ; %bb ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX1250-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX1250-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX1250-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX1250-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX1250-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[2:3], 2, v[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_addr_64bit_lsr_iv_multiload: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_mov_b32 s0, -1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s0 ; GFX12-GENERIC-ISEL-NEXT: .LBB63_1: ; %bb5 ; GFX12-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v2, 1, v2 ; GFX12-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v2 ; GFX12-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB63_1 ; GFX12-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, 0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b64_e32 v[2:3], 2, v[2:3] ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] bb: br label %bb5 bb2: %y = icmp eq i32 %x, 0 br i1 %y, label %bb3, label %bb4 bb3: ret <4 x float> %i6 bb4: ret <4 x float> %i6.1 bb5: %i = phi i32 [ 0, %bb ], [ %i8, %bb5 ] %i4 = zext i32 %i to i64 %i5 = getelementptr inbounds float, ptr addrspace(1) %arg, i64 %i4 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %i5, metadata !3) %i6 = bitcast <4 x i32> %load to <4 x float> %i5.1 = getelementptr inbounds float, ptr addrspace(1) %arg.1, i64 %i4 %load.1 = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %i5, metadata !4) %i6.1 = bitcast <4 x i32> %load to <4 x float> %i8 = add nuw nsw i32 %i, 1 %i9 = icmp eq i32 %i8, 256 br i1 %i9, label %bb2, label %bb5 } ;;============================================================================== ;; } end signed offset addressing modes ;;============================================================================== ;;============================================================================== ;; Various saddr addressing modes (derived from global-saddr-load.ll) { ;;============================================================================== ;;------------------------------------------------------------------------------ ;; No vgpr offset, constants ;;------------------------------------------------------------------------------ ;; SGPR base only define <4 x float> @global_load_saddr_i8_offset_0(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %sbase, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum gfx9 immediate offset define <4 x float> @global_load_saddr_i8_offset_4095(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4095: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4095: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4095 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum gfx9 immediate offset + 1 define <4 x float> @global_load_saddr_i8_offset_4096(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4096 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4096: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4096 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4096 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4096: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4096 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4096 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum gfx9 immediate offset + 2 define <4 x float> @global_load_saddr_i8_offset_4097(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:1 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:1 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:1 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:1 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4097 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_4097: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4097 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:1 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:1 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:1 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x1000 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:1 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4097 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_4097: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4097 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4097 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum negative gfx9 immediate offset define <4 x float> @global_load_saddr_i8_offset_neg4096(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff000 ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff000 ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff000 ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4096: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4096 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum negative gfx9 immediate offset -1 define <4 x float> @global_load_saddr_i8_offset_neg4097(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX9-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX906-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX908-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX90A-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, 0xffffefff ; GFX9-4-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0xffffefff ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_add_u32 s0, s0, 0xffffefff ; GFX950-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0xfffff000, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4097 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4097 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0xffffefff ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 0xffffefff ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 0xffffefff ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xffffefff ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0xffffefff ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4097 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4097: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4097 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4097 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum negative gfx9 immediate offset -2 define <4 x float> @global_load_saddr_i8_offset_neg4098(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX9-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX906-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX908-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX90A-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, 0xffffeffe ; GFX9-4-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0xffffeffe ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_add_u32 s0, s0, 0xffffeffe ; GFX950-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff000, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0xfffff000, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-2 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4098 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4098 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0xffffeffe ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 0xffffeffe ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 0xffffeffe ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xffffeffe ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0xffffeffe ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4098 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg4098: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4098 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4098 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum gfx10 immediate offset define <4 x float> @global_load_saddr_i8_offset_2048(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2048: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2048: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 2048 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum gfx10 immediate offset + 1 define <4 x float> @global_load_saddr_i8_offset_2049(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2049 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2049 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2049 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2049 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2049 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2049 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2049 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2049 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2049 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2049: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2049 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2049 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2049 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2049 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2049 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2049 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2049 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2049 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:1 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2049 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2049 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2049: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2049 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 2049 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum gfx10 immediate offset + 2 define <4 x float> @global_load_saddr_i8_offset_2050(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2050 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2050 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2050 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2050 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2050 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2050 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2050 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2050 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2050 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_2050: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2050 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2050 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2050 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2050 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2050 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2050 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2050 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2050 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x800 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2050 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2050 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_2050: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2050 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 2050 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum negative gfx10 immediate offset define <4 x float> @global_load_saddr_i8_offset_neg2048(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2048: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -2048 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum negative gfx10 immediate offset - 1 define <4 x float> @global_load_saddr_i8_offset_neg2049(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff800, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff800, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff800, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff7ff ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff7ff ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff7ff ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2049: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -2049 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; SGPR base with maximum negative gfx10 immediate offset - 1 define <4 x float> @global_load_saddr_i8_offset_neg2050(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2050 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2050 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2050 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2050 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2050 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2050 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2050 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff800, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff800, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xfffff800, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2050 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2050 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2050 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2050 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2050 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2050 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2050 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2050 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2050 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2050 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff7fe ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff7fe ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfffff7fe ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2050 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2050 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg2050: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2050 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -2050 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_0x7FFFFF(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff800 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff800 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff800 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff800 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff800 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff800 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0x7ff000 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x7FFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 8388607 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_0xFFFFFF(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX9-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX906-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX908-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX90A-SDAG-NEXT: s_addc_u32 s5, s17, -1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, 0xff800000 ; GFX9-4-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0xff800000 ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_add_u32 s0, s0, 0xff800000 ; GFX950-SDAG-NEXT: s_addc_u32 s1, s1, -1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xff800000, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0xff800000, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0xff800000, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0xff800000, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-8388608 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-8388608 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0xff800000 ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 0xff800000 ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 0xff800000 ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xff800000 ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0xff800000 ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-8388608 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-8388608 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -8388608 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_0xFFFFFFFF(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff800 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff800 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff800 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0xff800000, s0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, s1, s0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:8388607 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0xff800000 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff800 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff800 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff800 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0xfffff000 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, -1 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0xFFFFFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0xff800000 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294967295 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_0x100000000(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_add_i32 s17, s17, 1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_add_i32 s17, s17, 1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_add_i32 s17, s17, 1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_add_i32 s17, s17, 1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_add_i32 s1, s1, 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_add_i32 s1, s1, 1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_add_i32 s1, s1, 1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_add_i32 s17, s17, 1 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: s_add_i32 s17, s17, 1 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_add_i32 s17, s17, 1 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: s_add_i32 s1, s1, 1 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: s_add_co_i32 s1, s1, 1 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: s_add_co_i32 s1, s1, 1 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1] ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 0 ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 0 ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0 ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, 0 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000000: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_u32 s0, s0, 0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294967296 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_0x100000001(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s16 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX906-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s16 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX908-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s16 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX90A-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s16 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX942-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX950-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, 1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, 1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:1 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:1 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:1 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1] ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 1 ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 1 ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 1 ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 1 ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, 1 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000001: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_u32 s0, s0, 1 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294967297 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_0x100000FFF(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, 0xfff ; GFX9-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, 1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_add_u32 s4, s16, 0xfff ; GFX906-SDAG-NEXT: s_addc_u32 s5, s17, 1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_add_u32 s4, s16, 0xfff ; GFX908-SDAG-NEXT: s_addc_u32 s5, s17, 1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_add_u32 s4, s16, 0xfff ; GFX90A-SDAG-NEXT: s_addc_u32 s5, s17, 1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, 0xfff ; GFX9-4-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0xfff ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_add_u32 s0, s0, 0xfff ; GFX950-SDAG-NEXT: s_addc_u32 s1, s1, 1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0x800, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, 1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0x800, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, 1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0x800, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfff ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 0xfff ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 0xfff ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 0xfff ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0xfff ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 0xfff ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 0xfff ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfff ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0xfff ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0xfff ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0xfff ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, 0xfff ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100000FFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_u32 s0, s0, 0xfff ; GFX12-GENERIC-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294971391 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_0x100001000(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX9-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, 1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX906-SDAG-NEXT: s_addc_u32 s5, s17, 1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX908-SDAG-NEXT: s_addc_u32 s5, s17, 1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX90A-SDAG-NEXT: s_addc_u32 s5, s17, 1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, 0x1000 ; GFX9-4-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x1000 ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_add_u32 s0, s0, 0x1000 ; GFX950-SDAG-NEXT: s_addc_u32 s1, s1, 1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0x1000, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, 1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0x1000, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, 1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0x1000, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0x1000, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s1, s0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4096 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0x1000 ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 0x1000 ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 0x1000 ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0x1000 ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, 1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0x1000 ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, 1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, 0x1000 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_0x100001000: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_u32 s0, s0, 0x1000 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4294971392 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_neg0xFFFFFFFF(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s16 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, s16 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, s16 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, s16 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s0 ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s0 ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX942-SDAG-NEXT: s_nop 0 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s0 ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX950-SDAG-NEXT: s_nop 0 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-4095 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0x800, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2047 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0x800, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2047 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0x800, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-2047 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0x1000, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-4095 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0x800000, s0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388607 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0x800000, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-8388607 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1] ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 1 ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 1 ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 1 ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 1 ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 1 ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, 1 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, -1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0xFFFFFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_u32 s0, s0, 1 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_ci_u32 s1, s1, -1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4294967295 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_neg0x100000000(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_add_i32 s17, s17, -1 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_add_i32 s17, s17, -1 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_add_i32 s17, s17, -1 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_add_i32 s17, s17, -1 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_add_i32 s1, s1, -1 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_add_i32 s1, s1, -1 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_add_i32 s1, s1, -1 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_add_i32 s17, s17, -1 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: s_add_i32 s17, s17, -1 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_add_i32 s17, s17, -1 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: s_add_i32 s1, s1, -1 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: s_add_co_i32 s1, s1, -1 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: s_add_co_i32 s1, s1, -1 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1] ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0 ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, 0 ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, 0 ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, 0 ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, 0 ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, 0 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, -1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000000: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_u32 s0, s0, 0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_ci_u32 s1, s1, -1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4294967296 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_neg0x100000001(ptr addrspace(1) inreg %sbase) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s16 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX906-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s16 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX908-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s16 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX90A-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s16 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX942-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s1 ; GFX950-SDAG-NEXT: v_add_co_u32_e64 v0, vcc, 0, s0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, 0, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, -1, s17, s4 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, 0, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s17, s4 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s1, s0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, -1 ; GFX9-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -2 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_add_u32 s4, s16, -1 ; GFX906-ISEL-NEXT: s_addc_u32 s5, s17, -2 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_add_u32 s4, s16, -1 ; GFX908-ISEL-NEXT: s_addc_u32 s5, s17, -2 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_add_u32 s4, s16, -1 ; GFX90A-ISEL-NEXT: s_addc_u32 s5, s17, -2 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1] ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, -1 ; GFX9-4-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -2 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_add_u32 s0, s0, -1 ; GFX942-ISEL-NEXT: s_addc_u32 s1, s1, -2 ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_add_u32 s0, s0, -1 ; GFX950-ISEL-NEXT: s_addc_u32 s1, s1, -2 ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, -1 ; GFX10-1-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -2 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_add_u32 s4, s16, -1 ; GFX1012-ISEL-NEXT: s_addc_u32 s5, s17, -2 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_add_u32 s4, s16, -1 ; GFX10-3-GENERIC-ISEL-NEXT: s_addc_u32 s5, s17, -2 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s5 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_add_u32 s0, s0, -1 ; GFX11-GENERIC-ISEL-NEXT: s_addc_u32 s1, s1, -2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, -1 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, -2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_neg0x100000001: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_u32 s0, s0, -1 ; GFX12-GENERIC-ISEL-NEXT: s_add_co_ci_u32 s1, s1, -2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 -4294967297 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; Basic addressing patterns ;;------------------------------------------------------------------------------ ;; Basic pattern, no immediate offset. define <4 x float> @global_load_saddr_i8_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx9 define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_4095(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 4095 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx9 + 1 define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_4096(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, s0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, 0, s0 ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4096 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4096 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x1000, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v1, s0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x1000, v0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4096 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4096: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4096 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 4096 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum negative offset on gfx9 define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_neg4096(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-4096 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-4096 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4096: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4096 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -4096 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum negative offset on gfx9 - 1 define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_neg4097(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, s0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, 0, s0 ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:-1 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4097 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4097 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xffffefff, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v1, s0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xffffefff, v0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4097 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg4097: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-4097 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -4097 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx10 define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_2047(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2047 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2047 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2047 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2047 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2047 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2047 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2047 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2047 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2047 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2047 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2047 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2047 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2047: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2047 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 2047 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx10 + 1 define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_2048(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:2048 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:2048 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_2048: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:2048 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 2048 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum negative offset on gfx10 define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_neg2048(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2048 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2048 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2048: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2048 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -2048 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum negative offset on gfx10 - 1 define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_neg2049(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:-1 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-2049 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-2049 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff7ff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_neg2049: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-2049 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -2049 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx12. define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF(ptr addrspace(1) inreg %sbase, i32 %voffset) { %zext.offset = zext i32 %voffset to i64 ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0x7ff000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, s0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, 0, s0 ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x7ff000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0x7fffff, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v1, s0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x7fffff, v0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0x7FFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:8388607 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 8388607 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Minimum offset on gfx12. define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF(ptr addrspace(1) inreg %sbase, i32 %voffset) { %zext.offset = zext i32 %voffset to i64 ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, s17 ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-4-GENERIC-SDAG-NEXT: s_nop 1 ; GFX9-4-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX942-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX942-SDAG-NEXT: s_nop 1 ; GFX942-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1] ; GFX950-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX950-SDAG-NEXT: s_nop 1 ; GFX950-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s0, s0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, 0, s0 ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-8388608 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-8388608 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v1, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v2, vcc ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v3, vcc ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, 0xff800000, v0 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v1, s0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xff800000, v0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-8388608 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_0xFFFFFF: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-8388608 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -8388608 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Maximum positive offset on gfx9, and immediate needs to be moved lower. define <4 x float> @global_load_saddr_i8_zext_vgpr_offset_4095_gep_order(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e64 v1, s4, s17, 0, s4 ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, s4, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, 0, s4 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:4095 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:4095 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v2, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v2, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_offset_4095_gep_order: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 4095 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; pointer addressing done in integers define <4 x float> @global_load_saddr_i8_zext_vgpr_ptrtoint(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %sbase.as.int, %zext.offset %dirty.gep = inttoptr i64 %add to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; zext forced to LHS of addressing expression define <4 x float> @global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %zext.offset, %sbase.as.int %dirty.gep = inttoptr i64 %add to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; zext forced to LHS of addressing expression, with immediate offset define <4 x float> @global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %zext.offset, %sbase.as.int %add.immoffset = add i64 %add, 128 %dirty.gep = inttoptr i64 %add.immoffset to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; zext forced to LHS of addressing expression, with immediate offset in non-canonical position define <4 x float> @global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1(ptr addrspace(1) inreg %sbase, i32 %voffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %voffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add.immoffset = add i64 %sbase.as.int, 128 %add = add i64 %zext.offset, %add.immoffset %dirty.gep = inttoptr i64 %add to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; Uniformity edge cases ;;------------------------------------------------------------------------------ ;; Both 64-bit base and 32-bit offset are scalar define <4 x float> @global_load_saddr_i8_zext_uniform_offset(ptr addrspace(1) inreg %sbase, i32 inreg %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, s2 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Both 64-bit base and 32-bit offset are scalar, with immediate offset. define <4 x float> @global_load_saddr_i8_zext_uniform_offset_immoffset(ptr addrspace(1) inreg %sbase, i32 inreg %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-24 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-24 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-24 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-24 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-24 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-24 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-24 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-24 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:-24 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:-24 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-24 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, s2 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-24 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_uniform_offset_immoffset: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:-24 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -24 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Both components uniform, zext forced to LHS of addressing expression define <4 x float> @global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add(ptr addrspace(1) inreg %sbase, i32 inreg %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, s2 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %zext.offset, %sbase.as.int %dirty.gep = inttoptr i64 %add to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Both components uniform, zext forced to LHS of addressing expression, with immediate offset define <4 x float> @global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0(ptr addrspace(1) inreg %sbase, i32 inreg %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s18 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-ISEL-NEXT: s_add_co_u32 s0, s0, s2 ; GFX1250-ISEL-NEXT: s_add_co_ci_u32 s1, s1, 0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %sbase.as.int = ptrtoint ptr addrspace(1) %sbase to i64 %add = add i64 %zext.offset, %sbase.as.int %add.immoffset = add i64 %add, 128 %dirty.gep = inttoptr i64 %add.immoffset to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %dirty.gep, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; divergent 64-bit base, 32-bit scalar offset. define <4 x float> @global_load_saddr_i8_vgpr64_sgpr32(ptr addrspace(1) %vbase, i32 inreg %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, s[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, s[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, s[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], s[0:1], v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %vbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep0, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; divergent 64-bit base, 32-bit scalar offset, with imm offset define <4 x float> @global_load_saddr_i8_vgpr64_sgpr32_offset_4095(ptr addrspace(1) %vbase, i32 inreg %soffset) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, s[0:1] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, s[0:1] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, s[0:1] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s16 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s16 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s16 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:2047 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: s_mov_b32 s1, 0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], s[0:1], v[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, v0, s0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX9-4-GENERIC-ISEL-NEXT: s_nop 1 ; GFX9-4-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX942-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX942-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX942-ISEL-NEXT: s_nop 1 ; GFX942-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX950-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX950-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 ; GFX950-ISEL-NEXT: s_nop 1 ; GFX950-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off offset:4095 sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_mov_b32 s17, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0xfff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1] ; GFX1250-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_vgpr64_sgpr32_offset_4095: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_mov_b32 s1, 0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off offset:4095 scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.offset = zext i32 %soffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %vbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 4095 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; Natural addressing shifts with restricted range ;;------------------------------------------------------------------------------ ;; Cannot push the shift into 32-bits, and cannot match. define <4 x float> @global_load_saddr_f32_natural_addressing(ptr addrspace(1) inreg %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, s17 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v2, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v2, s17 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v2, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v2, s17 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v2, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v2, s17 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v2, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, s0 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, s1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v2, s0 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, s1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v2, s0 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, s1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, s17, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, s17, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-SDAG-NEXT: v_lshlrev_b64_e32 v[0:1], 2, v[0:1] ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s0, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_xcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b64_e32 v[0:1], 2, v[0:1] ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr %zext.offset = zext i32 %voffset to i64 %gep = getelementptr inbounds float, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Cannot push the shift into 32-bits, with an immediate offset. define <4 x float> @global_load_saddr_f32_natural_addressing_immoffset(ptr addrspace(1) inreg %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:128 sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:128 glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_f32_natural_addressing_immoffset: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:128 scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 128 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Range is sufficiently restricted to push the shift into 32-bits. define <4 x float> @global_load_f32_saddr_zext_vgpr_range(ptr addrspace(1) inreg %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_xcnt 0x0 ; GFX1250-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr, !range !5, !noundef !{} %zext.offset = zext i32 %voffset to i64 %gep = getelementptr inbounds float, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep, metadata !2) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Range is sufficiently restricted to push the shift into 32-bits, with an imm offset define <4 x float> @global_load_f32_saddr_zext_vgpr_range_imm_offset(ptr addrspace(1) inreg %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:400 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:400 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:400 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:400 glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:400 scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:400 scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:400 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:400 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] offset:400 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v0, s[16:17] offset:400 glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:400 glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_xcnt 0x0 ; GFX1250-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:400 scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_imm_offset: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b32_e32 v0, 2, v0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v0, s[0:1] offset:400 scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr, !range !5, !noundef !{} %zext.offset = zext i32 %voffset to i64 %gep0 = getelementptr inbounds float, ptr addrspace(1) %sbase, i64 %zext.offset %gep1 = getelementptr inbounds float, ptr addrspace(1) %gep0, i64 100 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep1, metadata !3) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;; Range is 1 beyond the limit where we can move the shift into 32-bits. define <4 x float> @global_load_f32_saddr_zext_vgpr_range_too_large(ptr addrspace(1) inreg %sbase, ptr addrspace(1) %voffset.ptr) { ; GFX9-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, s17 ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX9-GENERIC-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v2, v1, vcc ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v2, s17 ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX906-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX906-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v2, v1, vcc ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v2, s17 ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX908-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX908-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v2, v1, vcc ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v2, s17 ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX90A-SDAG-NEXT: v_add_co_u32_e32 v0, vcc, s16, v0 ; GFX90A-SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, v2, v1, vcc ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v2, s0 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v3, s1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, v[2:3] ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v2, s0 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, s1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, v[2:3] ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v2, s0 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v3, s1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, v[2:3] ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, s17, v1, vcc_lo ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX1012-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s16, v0 ; GFX1012-SDAG-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, s17, v1, vcc_lo ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s17, v1, vcc_lo ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX11-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s0, v0 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, v1, vcc_lo ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_xcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-SDAG-NEXT: v_lshlrev_b64_e32 v[0:1], 2, v[0:1] ; GFX12-GENERIC-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, s0, v0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, s1, v1, vcc_lo ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dword v0, v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_xcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_f32_saddr_zext_vgpr_range_too_large: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b32 v0, v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b64_e32 v[0:1], 2, v[0:1] ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SYS ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %voffset = load i32, ptr addrspace(1) %voffset.ptr, !range !6, !noundef !{} %zext.offset = zext i32 %voffset to i64 %gep = getelementptr inbounds float, ptr addrspace(1) %sbase, i64 %zext.offset %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %gep, metadata !4) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; or-with-constant as add ;;------------------------------------------------------------------------------ ;; Check add-as-or with split 64-bit or. define <4 x float> @global_load_saddr_i8_offset_or_i64_imm_offset_16(ptr addrspace(6) inreg %sbase, i32 %idx) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_bitop2_b32 v0, 16, v0 bitop3:0x54 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_bitop2_b32 v0, 16, v0 bitop3:0x54 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_16: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 16, v0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.idx = zext i32 %idx to i64 %or = or i64 %zext.idx, 16 %addr = inttoptr i64 %or to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !0) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } define <4 x float> @global_load_saddr_i8_offset_or_i64_imm_offset_4160(ptr addrspace(6) inreg %sbase, i32 %idx) { ; GFX9-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX9-GENERIC-SDAG: ; %bb.0: ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX906-SDAG: ; %bb.0: ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX908-SDAG: ; %bb.0: ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX90A-SDAG: ; %bb.0: ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX942-SDAG: ; %bb.0: ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX950-SDAG: ; %bb.0: ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX1012-SDAG: ; %bb.0: ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX11-GENERIC-SDAG: ; %bb.0: ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX1250-SDAG: ; %bb.0: ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX1250-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX12-GENERIC-SDAG: ; %bb.0: ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-SDAG-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX9-GENERIC-ISEL: ; %bb.0: ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX906-ISEL: ; %bb.0: ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX908-ISEL: ; %bb.0: ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX90A-ISEL: ; %bb.0: ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX942-ISEL: ; %bb.0: ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX950-ISEL: ; %bb.0: ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc0 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX1012-ISEL: ; %bb.0: ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX11-GENERIC-ISEL: ; %bb.0: ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX1250-ISEL: ; %bb.0: ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1250-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_load_saddr_i8_offset_or_i64_imm_offset_4160: ; GFX12-GENERIC-ISEL: ; %bb.0: ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-ISEL-NEXT: v_or_b32_e32 v0, 0x1040, v0 ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] %zext.idx = zext i32 %idx to i64 %or = or i64 %zext.idx, 4160 %addr = inttoptr i64 %or to ptr addrspace(1) %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %addr, metadata !1) %cast.load = bitcast <4 x i32> %load to <4 x float> ret <4 x float> %cast.load } ;;------------------------------------------------------------------------------ ;; Full 64-bit scalar add. ;;------------------------------------------------------------------------------ define <4 x float> @global_saddr_64bit_lsr_iv(ptr addrspace(1) inreg %arg) { ; GFX9-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX9-GENERIC-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX9-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX9-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX9-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX9-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX9-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX9-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX9-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX9-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX906-SDAG: ; %bb.0: ; %bb ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX906-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX906-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX906-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX906-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX906-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX906-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX906-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX906-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX906-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX906-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX908-SDAG: ; %bb.0: ; %bb ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX908-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX908-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX908-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX908-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX908-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX908-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX908-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX908-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX908-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX908-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX90A-SDAG: ; %bb.0: ; %bb ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX90A-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX90A-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX90A-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX90A-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX90A-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX90A-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX90A-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX90A-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX90A-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX90A-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX9-4-GENERIC-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX9-4-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-4-GENERIC-SDAG-NEXT: s_add_i32 s2, s2, 1 ; GFX9-4-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s2, 0xff ; GFX9-4-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX9-4-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX9-4-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, s2 ; GFX9-4-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, s3 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX942-SDAG: ; %bb.0: ; %bb ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX942-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX942-SDAG-NEXT: s_add_i32 s2, s2, 1 ; GFX942-SDAG-NEXT: s_cmpk_eq_i32 s2, 0xff ; GFX942-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX942-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX942-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX942-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, s2 ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, s3 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX950-SDAG: ; %bb.0: ; %bb ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX950-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX950-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX950-SDAG-NEXT: s_add_i32 s2, s2, 1 ; GFX950-SDAG-NEXT: s_cmpk_eq_i32 s2, 0xff ; GFX950-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX950-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX950-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX950-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX950-SDAG-NEXT: s_add_u32 s0, s0, s2 ; GFX950-SDAG-NEXT: s_addc_u32 s1, s1, s3 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX10-1-GENERIC-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX10-1-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-1-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX10-1-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX10-1-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX10-1-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX10-1-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX10-1-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX10-1-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX1012-SDAG: ; %bb.0: ; %bb ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX1012-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX1012-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1012-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX1012-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX1012-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX1012-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX1012-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX1012-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX1012-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX10-3-GENERIC-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX10-3-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-3-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX10-3-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX10-3-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX10-3-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX10-3-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX10-3-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX10-3-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX11-GENERIC-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX11-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX11-GENERIC-SDAG-NEXT: s_add_i32 s2, s2, 1 ; GFX11-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s2, 0xff ; GFX11-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX11-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX11-GENERIC-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, s2 ; GFX11-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, s3 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX1250-SDAG: ; %bb.0: ; %bb ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX1250-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX1250-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: s_add_co_i32 s2, s2, 1 ; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s2, 0xff ; GFX1250-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX1250-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX1250-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: s_add_nc_u64 s[0:1], s[0:1], s[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_SE ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX12-GENERIC-SDAG-NEXT: .LBB116_1: ; %bb3 ; GFX12-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_add_co_i32 s2, s2, 1 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_cmp_eq_u32 s2, 0xff ; GFX12-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB116_1 ; GFX12-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX12-GENERIC-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_add_nc_u64 s[0:1], s[0:1], s[2:3] ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX9-GENERIC-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX9-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-GENERIC-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX9-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX9-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX906-ISEL: ; %bb.0: ; %bb ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX906-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX906-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX906-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX906-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX906-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX906-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX908-ISEL: ; %bb.0: ; %bb ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX908-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX908-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX908-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX908-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX908-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX908-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX90A-ISEL: ; %bb.0: ; %bb ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX90A-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX90A-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX90A-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX90A-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX90A-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX90A-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX9-4-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-4-GENERIC-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX9-4-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX9-4-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX9-4-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX942-ISEL: ; %bb.0: ; %bb ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX942-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX942-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX942-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX942-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX942-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX950-ISEL: ; %bb.0: ; %bb ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX950-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX950-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX950-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX950-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX950-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX10-1-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX10-1-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX1012-ISEL: ; %bb.0: ; %bb ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX1012-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1012-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX1012-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX1012-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX1012-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX1012-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX10-3-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX10-3-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX11-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX11-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX11-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX11-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX1250-ISEL: ; %bb.0: ; %bb ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX1250-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX1250-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX1250-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX1250-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX1250-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_SE ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-ISEL-NEXT: .LBB116_1: ; %bb3 ; GFX12-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX12-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX12-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB116_1 ; GFX12-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b64_e32 v[0:1], 2, v[0:1] ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] bb: br label %bb3 bb2: ; preds = %bb3 ret <4 x float> %i6 bb3: ; preds = %bb3, %bb %i = phi i32 [ 0, %bb ], [ %i8, %bb3 ] %i4 = zext i32 %i to i64 %i5 = getelementptr inbounds float, ptr addrspace(1) %arg, i64 %i4 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %i5, metadata !2) %i6 = bitcast <4 x i32> %load to <4 x float> %i8 = add nuw nsw i32 %i, 1 %i9 = icmp eq i32 %i8, 256 br i1 %i9, label %bb2, label %bb3 } ;; Make sure we only have a single zero vaddr initialization. define <4 x float> @global_saddr_64bit_lsr_iv_multiload(ptr addrspace(1) inreg %arg, ptr addrspace(1) inreg %arg.1, i32 %x) { ; GFX9-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX9-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX9-GENERIC-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX9-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX9-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX9-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX9-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX9-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX9-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX9-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX9-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX9-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX9-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX906-SDAG: ; %bb.0: ; %bb ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX906-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX906-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX906-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX906-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX906-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX906-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX906-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX906-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX906-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX906-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX906-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX906-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX906-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX906-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX908-SDAG: ; %bb.0: ; %bb ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX908-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX908-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX908-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX908-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX908-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX908-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX908-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX908-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX908-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX908-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX908-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX908-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX908-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX908-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX90A-SDAG: ; %bb.0: ; %bb ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX90A-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX90A-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX90A-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX90A-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX90A-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX90A-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX90A-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX90A-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX90A-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX90A-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX90A-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX90A-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc ; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX90A-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX9-4-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX9-4-GENERIC-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX9-4-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-4-GENERIC-SDAG-NEXT: s_add_i32 s2, s2, 1 ; GFX9-4-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s2, 0xff ; GFX9-4-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX9-4-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX9-4-GENERIC-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX9-4-GENERIC-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX9-4-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, s2 ; GFX9-4-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, s3 ; GFX9-4-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX9-4-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX9-4-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX942-SDAG: ; %bb.0: ; %bb ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX942-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX942-SDAG-NEXT: s_add_i32 s2, s2, 1 ; GFX942-SDAG-NEXT: s_cmpk_eq_i32 s2, 0xff ; GFX942-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX942-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX942-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX942-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, s2 ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, s3 ; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX942-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX950-SDAG: ; %bb.0: ; %bb ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX950-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX950-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX950-SDAG-NEXT: s_add_i32 s2, s2, 1 ; GFX950-SDAG-NEXT: s_cmpk_eq_i32 s2, 0xff ; GFX950-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX950-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX950-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX950-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX950-SDAG-NEXT: s_add_u32 s0, s0, s2 ; GFX950-SDAG-NEXT: s_addc_u32 s1, s1, s3 ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX950-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[0:1] sc1 ; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX10-1-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX10-1-GENERIC-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX10-1-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-1-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX10-1-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX10-1-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX10-1-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX10-1-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX10-1-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-1-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX10-1-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX10-1-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX10-1-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc dlc ; GFX10-1-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX1012-SDAG: ; %bb.0: ; %bb ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX1012-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX1012-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1012-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX1012-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX1012-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX1012-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX1012-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX1012-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1012-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX1012-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX1012-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX1012-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc dlc ; GFX1012-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX1012-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX10-3-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_mov_b32 s4, -1 ; GFX10-3-GENERIC-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX10-3-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-3-GENERIC-SDAG-NEXT: s_add_i32 s4, s4, 1 ; GFX10-3-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s4, 0xff ; GFX10-3-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX10-3-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX10-3-GENERIC-SDAG-NEXT: s_mov_b32 s5, 0 ; GFX10-3-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX10-3-GENERIC-SDAG-NEXT: s_lshl_b64 s[4:5], s[4:5], 2 ; GFX10-3-GENERIC-SDAG-NEXT: s_add_u32 s4, s16, s4 ; GFX10-3-GENERIC-SDAG-NEXT: s_addc_u32 s5, s17, s5 ; GFX10-3-GENERIC-SDAG-NEXT: global_load_dwordx4 v[0:3], v0, s[4:5] glc dlc ; GFX10-3-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX11-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX11-GENERIC-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX11-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX11-GENERIC-SDAG-NEXT: s_add_i32 s2, s2, 1 ; GFX11-GENERIC-SDAG-NEXT: s_cmpk_eq_i32 s2, 0xff ; GFX11-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX11-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX11-GENERIC-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX11-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX11-GENERIC-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX11-GENERIC-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-SDAG-NEXT: s_add_u32 s0, s0, s2 ; GFX11-GENERIC-SDAG-NEXT: s_addc_u32 s1, s1, s3 ; GFX11-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] glc ; GFX11-GENERIC-SDAG-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX1250-SDAG: ; %bb.0: ; %bb ; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX1250-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX1250-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX1250-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: s_add_co_i32 s2, s2, 1 ; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s2, 0xff ; GFX1250-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX1250-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX1250-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX1250-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-SDAG-NEXT: s_add_nc_u64 s[0:1], s[0:1], s[2:3] ; GFX1250-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-SDAG-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX12-GENERIC-SDAG: ; %bb.0: ; %bb ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_mov_b32 s2, -1 ; GFX12-GENERIC-SDAG-NEXT: .LBB117_1: ; %bb5 ; GFX12-GENERIC-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_add_co_i32 s2, s2, 1 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_cmp_eq_u32 s2, 0xff ; GFX12-GENERIC-SDAG-NEXT: s_cbranch_scc0 .LBB117_1 ; GFX12-GENERIC-SDAG-NEXT: ; %bb.2: ; %bb2 ; GFX12-GENERIC-SDAG-NEXT: s_mov_b32 s3, 0 ; GFX12-GENERIC-SDAG-NEXT: v_mov_b32_e32 v0, 0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_lshl_b64 s[2:3], s[2:3], 2 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_add_nc_u64 s[0:1], s[0:1], s[2:3] ; GFX12-GENERIC-SDAG-NEXT: global_load_b128 v[0:3], v0, s[0:1] scope:SCOPE_DEV ; GFX12-GENERIC-SDAG-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-SDAG-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX9-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX9-GENERIC-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX9-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-GENERIC-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX9-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX9-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX9-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX9-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX9-GENERIC-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX9-GENERIC-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX9-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX9-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX906-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX906-ISEL: ; %bb.0: ; %bb ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX906-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX906-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX906-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX906-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX906-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX906-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX906-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX906-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX906-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX906-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX906-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX906-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX906-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX906-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX906-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX906-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX908-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX908-ISEL: ; %bb.0: ; %bb ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX908-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX908-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX908-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX908-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX908-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX908-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX908-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX908-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX908-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX908-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX908-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX908-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX908-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX908-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX908-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX908-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX90A-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX90A-ISEL: ; %bb.0: ; %bb ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX90A-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX90A-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX90A-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX90A-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX90A-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX90A-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX90A-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX90A-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX90A-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX90A-ISEL-NEXT: v_pk_mov_b32 v[2:3], s[16:17], s[16:17] op_sel:[0,1] ; GFX90A-ISEL-NEXT: v_add_co_u32_e32 v0, vcc, v2, v0 ; GFX90A-ISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v3, v1, vcc ; GFX90A-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc ; GFX90A-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX90A-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX9-4-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX9-4-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX9-4-GENERIC-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX9-4-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX9-4-GENERIC-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX9-4-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX9-4-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX9-4-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX9-4-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX9-4-GENERIC-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX9-4-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX9-4-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX9-4-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX942-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX942-ISEL: ; %bb.0: ; %bb ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX942-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX942-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX942-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX942-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX942-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX942-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX942-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX942-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX942-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX942-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX942-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX942-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX942-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX950-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX950-ISEL: ; %bb.0: ; %bb ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX950-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0xff ; GFX950-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX950-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX950-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX950-ISEL-NEXT: v_add_u32_e32 v0, 1, v0 ; GFX950-ISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1 ; GFX950-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX950-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX950-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX950-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX950-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off sc1 ; GFX950-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX950-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-1-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX10-1-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-1-GENERIC-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX10-1-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX10-1-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX10-1-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-1-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-1-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-1-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo ; GFX10-1-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-1-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-1-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1012-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX1012-ISEL: ; %bb.0: ; %bb ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX1012-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX1012-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX1012-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1012-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX1012-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX1012-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX1012-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX1012-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX1012-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX1012-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX1012-ISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v3, v1, vcc_lo ; GFX1012-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX1012-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX1012-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX10-3-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX10-3-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_mov_b32 s4, -1 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s4 ; GFX10-3-GENERIC-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX10-3-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX10-3-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX10-3-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v2, s16 ; GFX10-3-GENERIC-ISEL-NEXT: v_mov_b32_e32 v3, s17 ; GFX10-3-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX10-3-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX10-3-GENERIC-ISEL-NEXT: global_load_dwordx4 v[0:3], v[0:1], off glc dlc ; GFX10-3-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX10-3-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX11-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX11-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX11-GENERIC-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX11-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX11-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX11-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX11-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX11-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX11-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_lshlrev_b64 v[0:1], 2, v[0:1] ; GFX11-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX11-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX11-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX11-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off glc ; GFX11-GENERIC-ISEL-NEXT: s_waitcnt vmcnt(0) ; GFX11-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] ; ; GFX1250-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX1250-ISEL: ; %bb.0: ; %bb ; GFX1250-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX1250-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX1250-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX1250-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX1250-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX1250-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX1250-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX1250-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX1250-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX1250-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) ; GFX1250-ISEL-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 2, s[0:1] ; GFX1250-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX1250-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX1250-ISEL-NEXT: s_set_pc_i64 s[30:31] ; ; GFX12-GENERIC-ISEL-LABEL: global_saddr_64bit_lsr_iv_multiload: ; GFX12-GENERIC-ISEL: ; %bb.0: ; %bb ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt_dscnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_expcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_samplecnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_bvhcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_kmcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_mov_b32 s2, -1 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_sa_sdst(0) ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v0, s2 ; GFX12-GENERIC-ISEL-NEXT: .LBB117_1: ; %bb5 ; GFX12-GENERIC-ISEL-NEXT: ; =>This Inner Loop Header: Depth=1 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_add_nc_u32_e32 v0, 1, v0 ; GFX12-GENERIC-ISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0xff, v0 ; GFX12-GENERIC-ISEL-NEXT: s_cbranch_vccz .LBB117_1 ; GFX12-GENERIC-ISEL-NEXT: ; %bb.2: ; %bb2 ; GFX12-GENERIC-ISEL-NEXT: v_mov_b32_e32 v1, 0 ; GFX12-GENERIC-ISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0 ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) ; GFX12-GENERIC-ISEL-NEXT: v_lshlrev_b64_e32 v[0:1], 2, v[0:1] ; GFX12-GENERIC-ISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0 ; GFX12-GENERIC-ISEL-NEXT: s_wait_alu depctr_va_vcc(0) ; GFX12-GENERIC-ISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) ; GFX12-GENERIC-ISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v3, v1, vcc_lo ; GFX12-GENERIC-ISEL-NEXT: global_load_b128 v[0:3], v[0:1], off scope:SCOPE_DEV ; GFX12-GENERIC-ISEL-NEXT: s_wait_loadcnt 0x0 ; GFX12-GENERIC-ISEL-NEXT: s_setpc_b64 s[30:31] bb: br label %bb5 bb2: %y = icmp eq i32 %x, 0 br i1 %y, label %bb3, label %bb4 bb3: ret <4 x float> %i6 bb4: ret <4 x float> %i6.1 bb5: %i = phi i32 [ 0, %bb ], [ %i8, %bb5 ] %i4 = zext i32 %i to i64 %i5 = getelementptr inbounds float, ptr addrspace(1) %arg, i64 %i4 %load = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %i5, metadata !3) %i6 = bitcast <4 x i32> %load to <4 x float> %i5.1 = getelementptr inbounds float, ptr addrspace(1) %arg.1, i64 %i4 %load.1 = call <4 x i32> @llvm.amdgcn.global.load.b128(ptr addrspace(1) %i5, metadata !4) %i6.1 = bitcast <4 x i32> %load to <4 x float> %i8 = add nuw nsw i32 %i, 1 %i9 = icmp eq i32 %i8, 256 br i1 %i9, label %bb2, label %bb5 } ;;============================================================================== ;; } End saddr addressing modes ;;============================================================================== !0 = !{!"wavefront"} !1 = !{!"workgroup"} !2 = !{!"cluster"} !3 = !{!"agent"} !4 = !{!""} !5 = !{i32 0, i32 1073741824} ; (1 << 30) !6 = !{i32 0, i32 1073741825} ; (1 << 30) + 1 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: ; GFX: {{.*}} ; GFX-ISEL: {{.*}} ; GFX-SDAG: {{.*}}