2898 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1250 < %s | FileCheck -check-prefixes=GFX1250,GFX1250-SDAG %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1250 < %s | FileCheck -check-prefixes=GFX1250,GFX1250-GISEL %s4 5; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1250 -mattr=+real-true16,-sramecc < %s | FileCheck -check-prefixes=GFX1250,GFX1250-NOECC,GFX1250-NOECC-SDAG-TRUE16 %s6; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1250 -mattr=-real-true16,-sramecc < %s | FileCheck -check-prefixes=GFX1250,GFX1250-NOECC,GFX1250-NOECC-SDAG-FAKE16 %s7 8; Test using saddr addressing mode of flat_*load_* instructions.9 10; --------------------------------------------------------------------------------11; No vgpr offset, constants12; --------------------------------------------------------------------------------13 14; SGPR base only15define amdgpu_ps float @flat_load_saddr_i8_offset_0(ptr inreg %sbase) {16; GFX1250-LABEL: flat_load_saddr_i8_offset_0:17; GFX1250: ; %bb.0:18; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 119; GFX1250-NEXT: v_mov_b32_e32 v0, 020; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3]21; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x022; GFX1250-NEXT: ; return to shader part epilog23 %load = load i8, ptr %sbase24 %zext = zext i8 %load to i3225 %to.vgpr = bitcast i32 %zext to float26 ret float %to.vgpr27}28 29; SGPR base with maximum gfx1250 immediate offset30define amdgpu_ps float @flat_load_saddr_i8_offset_8388607(ptr inreg %sbase) {31; GFX1250-LABEL: flat_load_saddr_i8_offset_8388607:32; GFX1250: ; %bb.0:33; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 134; GFX1250-NEXT: v_mov_b32_e32 v0, 035; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:838860736; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x037; GFX1250-NEXT: ; return to shader part epilog38 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 838860739 %load = load i8, ptr %gep040 %zext = zext i8 %load to i3241 %to.vgpr = bitcast i32 %zext to float42 ret float %to.vgpr43}44 45; SGPR base with maximum gfx1250 immediate offset + 146define amdgpu_ps float @flat_load_saddr_i8_offset_8388608(ptr inreg %sbase) {47; GFX1250-LABEL: flat_load_saddr_i8_offset_8388608:48; GFX1250: ; %bb.0:49; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 150; GFX1250-NEXT: v_mov_b32_e32 v0, 0x80000051; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3]52; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x053; GFX1250-NEXT: ; return to shader part epilog54 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 838860855 %load = load i8, ptr %gep056 %zext = zext i8 %load to i3257 %to.vgpr = bitcast i32 %zext to float58 ret float %to.vgpr59}60 61; SGPR base with maximum negative gfx1250 immediate offset62define amdgpu_ps float @flat_load_saddr_i8_offset_neg8388608(ptr inreg %sbase) {63; GFX1250-LABEL: flat_load_saddr_i8_offset_neg8388608:64; GFX1250: ; %bb.0:65; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 166; GFX1250-NEXT: v_mov_b32_e32 v0, 067; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-838860868; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x069; GFX1250-NEXT: ; return to shader part epilog70 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 -838860871 %load = load i8, ptr %gep072 %zext = zext i8 %load to i3273 %to.vgpr = bitcast i32 %zext to float74 ret float %to.vgpr75}76 77; SGPR base with maximum negative gfx1250 immediate offset -178define amdgpu_ps float @flat_load_saddr_i8_offset_neg8388609(ptr inreg %sbase) {79; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_neg8388609:80; GFX1250-SDAG: ; %bb.0:81; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 182; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0xff800000, s283; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)84; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s3, s085; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1] offset:-186; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x087; GFX1250-SDAG-NEXT: ; return to shader part epilog88;89; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_neg8388609:90; GFX1250-GISEL: ; %bb.0:91; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 192; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, 0xff7fffff93; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, -194; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)95; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]96; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]97; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x098; GFX1250-GISEL-NEXT: ; return to shader part epilog99;100; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_neg8388609:101; GFX1250-NOECC: ; %bb.0:102; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1103; GFX1250-NOECC-NEXT: v_add_co_u32 v0, s0, 0xff800000, s2104; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1)105; GFX1250-NOECC-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s3, s0106; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1] offset:-1107; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0108; GFX1250-NOECC-NEXT: ; return to shader part epilog109 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 -8388609110 %load = load i8, ptr %gep0111 %zext = zext i8 %load to i32112 %to.vgpr = bitcast i32 %zext to float113 ret float %to.vgpr114}115 116define amdgpu_ps float @flat_load_saddr_i8_offset_0xFFFFFFFF(ptr inreg %sbase) {117; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_0xFFFFFFFF:118; GFX1250-SDAG: ; %bb.0:119; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1120; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0xff800000, s2121; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)122; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, s3, s0123; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1] offset:8388607124; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0125; GFX1250-SDAG-NEXT: ; return to shader part epilog126;127; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_0xFFFFFFFF:128; GFX1250-GISEL: ; %bb.0:129; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1130; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, -1131; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 0132; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)133; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]134; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]135; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0136; GFX1250-GISEL-NEXT: ; return to shader part epilog137;138; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_0xFFFFFFFF:139; GFX1250-NOECC: ; %bb.0:140; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1141; GFX1250-NOECC-NEXT: v_add_co_u32 v0, s0, 0xff800000, s2142; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1)143; GFX1250-NOECC-NEXT: v_add_co_ci_u32_e64 v1, null, 0, s3, s0144; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1] offset:8388607145; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0146; GFX1250-NOECC-NEXT: ; return to shader part epilog147 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 4294967295148 %load = load i8, ptr %gep0149 %zext = zext i8 %load to i32150 %to.vgpr = bitcast i32 %zext to float151 ret float %to.vgpr152}153 154define amdgpu_ps float @flat_load_saddr_i8_offset_0x100000000(ptr inreg %sbase) {155; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_0x100000000:156; GFX1250-SDAG: ; %bb.0:157; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1158; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0159; GFX1250-SDAG-NEXT: s_add_co_i32 s3, s3, 1160; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3]161; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0162; GFX1250-SDAG-NEXT: ; return to shader part epilog163;164; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_0x100000000:165; GFX1250-GISEL: ; %bb.0:166; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1167; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, 0168; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 1169; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)170; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]171; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]172; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0173; GFX1250-GISEL-NEXT: ; return to shader part epilog174;175; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_0x100000000:176; GFX1250-NOECC: ; %bb.0:177; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1178; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, 0179; GFX1250-NOECC-NEXT: s_add_co_i32 s3, s3, 1180; GFX1250-NOECC-NEXT: flat_load_u8 v0, v0, s[2:3]181; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0182; GFX1250-NOECC-NEXT: ; return to shader part epilog183 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 4294967296184 %load = load i8, ptr %gep0185 %zext = zext i8 %load to i32186 %to.vgpr = bitcast i32 %zext to float187 ret float %to.vgpr188}189 190define amdgpu_ps float @flat_load_saddr_i8_offset_0x100000001(ptr inreg %sbase) {191; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_0x100000001:192; GFX1250-SDAG: ; %bb.0:193; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1194; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s2195; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)196; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s3, s0197; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1] offset:1198; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0199; GFX1250-SDAG-NEXT: ; return to shader part epilog200;201; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_0x100000001:202; GFX1250-GISEL: ; %bb.0:203; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1204; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, 1205; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 1206; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)207; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]208; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]209; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0210; GFX1250-GISEL-NEXT: ; return to shader part epilog211;212; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_0x100000001:213; GFX1250-NOECC: ; %bb.0:214; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1215; GFX1250-NOECC-NEXT: v_add_co_u32 v0, s0, 0, s2216; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1)217; GFX1250-NOECC-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s3, s0218; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1] offset:1219; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0220; GFX1250-NOECC-NEXT: ; return to shader part epilog221 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 4294967297222 %load = load i8, ptr %gep0223 %zext = zext i8 %load to i32224 %to.vgpr = bitcast i32 %zext to float225 ret float %to.vgpr226}227 228define amdgpu_ps float @flat_load_saddr_i8_offset_0x100000FFF(ptr inreg %sbase) {229; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_0x100000FFF:230; GFX1250-SDAG: ; %bb.0:231; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1232; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s2233; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)234; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s3, s0235; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1] offset:4095236; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0237; GFX1250-SDAG-NEXT: ; return to shader part epilog238;239; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_0x100000FFF:240; GFX1250-GISEL: ; %bb.0:241; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1242; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, 0xfff243; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 1244; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)245; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]246; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]247; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0248; GFX1250-GISEL-NEXT: ; return to shader part epilog249;250; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_0x100000FFF:251; GFX1250-NOECC: ; %bb.0:252; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1253; GFX1250-NOECC-NEXT: v_add_co_u32 v0, s0, 0, s2254; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1)255; GFX1250-NOECC-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s3, s0256; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1] offset:4095257; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0258; GFX1250-NOECC-NEXT: ; return to shader part epilog259 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 4294971391260 %load = load i8, ptr %gep0261 %zext = zext i8 %load to i32262 %to.vgpr = bitcast i32 %zext to float263 ret float %to.vgpr264}265 266define amdgpu_ps float @flat_load_saddr_i8_offset_0x100001000(ptr inreg %sbase) {267; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_0x100001000:268; GFX1250-SDAG: ; %bb.0:269; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1270; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s2271; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)272; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s3, s0273; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1] offset:4096274; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0275; GFX1250-SDAG-NEXT: ; return to shader part epilog276;277; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_0x100001000:278; GFX1250-GISEL: ; %bb.0:279; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1280; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, 0x1000281; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 1282; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)283; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]284; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]285; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0286; GFX1250-GISEL-NEXT: ; return to shader part epilog287;288; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_0x100001000:289; GFX1250-NOECC: ; %bb.0:290; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1291; GFX1250-NOECC-NEXT: v_add_co_u32 v0, s0, 0, s2292; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1)293; GFX1250-NOECC-NEXT: v_add_co_ci_u32_e64 v1, null, 1, s3, s0294; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1] offset:4096295; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0296; GFX1250-NOECC-NEXT: ; return to shader part epilog297 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 4294971392298 %load = load i8, ptr %gep0299 %zext = zext i8 %load to i32300 %to.vgpr = bitcast i32 %zext to float301 ret float %to.vgpr302}303 304define amdgpu_ps float @flat_load_saddr_i8_offset_neg0xFFFFFFFF(ptr inreg %sbase) {305; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_neg0xFFFFFFFF:306; GFX1250-SDAG: ; %bb.0:307; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1308; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0x800000, s2309; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)310; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s3, s0311; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1] offset:-8388607312; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0313; GFX1250-SDAG-NEXT: ; return to shader part epilog314;315; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_neg0xFFFFFFFF:316; GFX1250-GISEL: ; %bb.0:317; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1318; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, 1319; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, -1320; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)321; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]322; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]323; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0324; GFX1250-GISEL-NEXT: ; return to shader part epilog325;326; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_neg0xFFFFFFFF:327; GFX1250-NOECC: ; %bb.0:328; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1329; GFX1250-NOECC-NEXT: v_add_co_u32 v0, s0, 0x800000, s2330; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1)331; GFX1250-NOECC-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s3, s0332; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1] offset:-8388607333; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0334; GFX1250-NOECC-NEXT: ; return to shader part epilog335 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 -4294967295336 %load = load i8, ptr %gep0337 %zext = zext i8 %load to i32338 %to.vgpr = bitcast i32 %zext to float339 ret float %to.vgpr340}341 342define amdgpu_ps float @flat_load_saddr_i8_offset_neg0x100000000(ptr inreg %sbase) {343; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_neg0x100000000:344; GFX1250-SDAG: ; %bb.0:345; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1346; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 0347; GFX1250-SDAG-NEXT: s_add_co_i32 s3, s3, -1348; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3]349; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0350; GFX1250-SDAG-NEXT: ; return to shader part epilog351;352; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_neg0x100000000:353; GFX1250-GISEL: ; %bb.0:354; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1355; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, 0356; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, -1357; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)358; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]359; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]360; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0361; GFX1250-GISEL-NEXT: ; return to shader part epilog362;363; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_neg0x100000000:364; GFX1250-NOECC: ; %bb.0:365; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1366; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, 0367; GFX1250-NOECC-NEXT: s_add_co_i32 s3, s3, -1368; GFX1250-NOECC-NEXT: flat_load_u8 v0, v0, s[2:3]369; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0370; GFX1250-NOECC-NEXT: ; return to shader part epilog371 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 -4294967296372 %load = load i8, ptr %gep0373 %zext = zext i8 %load to i32374 %to.vgpr = bitcast i32 %zext to float375 ret float %to.vgpr376}377 378define amdgpu_ps float @flat_load_saddr_i8_offset_neg0x100000001(ptr inreg %sbase) {379; GFX1250-SDAG-LABEL: flat_load_saddr_i8_offset_neg0x100000001:380; GFX1250-SDAG: ; %bb.0:381; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1382; GFX1250-SDAG-NEXT: v_add_co_u32 v0, s0, 0, s2383; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)384; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s3, s0385; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1] offset:-1386; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0387; GFX1250-SDAG-NEXT: ; return to shader part epilog388;389; GFX1250-GISEL-LABEL: flat_load_saddr_i8_offset_neg0x100000001:390; GFX1250-GISEL: ; %bb.0:391; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1392; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, -1393; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, -2394; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)395; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[0:1]396; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]397; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0398; GFX1250-GISEL-NEXT: ; return to shader part epilog399;400; GFX1250-NOECC-LABEL: flat_load_saddr_i8_offset_neg0x100000001:401; GFX1250-NOECC: ; %bb.0:402; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1403; GFX1250-NOECC-NEXT: v_add_co_u32 v0, s0, 0, s2404; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1)405; GFX1250-NOECC-NEXT: v_add_co_ci_u32_e64 v1, null, -1, s3, s0406; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1] offset:-1407; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0408; GFX1250-NOECC-NEXT: ; return to shader part epilog409 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 -4294967297410 %load = load i8, ptr %gep0411 %zext = zext i8 %load to i32412 %to.vgpr = bitcast i32 %zext to float413 ret float %to.vgpr414}415 416; --------------------------------------------------------------------------------417; Basic addressing patterns418; --------------------------------------------------------------------------------419 420; Basic pattern, no immediate offset.421define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr(ptr inreg %sbase, i32 %voffset) {422; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr:423; GFX1250: ; %bb.0:424; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1425; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3]426; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0427; GFX1250-NEXT: ; return to shader part epilog428 %zext.offset = zext i32 %voffset to i64429 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset430 %load = load i8, ptr %gep0431 %zext = zext i8 %load to i32432 %to.vgpr = bitcast i32 %zext to float433 ret float %to.vgpr434}435 436; Maximum positive offset on gfx1250437define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_offset_8388607(ptr inreg %sbase, i32 %voffset) {438; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr_offset_8388607:439; GFX1250: ; %bb.0:440; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1441; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:8388607442; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0443; GFX1250-NEXT: ; return to shader part epilog444 %zext.offset = zext i32 %voffset to i64445 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset446 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 8388607447 %load = load i8, ptr %gep1448 %zext = zext i8 %load to i32449 %to.vgpr = bitcast i32 %zext to float450 ret float %to.vgpr451}452 453; Maximum positive offset on gfx1250 + 1454define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_offset_8388608(ptr inreg %sbase, i32 %voffset) {455; GFX1250-SDAG-LABEL: flat_load_saddr_i8_zext_vgpr_offset_8388608:456; GFX1250-SDAG: ; %bb.0:457; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1458; GFX1250-SDAG-NEXT: v_mov_b32_e32 v1, 0459; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)460; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], s[2:3], v[0:1]461; GFX1250-SDAG-NEXT: v_add_co_u32 v0, vcc_lo, 0x800000, v0462; GFX1250-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)463; GFX1250-SDAG-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo464; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1]465; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0466; GFX1250-SDAG-NEXT: ; return to shader part epilog467;468; GFX1250-GISEL-LABEL: flat_load_saddr_i8_zext_vgpr_offset_8388608:469; GFX1250-GISEL: ; %bb.0:470; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1471; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[2:3], s[2:3]472; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)473; GFX1250-GISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0474; GFX1250-GISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v3, vcc_lo475; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)476; GFX1250-GISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x800000, v0477; GFX1250-GISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo478; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]479; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0480; GFX1250-GISEL-NEXT: ; return to shader part epilog481;482; GFX1250-NOECC-LABEL: flat_load_saddr_i8_zext_vgpr_offset_8388608:483; GFX1250-NOECC: ; %bb.0:484; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1485; GFX1250-NOECC-NEXT: v_mov_b32_e32 v1, 0486; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)487; GFX1250-NOECC-NEXT: v_add_nc_u64_e32 v[0:1], s[2:3], v[0:1]488; GFX1250-NOECC-NEXT: v_add_co_u32 v0, vcc_lo, 0x800000, v0489; GFX1250-NOECC-NEXT: s_delay_alu instid0(VALU_DEP_1)490; GFX1250-NOECC-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo491; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1]492; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0493; GFX1250-NOECC-NEXT: ; return to shader part epilog494 %zext.offset = zext i32 %voffset to i64495 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset496 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 8388608497 %load = load i8, ptr %gep1498 %zext = zext i8 %load to i32499 %to.vgpr = bitcast i32 %zext to float500 ret float %to.vgpr501}502 503; Maximum negative offset on gfx1250504define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_offset_neg8388608(ptr inreg %sbase, i32 %voffset) {505; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr_offset_neg8388608:506; GFX1250: ; %bb.0:507; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1508; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-8388608509; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0510; GFX1250-NEXT: ; return to shader part epilog511 %zext.offset = zext i32 %voffset to i64512 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset513 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -8388608514 %load = load i8, ptr %gep1515 %zext = zext i8 %load to i32516 %to.vgpr = bitcast i32 %zext to float517 ret float %to.vgpr518}519 520; Maximum negative offset on gfx1250 - 1521define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_offset_neg8388607(ptr inreg %sbase, i32 %voffset) {522; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr_offset_neg8388607:523; GFX1250: ; %bb.0:524; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1525; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-8388607526; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0527; GFX1250-NEXT: ; return to shader part epilog528 %zext.offset = zext i32 %voffset to i64529 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset530 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -8388607531 %load = load i8, ptr %gep1532 %zext = zext i8 %load to i32533 %to.vgpr = bitcast i32 %zext to float534 ret float %to.vgpr535}536 537define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_offset_8388607_gep_order(ptr inreg %sbase, i32 %voffset) {538; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr_offset_8388607_gep_order:539; GFX1250: ; %bb.0:540; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1541; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:8388607542; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0543; GFX1250-NEXT: ; return to shader part epilog544 %zext.offset = zext i32 %voffset to i64545 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 8388607546 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 %zext.offset547 %load = load i8, ptr %gep1548 %zext = zext i8 %load to i32549 %to.vgpr = bitcast i32 %zext to float550 ret float %to.vgpr551}552 553; pointer addressing done in integers554define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_ptrtoint(ptr inreg %sbase, i32 %voffset) {555; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr_ptrtoint:556; GFX1250: ; %bb.0:557; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1558; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3]559; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0560; GFX1250-NEXT: ; return to shader part epilog561 %zext.offset = zext i32 %voffset to i64562 %sbase.as.int = ptrtoint ptr %sbase to i64563 %add = add i64 %sbase.as.int, %zext.offset564 %dirty.gep = inttoptr i64 %add to ptr565 %load = load i8, ptr %dirty.gep566 %zext = zext i8 %load to i32567 %to.vgpr = bitcast i32 %zext to float568 ret float %to.vgpr569}570 571; zext forced to LHS of addressing expression572define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_ptrtoint_commute_add(ptr inreg %sbase, i32 %voffset) {573; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr_ptrtoint_commute_add:574; GFX1250: ; %bb.0:575; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1576; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3]577; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0578; GFX1250-NEXT: ; return to shader part epilog579 %zext.offset = zext i32 %voffset to i64580 %sbase.as.int = ptrtoint ptr %sbase to i64581 %add = add i64 %zext.offset, %sbase.as.int582 %dirty.gep = inttoptr i64 %add to ptr583 %load = load i8, ptr %dirty.gep584 %zext = zext i8 %load to i32585 %to.vgpr = bitcast i32 %zext to float586 ret float %to.vgpr587}588 589; zext forced to LHS of addressing expression, with immediate offset590define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0(ptr inreg %sbase, i32 %voffset) {591; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset0:592; GFX1250: ; %bb.0:593; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1594; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:128595; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0596; GFX1250-NEXT: ; return to shader part epilog597 %zext.offset = zext i32 %voffset to i64598 %sbase.as.int = ptrtoint ptr %sbase to i64599 %add = add i64 %zext.offset, %sbase.as.int600 %add.immoffset = add i64 %add, 128601 %dirty.gep = inttoptr i64 %add.immoffset to ptr602 %load = load i8, ptr %dirty.gep603 %zext = zext i8 %load to i32604 %to.vgpr = bitcast i32 %zext to float605 ret float %to.vgpr606}607 608; zext forced to LHS of addressing expression, with immediate offset in non-canonical position609define amdgpu_ps float @flat_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1(ptr inreg %sbase, i32 %voffset) {610; GFX1250-LABEL: flat_load_saddr_i8_zext_vgpr_ptrtoint_commute_add_imm_offset1:611; GFX1250: ; %bb.0:612; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1613; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:128614; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0615; GFX1250-NEXT: ; return to shader part epilog616 %zext.offset = zext i32 %voffset to i64617 %sbase.as.int = ptrtoint ptr %sbase to i64618 %add.immoffset = add i64 %sbase.as.int, 128619 %add = add i64 %zext.offset, %add.immoffset620 %dirty.gep = inttoptr i64 %add to ptr621 %load = load i8, ptr %dirty.gep622 %zext = zext i8 %load to i32623 %to.vgpr = bitcast i32 %zext to float624 ret float %to.vgpr625}626 627; --------------------------------------------------------------------------------628; Uniformity edge cases629; --------------------------------------------------------------------------------630 631@ptr.in.lds = internal addrspace(3) global ptr undef632 633; Base pointer is uniform, but also in VGPRs634define amdgpu_ps float @flat_load_saddr_uniform_ptr_in_vgprs(i32 %voffset) {635; GFX1250-SDAG-LABEL: flat_load_saddr_uniform_ptr_in_vgprs:636; GFX1250-SDAG: ; %bb.0:637; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1638; GFX1250-SDAG-NEXT: v_mov_b32_e32 v1, 0639; GFX1250-SDAG-NEXT: ds_load_b64 v[2:3], v1640; GFX1250-SDAG-NEXT: s_wait_dscnt 0x0641; GFX1250-SDAG-NEXT: v_readfirstlane_b32 s0, v2642; GFX1250-SDAG-NEXT: v_readfirstlane_b32 s1, v3643; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[0:1]644; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0645; GFX1250-SDAG-NEXT: ; return to shader part epilog646;647; GFX1250-GISEL-LABEL: flat_load_saddr_uniform_ptr_in_vgprs:648; GFX1250-GISEL: ; %bb.0:649; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1650; GFX1250-GISEL-NEXT: v_mov_b32_e32 v1, 0651; GFX1250-GISEL-NEXT: ds_load_b64 v[2:3], v1652; GFX1250-GISEL-NEXT: s_wait_dscnt 0x0653; GFX1250-GISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0654; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)655; GFX1250-GISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v3, vcc_lo656; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]657; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0658; GFX1250-GISEL-NEXT: ; return to shader part epilog659;660; GFX1250-NOECC-LABEL: flat_load_saddr_uniform_ptr_in_vgprs:661; GFX1250-NOECC: ; %bb.0:662; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1663; GFX1250-NOECC-NEXT: v_mov_b32_e32 v1, 0664; GFX1250-NOECC-NEXT: ds_load_b64 v[2:3], v1665; GFX1250-NOECC-NEXT: s_wait_dscnt 0x0666; GFX1250-NOECC-NEXT: v_readfirstlane_b32 s0, v2667; GFX1250-NOECC-NEXT: v_readfirstlane_b32 s1, v3668; GFX1250-NOECC-NEXT: flat_load_u8 v0, v0, s[0:1]669; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0670; GFX1250-NOECC-NEXT: ; return to shader part epilog671 %sbase = load ptr, ptr addrspace(3) @ptr.in.lds672 %zext.offset = zext i32 %voffset to i64673 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset674 %load = load i8, ptr %gep0675 %zext = zext i8 %load to i32676 %to.vgpr = bitcast i32 %zext to float677 ret float %to.vgpr678}679 680; Base pointer is uniform, but also in VGPRs, with imm offset681define amdgpu_ps float @flat_load_saddr_uniform_ptr_in_vgprs_immoffset(i32 %voffset) {682; GFX1250-SDAG-LABEL: flat_load_saddr_uniform_ptr_in_vgprs_immoffset:683; GFX1250-SDAG: ; %bb.0:684; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1685; GFX1250-SDAG-NEXT: v_mov_b32_e32 v1, 0686; GFX1250-SDAG-NEXT: ds_load_b64 v[2:3], v1687; GFX1250-SDAG-NEXT: s_wait_dscnt 0x0688; GFX1250-SDAG-NEXT: v_readfirstlane_b32 s0, v2689; GFX1250-SDAG-NEXT: v_readfirstlane_b32 s1, v3690; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[0:1] offset:42691; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0692; GFX1250-SDAG-NEXT: ; return to shader part epilog693;694; GFX1250-GISEL-LABEL: flat_load_saddr_uniform_ptr_in_vgprs_immoffset:695; GFX1250-GISEL: ; %bb.0:696; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1697; GFX1250-GISEL-NEXT: v_mov_b32_e32 v1, 0698; GFX1250-GISEL-NEXT: ds_load_b64 v[2:3], v1699; GFX1250-GISEL-NEXT: s_wait_dscnt 0x0700; GFX1250-GISEL-NEXT: v_add_co_u32 v0, vcc_lo, v2, v0701; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)702; GFX1250-GISEL-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v3, vcc_lo703; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1] offset:42704; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0705; GFX1250-GISEL-NEXT: ; return to shader part epilog706;707; GFX1250-NOECC-LABEL: flat_load_saddr_uniform_ptr_in_vgprs_immoffset:708; GFX1250-NOECC: ; %bb.0:709; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1710; GFX1250-NOECC-NEXT: v_mov_b32_e32 v1, 0711; GFX1250-NOECC-NEXT: ds_load_b64 v[2:3], v1712; GFX1250-NOECC-NEXT: s_wait_dscnt 0x0713; GFX1250-NOECC-NEXT: v_readfirstlane_b32 s0, v2714; GFX1250-NOECC-NEXT: v_readfirstlane_b32 s1, v3715; GFX1250-NOECC-NEXT: flat_load_u8 v0, v0, s[0:1] offset:42716; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0717; GFX1250-NOECC-NEXT: ; return to shader part epilog718 %sbase = load ptr, ptr addrspace(3) @ptr.in.lds719 %zext.offset = zext i32 %voffset to i64720 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset721 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 42722 %load = load i8, ptr %gep1723 %zext = zext i8 %load to i32724 %to.vgpr = bitcast i32 %zext to float725 ret float %to.vgpr726}727 728; Both 64-bit base and 32-bit offset are scalar729define amdgpu_ps float @flat_load_saddr_i8_zext_uniform_offset(ptr inreg %sbase, i32 inreg %soffset) {730; GFX1250-SDAG-LABEL: flat_load_saddr_i8_zext_uniform_offset:731; GFX1250-SDAG: ; %bb.0:732; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1733; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, s4734; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3]735; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0736; GFX1250-SDAG-NEXT: ; return to shader part epilog737;738; GFX1250-GISEL-LABEL: flat_load_saddr_i8_zext_uniform_offset:739; GFX1250-GISEL: ; %bb.0:740; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1741; GFX1250-GISEL-NEXT: v_mov_b32_e32 v0, 0742; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, s4743; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 0744; GFX1250-GISEL-NEXT: flat_load_u8 v0, v0, s[0:1]745; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0746; GFX1250-GISEL-NEXT: ; return to shader part epilog747;748; GFX1250-NOECC-LABEL: flat_load_saddr_i8_zext_uniform_offset:749; GFX1250-NOECC: ; %bb.0:750; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1751; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, s4752; GFX1250-NOECC-NEXT: flat_load_u8 v0, v0, s[2:3]753; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0754; GFX1250-NOECC-NEXT: ; return to shader part epilog755 %zext.offset = zext i32 %soffset to i64756 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset757 %load = load i8, ptr %gep0758 %zext = zext i8 %load to i32759 %to.vgpr = bitcast i32 %zext to float760 ret float %to.vgpr761}762 763; Both 64-bit base and 32-bit offset are scalar, with immediate offset.764define amdgpu_ps float @flat_load_saddr_i8_zext_uniform_offset_immoffset(ptr inreg %sbase, i32 inreg %soffset) {765; GFX1250-SDAG-LABEL: flat_load_saddr_i8_zext_uniform_offset_immoffset:766; GFX1250-SDAG: ; %bb.0:767; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1768; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, s4769; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-24770; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0771; GFX1250-SDAG-NEXT: ; return to shader part epilog772;773; GFX1250-GISEL-LABEL: flat_load_saddr_i8_zext_uniform_offset_immoffset:774; GFX1250-GISEL: ; %bb.0:775; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1776; GFX1250-GISEL-NEXT: v_mov_b32_e32 v0, 0777; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, s4778; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 0779; GFX1250-GISEL-NEXT: flat_load_u8 v0, v0, s[0:1] offset:-24780; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0781; GFX1250-GISEL-NEXT: ; return to shader part epilog782;783; GFX1250-NOECC-LABEL: flat_load_saddr_i8_zext_uniform_offset_immoffset:784; GFX1250-NOECC: ; %bb.0:785; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1786; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, s4787; GFX1250-NOECC-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-24788; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0789; GFX1250-NOECC-NEXT: ; return to shader part epilog790 %zext.offset = zext i32 %soffset to i64791 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset792 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -24793 %load = load i8, ptr %gep1794 %zext = zext i8 %load to i32795 %to.vgpr = bitcast i32 %zext to float796 ret float %to.vgpr797}798 799; Both components uniform, zext forced to LHS of addressing expression800define amdgpu_ps float @flat_load_saddr_i8_zext_sgpr_ptrtoint_commute_add(ptr inreg %sbase, i32 inreg %soffset) {801; GFX1250-SDAG-LABEL: flat_load_saddr_i8_zext_sgpr_ptrtoint_commute_add:802; GFX1250-SDAG: ; %bb.0:803; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1804; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, s4805; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3]806; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0807; GFX1250-SDAG-NEXT: ; return to shader part epilog808;809; GFX1250-GISEL-LABEL: flat_load_saddr_i8_zext_sgpr_ptrtoint_commute_add:810; GFX1250-GISEL: ; %bb.0:811; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1812; GFX1250-GISEL-NEXT: v_mov_b32_e32 v0, 0813; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, s4814; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 0815; GFX1250-GISEL-NEXT: flat_load_u8 v0, v0, s[0:1]816; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0817; GFX1250-GISEL-NEXT: ; return to shader part epilog818;819; GFX1250-NOECC-LABEL: flat_load_saddr_i8_zext_sgpr_ptrtoint_commute_add:820; GFX1250-NOECC: ; %bb.0:821; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1822; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, s4823; GFX1250-NOECC-NEXT: flat_load_u8 v0, v0, s[2:3]824; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0825; GFX1250-NOECC-NEXT: ; return to shader part epilog826 %zext.offset = zext i32 %soffset to i64827 %sbase.as.int = ptrtoint ptr %sbase to i64828 %add = add i64 %zext.offset, %sbase.as.int829 %dirty.gep = inttoptr i64 %add to ptr830 %load = load i8, ptr %dirty.gep831 %zext = zext i8 %load to i32832 %to.vgpr = bitcast i32 %zext to float833 ret float %to.vgpr834}835 836; Both components uniform, zext forced to LHS of addressing expression, with immediate offset837define amdgpu_ps float @flat_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0(ptr inreg %sbase, i32 inreg %soffset) {838; GFX1250-SDAG-LABEL: flat_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0:839; GFX1250-SDAG: ; %bb.0:840; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1841; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, s4842; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3] offset:128843; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0844; GFX1250-SDAG-NEXT: ; return to shader part epilog845;846; GFX1250-GISEL-LABEL: flat_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0:847; GFX1250-GISEL: ; %bb.0:848; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1849; GFX1250-GISEL-NEXT: v_mov_b32_e32 v0, 0850; GFX1250-GISEL-NEXT: s_add_co_u32 s0, s2, s4851; GFX1250-GISEL-NEXT: s_add_co_ci_u32 s1, s3, 0852; GFX1250-GISEL-NEXT: flat_load_u8 v0, v0, s[0:1] offset:128853; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0854; GFX1250-GISEL-NEXT: ; return to shader part epilog855;856; GFX1250-NOECC-LABEL: flat_load_saddr_i8_zext_sgpr_ptrtoint_commute_add_imm_offset0:857; GFX1250-NOECC: ; %bb.0:858; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1859; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, s4860; GFX1250-NOECC-NEXT: flat_load_u8 v0, v0, s[2:3] offset:128861; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0862; GFX1250-NOECC-NEXT: ; return to shader part epilog863 %zext.offset = zext i32 %soffset to i64864 %sbase.as.int = ptrtoint ptr %sbase to i64865 %add = add i64 %zext.offset, %sbase.as.int866 %add.immoffset = add i64 %add, 128867 %dirty.gep = inttoptr i64 %add.immoffset to ptr868 %load = load i8, ptr %dirty.gep869 %zext = zext i8 %load to i32870 %to.vgpr = bitcast i32 %zext to float871 ret float %to.vgpr872}873 874; divergent 64-bit base, 32-bit scalar offset.875define amdgpu_ps float @flat_load_i8_vgpr64_sgpr32(ptr %vbase, i32 inreg %soffset) {876; GFX1250-SDAG-LABEL: flat_load_i8_vgpr64_sgpr32:877; GFX1250-SDAG: ; %bb.0:878; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1879; GFX1250-SDAG-NEXT: s_mov_b32 s3, 0880; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)881; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], s[2:3], v[0:1]882; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1]883; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0884; GFX1250-SDAG-NEXT: ; return to shader part epilog885;886; GFX1250-GISEL-LABEL: flat_load_i8_vgpr64_sgpr32:887; GFX1250-GISEL: ; %bb.0:888; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1889; GFX1250-GISEL-NEXT: s_mov_b32 s3, 0890; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)891; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[2:3], s[2:3]892; GFX1250-GISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2893; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)894; GFX1250-GISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo895; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1]896; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0897; GFX1250-GISEL-NEXT: ; return to shader part epilog898;899; GFX1250-NOECC-LABEL: flat_load_i8_vgpr64_sgpr32:900; GFX1250-NOECC: ; %bb.0:901; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1902; GFX1250-NOECC-NEXT: s_mov_b32 s3, 0903; GFX1250-NOECC-NEXT: s_delay_alu instid0(SALU_CYCLE_1)904; GFX1250-NOECC-NEXT: v_add_nc_u64_e32 v[0:1], s[2:3], v[0:1]905; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1]906; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0907; GFX1250-NOECC-NEXT: ; return to shader part epilog908 %zext.offset = zext i32 %soffset to i64909 %gep0 = getelementptr inbounds i8, ptr %vbase, i64 %zext.offset910 %load = load i8, ptr %gep0911 %zext = zext i8 %load to i32912 %to.vgpr = bitcast i32 %zext to float913 ret float %to.vgpr914}915 916; divergent 64-bit base, 32-bit scalar offset, with imm offset917define amdgpu_ps float @flat_load_i8_vgpr64_sgpr32_offset_8388607(ptr %vbase, i32 inreg %soffset) {918; GFX1250-SDAG-LABEL: flat_load_i8_vgpr64_sgpr32_offset_8388607:919; GFX1250-SDAG: ; %bb.0:920; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1921; GFX1250-SDAG-NEXT: s_mov_b32 s3, 0922; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)923; GFX1250-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], s[2:3], v[0:1]924; GFX1250-SDAG-NEXT: flat_load_u8 v0, v[0:1] offset:8388607925; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0926; GFX1250-SDAG-NEXT: ; return to shader part epilog927;928; GFX1250-GISEL-LABEL: flat_load_i8_vgpr64_sgpr32_offset_8388607:929; GFX1250-GISEL: ; %bb.0:930; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1931; GFX1250-GISEL-NEXT: s_mov_b32 s3, 0932; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)933; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[2:3], s[2:3]934; GFX1250-GISEL-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2935; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)936; GFX1250-GISEL-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo937; GFX1250-GISEL-NEXT: flat_load_u8 v0, v[0:1] offset:8388607938; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0939; GFX1250-GISEL-NEXT: ; return to shader part epilog940;941; GFX1250-NOECC-LABEL: flat_load_i8_vgpr64_sgpr32_offset_8388607:942; GFX1250-NOECC: ; %bb.0:943; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1944; GFX1250-NOECC-NEXT: s_mov_b32 s3, 0945; GFX1250-NOECC-NEXT: s_delay_alu instid0(SALU_CYCLE_1)946; GFX1250-NOECC-NEXT: v_add_nc_u64_e32 v[0:1], s[2:3], v[0:1]947; GFX1250-NOECC-NEXT: flat_load_u8 v0, v[0:1] offset:8388607948; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x0949; GFX1250-NOECC-NEXT: ; return to shader part epilog950 %zext.offset = zext i32 %soffset to i64951 %gep0 = getelementptr inbounds i8, ptr %vbase, i64 %zext.offset952 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 8388607953 %load = load i8, ptr %gep1954 %zext = zext i8 %load to i32955 %to.vgpr = bitcast i32 %zext to float956 ret float %to.vgpr957}958 959; --------------------------------------------------------------------------------960; Natural addressing shifts with restricted range961; --------------------------------------------------------------------------------962 963; Cannot push the shift into 32-bits, and cannot match.964define amdgpu_ps float @flat_load_saddr_f32_natural_addressing(ptr inreg %sbase, ptr %voffset.ptr) {965; GFX1250-LABEL: flat_load_saddr_f32_natural_addressing:966; GFX1250: ; %bb.0:967; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1968; GFX1250-NEXT: flat_load_b32 v0, v[0:1]969; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0970; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] scale_offset971; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0972; GFX1250-NEXT: ; return to shader part epilog973 %voffset = load i32, ptr %voffset.ptr974 %zext.offset = zext i32 %voffset to i64975 %gep = getelementptr inbounds float, ptr %sbase, i64 %zext.offset976 %load = load float, ptr %gep977 ret float %load978}979 980; Cannot push the shift into 32-bits, with an immediate offset.981define amdgpu_ps float @flat_load_saddr_f32_natural_addressing_immoffset(ptr inreg %sbase, ptr %voffset.ptr) {982; GFX1250-LABEL: flat_load_saddr_f32_natural_addressing_immoffset:983; GFX1250: ; %bb.0:984; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1985; GFX1250-NEXT: flat_load_b32 v0, v[0:1]986; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0987; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] offset:128988; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0989; GFX1250-NEXT: ; return to shader part epilog990 %voffset = load i32, ptr %voffset.ptr991 %zext.offset = zext i32 %voffset to i64992 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset993 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 128994 %load = load float, ptr %gep1995 ret float %load996}997 998; Range is sufficiently restricted to push the shift into 32-bits.999define amdgpu_ps float @flat_load_f32_saddr_zext_vgpr_range(ptr inreg %sbase, ptr %voffset.ptr) {1000; GFX1250-LABEL: flat_load_f32_saddr_zext_vgpr_range:1001; GFX1250: ; %bb.0:1002; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11003; GFX1250-NEXT: flat_load_b32 v0, v[0:1]1004; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01005; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] scale_offset1006; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01007; GFX1250-NEXT: ; return to shader part epilog1008 %voffset = load i32, ptr %voffset.ptr, !range !0, !noundef !{}1009 %zext.offset = zext i32 %voffset to i641010 %gep = getelementptr inbounds float, ptr %sbase, i64 %zext.offset1011 %load = load float, ptr %gep1012 ret float %load1013}1014 1015; Range is sufficiently restricted to push the shift into 32-bits, with an imm offset1016define amdgpu_ps float @flat_load_f32_saddr_zext_vgpr_range_imm_offset(ptr inreg %sbase, ptr %voffset.ptr) {1017; GFX1250-LABEL: flat_load_f32_saddr_zext_vgpr_range_imm_offset:1018; GFX1250: ; %bb.0:1019; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11020; GFX1250-NEXT: flat_load_b32 v0, v[0:1]1021; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01022; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] offset:400 scale_offset1023; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01024; GFX1250-NEXT: ; return to shader part epilog1025 %voffset = load i32, ptr %voffset.ptr, !range !0, !noundef !{}1026 %zext.offset = zext i32 %voffset to i641027 %gep0 = getelementptr inbounds float, ptr %sbase, i64 %zext.offset1028 %gep1 = getelementptr inbounds float, ptr %gep0, i64 1001029 %load = load float, ptr %gep11030 ret float %load1031}1032 1033; Range is 1 beyond the limit where we can move the shift into 32-bits.1034define amdgpu_ps float @flat_load_f32_saddr_zext_vgpr_range_too_large(ptr inreg %sbase, ptr %voffset.ptr) {1035; GFX1250-LABEL: flat_load_f32_saddr_zext_vgpr_range_too_large:1036; GFX1250: ; %bb.0:1037; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11038; GFX1250-NEXT: flat_load_b32 v0, v[0:1]1039; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01040; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] scale_offset1041; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01042; GFX1250-NEXT: ; return to shader part epilog1043 %voffset = load i32, ptr %voffset.ptr, !range !1, !noundef !{}1044 %zext.offset = zext i32 %voffset to i641045 %gep = getelementptr inbounds float, ptr %sbase, i64 %zext.offset1046 %load = load float, ptr %gep1047 ret float %load1048}1049 1050; --------------------------------------------------------------------------------1051; Stress various type loads1052; --------------------------------------------------------------------------------1053 1054define amdgpu_ps half @flat_load_saddr_i16(ptr inreg %sbase, i32 %voffset) {1055; GFX1250-SDAG-LABEL: flat_load_saddr_i16:1056; GFX1250-SDAG: ; %bb.0:1057; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11058; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3]1059; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x01060; GFX1250-SDAG-NEXT: ; return to shader part epilog1061;1062; GFX1250-GISEL-LABEL: flat_load_saddr_i16:1063; GFX1250-GISEL: ; %bb.0:1064; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11065; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3]1066; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x01067; GFX1250-GISEL-NEXT: ; return to shader part epilog1068;1069; GFX1250-NOECC-SDAG-TRUE16-LABEL: flat_load_saddr_i16:1070; GFX1250-NOECC-SDAG-TRUE16: ; %bb.0:1071; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11072; GFX1250-NOECC-SDAG-TRUE16-NEXT: flat_load_d16_b16 v0, v0, s[2:3]1073; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x01074; GFX1250-NOECC-SDAG-TRUE16-NEXT: ; return to shader part epilog1075;1076; GFX1250-NOECC-SDAG-FAKE16-LABEL: flat_load_saddr_i16:1077; GFX1250-NOECC-SDAG-FAKE16: ; %bb.0:1078; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11079; GFX1250-NOECC-SDAG-FAKE16-NEXT: flat_load_u16 v0, v0, s[2:3]1080; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x01081; GFX1250-NOECC-SDAG-FAKE16-NEXT: ; return to shader part epilog1082 %zext.offset = zext i32 %voffset to i641083 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1084 %load = load i16, ptr %gep01085 %cast.load = bitcast i16 %load to half1086 ret half %cast.load1087}1088 1089define amdgpu_ps half @flat_load_saddr_i16_immneg128(ptr inreg %sbase, i32 %voffset) {1090; GFX1250-SDAG-LABEL: flat_load_saddr_i16_immneg128:1091; GFX1250-SDAG: ; %bb.0:1092; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11093; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1281094; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x01095; GFX1250-SDAG-NEXT: ; return to shader part epilog1096;1097; GFX1250-GISEL-LABEL: flat_load_saddr_i16_immneg128:1098; GFX1250-GISEL: ; %bb.0:1099; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11100; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1281101; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x01102; GFX1250-GISEL-NEXT: ; return to shader part epilog1103;1104; GFX1250-NOECC-SDAG-TRUE16-LABEL: flat_load_saddr_i16_immneg128:1105; GFX1250-NOECC-SDAG-TRUE16: ; %bb.0:1106; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11107; GFX1250-NOECC-SDAG-TRUE16-NEXT: flat_load_d16_b16 v0, v0, s[2:3] offset:-1281108; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x01109; GFX1250-NOECC-SDAG-TRUE16-NEXT: ; return to shader part epilog1110;1111; GFX1250-NOECC-SDAG-FAKE16-LABEL: flat_load_saddr_i16_immneg128:1112; GFX1250-NOECC-SDAG-FAKE16: ; %bb.0:1113; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11114; GFX1250-NOECC-SDAG-FAKE16-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1281115; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x01116; GFX1250-NOECC-SDAG-FAKE16-NEXT: ; return to shader part epilog1117 %zext.offset = zext i32 %voffset to i641118 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1119 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281120 %load = load i16, ptr %gep11121 %cast.load = bitcast i16 %load to half1122 ret half %cast.load1123}1124 1125define amdgpu_ps half @flat_load_saddr_f16(ptr inreg %sbase, i32 %voffset) {1126; GFX1250-SDAG-LABEL: flat_load_saddr_f16:1127; GFX1250-SDAG: ; %bb.0:1128; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11129; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3]1130; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x01131; GFX1250-SDAG-NEXT: ; return to shader part epilog1132;1133; GFX1250-GISEL-LABEL: flat_load_saddr_f16:1134; GFX1250-GISEL: ; %bb.0:1135; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11136; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3]1137; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x01138; GFX1250-GISEL-NEXT: ; return to shader part epilog1139;1140; GFX1250-NOECC-SDAG-TRUE16-LABEL: flat_load_saddr_f16:1141; GFX1250-NOECC-SDAG-TRUE16: ; %bb.0:1142; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11143; GFX1250-NOECC-SDAG-TRUE16-NEXT: flat_load_d16_b16 v0, v0, s[2:3]1144; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x01145; GFX1250-NOECC-SDAG-TRUE16-NEXT: ; return to shader part epilog1146;1147; GFX1250-NOECC-SDAG-FAKE16-LABEL: flat_load_saddr_f16:1148; GFX1250-NOECC-SDAG-FAKE16: ; %bb.0:1149; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11150; GFX1250-NOECC-SDAG-FAKE16-NEXT: flat_load_u16 v0, v0, s[2:3]1151; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x01152; GFX1250-NOECC-SDAG-FAKE16-NEXT: ; return to shader part epilog1153 %zext.offset = zext i32 %voffset to i641154 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1155 %load = load half, ptr %gep01156 ret half %load1157}1158 1159define amdgpu_ps half @flat_load_saddr_f16_immneg128(ptr inreg %sbase, i32 %voffset) {1160; GFX1250-SDAG-LABEL: flat_load_saddr_f16_immneg128:1161; GFX1250-SDAG: ; %bb.0:1162; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11163; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1281164; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x01165; GFX1250-SDAG-NEXT: ; return to shader part epilog1166;1167; GFX1250-GISEL-LABEL: flat_load_saddr_f16_immneg128:1168; GFX1250-GISEL: ; %bb.0:1169; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11170; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1281171; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x01172; GFX1250-GISEL-NEXT: ; return to shader part epilog1173;1174; GFX1250-NOECC-SDAG-TRUE16-LABEL: flat_load_saddr_f16_immneg128:1175; GFX1250-NOECC-SDAG-TRUE16: ; %bb.0:1176; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11177; GFX1250-NOECC-SDAG-TRUE16-NEXT: flat_load_d16_b16 v0, v0, s[2:3] offset:-1281178; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x01179; GFX1250-NOECC-SDAG-TRUE16-NEXT: ; return to shader part epilog1180;1181; GFX1250-NOECC-SDAG-FAKE16-LABEL: flat_load_saddr_f16_immneg128:1182; GFX1250-NOECC-SDAG-FAKE16: ; %bb.0:1183; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11184; GFX1250-NOECC-SDAG-FAKE16-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1281185; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x01186; GFX1250-NOECC-SDAG-FAKE16-NEXT: ; return to shader part epilog1187 %zext.offset = zext i32 %voffset to i641188 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1189 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281190 %load = load half, ptr %gep11191 ret half %load1192}1193 1194define amdgpu_ps float @flat_load_saddr_i32(ptr inreg %sbase, i32 %voffset) {1195; GFX1250-LABEL: flat_load_saddr_i32:1196; GFX1250: ; %bb.0:1197; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11198; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3]1199; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01200; GFX1250-NEXT: ; return to shader part epilog1201 %zext.offset = zext i32 %voffset to i641202 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1203 %load = load i32, ptr %gep01204 %cast.load = bitcast i32 %load to float1205 ret float %cast.load1206}1207 1208define amdgpu_ps float @flat_load_saddr_i32_immneg128(ptr inreg %sbase, i32 %voffset) {1209; GFX1250-LABEL: flat_load_saddr_i32_immneg128:1210; GFX1250: ; %bb.0:1211; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11212; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] offset:-1281213; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01214; GFX1250-NEXT: ; return to shader part epilog1215 %zext.offset = zext i32 %voffset to i641216 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1217 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281218 %load = load i32, ptr %gep11219 %cast.load = bitcast i32 %load to float1220 ret float %cast.load1221}1222 1223define amdgpu_ps float @flat_load_saddr_f32(ptr inreg %sbase, i32 %voffset) {1224; GFX1250-LABEL: flat_load_saddr_f32:1225; GFX1250: ; %bb.0:1226; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11227; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3]1228; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01229; GFX1250-NEXT: ; return to shader part epilog1230 %zext.offset = zext i32 %voffset to i641231 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1232 %load = load float, ptr %gep01233 ret float %load1234}1235 1236define amdgpu_ps float @flat_load_saddr_f32_immneg128(ptr inreg %sbase, i32 %voffset) {1237; GFX1250-LABEL: flat_load_saddr_f32_immneg128:1238; GFX1250: ; %bb.0:1239; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11240; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] offset:-1281241; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01242; GFX1250-NEXT: ; return to shader part epilog1243 %zext.offset = zext i32 %voffset to i641244 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1245 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281246 %load = load float, ptr %gep11247 ret float %load1248}1249 1250define amdgpu_ps <2 x half> @flat_load_saddr_v2i16(ptr inreg %sbase, i32 %voffset) {1251; GFX1250-LABEL: flat_load_saddr_v2i16:1252; GFX1250: ; %bb.0:1253; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11254; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3]1255; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01256; GFX1250-NEXT: ; return to shader part epilog1257 %zext.offset = zext i32 %voffset to i641258 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1259 %load = load <2 x i16>, ptr %gep01260 %cast.load = bitcast <2 x i16> %load to <2 x half>1261 ret <2 x half> %cast.load1262}1263 1264define amdgpu_ps <2 x half> @flat_load_saddr_v2i16_immneg128(ptr inreg %sbase, i32 %voffset) {1265; GFX1250-LABEL: flat_load_saddr_v2i16_immneg128:1266; GFX1250: ; %bb.0:1267; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11268; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] offset:-1281269; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01270; GFX1250-NEXT: ; return to shader part epilog1271 %zext.offset = zext i32 %voffset to i641272 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1273 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281274 %load = load <2 x i16>, ptr %gep11275 %cast.load = bitcast <2 x i16> %load to <2 x half>1276 ret <2 x half> %cast.load1277}1278 1279define amdgpu_ps <2 x half> @flat_load_saddr_v2f16(ptr inreg %sbase, i32 %voffset) {1280; GFX1250-LABEL: flat_load_saddr_v2f16:1281; GFX1250: ; %bb.0:1282; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11283; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3]1284; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01285; GFX1250-NEXT: ; return to shader part epilog1286 %zext.offset = zext i32 %voffset to i641287 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1288 %load = load <2 x half>, ptr %gep01289 ret <2 x half> %load1290}1291 1292define amdgpu_ps <2 x half> @flat_load_saddr_v2f16_immneg128(ptr inreg %sbase, i32 %voffset) {1293; GFX1250-LABEL: flat_load_saddr_v2f16_immneg128:1294; GFX1250: ; %bb.0:1295; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11296; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] offset:-1281297; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01298; GFX1250-NEXT: ; return to shader part epilog1299 %zext.offset = zext i32 %voffset to i641300 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1301 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281302 %load = load <2 x half>, ptr %gep11303 ret <2 x half> %load1304}1305 1306define amdgpu_ps <2 x half> @flat_load_saddr_p3(ptr inreg %sbase, i32 %voffset) {1307; GFX1250-LABEL: flat_load_saddr_p3:1308; GFX1250: ; %bb.0:1309; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11310; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3]1311; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01312; GFX1250-NEXT: ; return to shader part epilog1313 %zext.offset = zext i32 %voffset to i641314 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1315 %load = load ptr addrspace(3), ptr %gep01316 %cast.load0 = ptrtoint ptr addrspace(3) %load to i321317 %cast.load1 = bitcast i32 %cast.load0 to <2 x half>1318 ret <2 x half> %cast.load11319}1320 1321define amdgpu_ps <2 x half> @flat_load_saddr_p3_immneg128(ptr inreg %sbase, i32 %voffset) {1322; GFX1250-LABEL: flat_load_saddr_p3_immneg128:1323; GFX1250: ; %bb.0:1324; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11325; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] offset:-1281326; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01327; GFX1250-NEXT: ; return to shader part epilog1328 %zext.offset = zext i32 %voffset to i641329 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1330 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281331 %load = load ptr addrspace(3), ptr %gep11332 %cast.load0 = ptrtoint ptr addrspace(3) %load to i321333 %cast.load1 = bitcast i32 %cast.load0 to <2 x half>1334 ret <2 x half> %cast.load11335}1336 1337define amdgpu_ps <2 x float> @flat_load_saddr_f64(ptr inreg %sbase, i32 %voffset) {1338; GFX1250-LABEL: flat_load_saddr_f64:1339; GFX1250: ; %bb.0:1340; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11341; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3]1342; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01343; GFX1250-NEXT: ; return to shader part epilog1344 %zext.offset = zext i32 %voffset to i641345 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1346 %load = load double, ptr %gep01347 %cast.load = bitcast double %load to <2 x float>1348 ret <2 x float> %cast.load1349}1350 1351define amdgpu_ps <2 x float> @flat_load_saddr_f64_immneg128(ptr inreg %sbase, i32 %voffset) {1352; GFX1250-LABEL: flat_load_saddr_f64_immneg128:1353; GFX1250: ; %bb.0:1354; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11355; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] offset:-1281356; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01357; GFX1250-NEXT: ; return to shader part epilog1358 %zext.offset = zext i32 %voffset to i641359 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1360 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281361 %load = load double, ptr %gep11362 %cast.load = bitcast double %load to <2 x float>1363 ret <2 x float> %cast.load1364}1365 1366define amdgpu_ps <2 x float> @flat_load_saddr_i64(ptr inreg %sbase, i32 %voffset) {1367; GFX1250-LABEL: flat_load_saddr_i64:1368; GFX1250: ; %bb.0:1369; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11370; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3]1371; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01372; GFX1250-NEXT: ; return to shader part epilog1373 %zext.offset = zext i32 %voffset to i641374 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1375 %load = load i64, ptr %gep01376 %cast.load = bitcast i64 %load to <2 x float>1377 ret <2 x float> %cast.load1378}1379 1380define amdgpu_ps <2 x float> @flat_load_saddr_i64_immneg128(ptr inreg %sbase, i32 %voffset) {1381; GFX1250-LABEL: flat_load_saddr_i64_immneg128:1382; GFX1250: ; %bb.0:1383; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11384; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] offset:-1281385; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01386; GFX1250-NEXT: ; return to shader part epilog1387 %zext.offset = zext i32 %voffset to i641388 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1389 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281390 %load = load i64, ptr %gep11391 %cast.load = bitcast i64 %load to <2 x float>1392 ret <2 x float> %cast.load1393}1394 1395define amdgpu_ps <2 x float> @flat_load_saddr_v2f32(ptr inreg %sbase, i32 %voffset) {1396; GFX1250-LABEL: flat_load_saddr_v2f32:1397; GFX1250: ; %bb.0:1398; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11399; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3]1400; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01401; GFX1250-NEXT: ; return to shader part epilog1402 %zext.offset = zext i32 %voffset to i641403 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1404 %load = load <2 x float>, ptr %gep01405 ret <2 x float> %load1406}1407 1408define amdgpu_ps <2 x float> @flat_load_saddr_v2f32_immneg128(ptr inreg %sbase, i32 %voffset) {1409; GFX1250-LABEL: flat_load_saddr_v2f32_immneg128:1410; GFX1250: ; %bb.0:1411; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11412; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] offset:-1281413; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01414; GFX1250-NEXT: ; return to shader part epilog1415 %zext.offset = zext i32 %voffset to i641416 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1417 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281418 %load = load <2 x float>, ptr %gep11419 ret <2 x float> %load1420}1421 1422define amdgpu_ps <2 x float> @flat_load_saddr_v2i32(ptr inreg %sbase, i32 %voffset) {1423; GFX1250-LABEL: flat_load_saddr_v2i32:1424; GFX1250: ; %bb.0:1425; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11426; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3]1427; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01428; GFX1250-NEXT: ; return to shader part epilog1429 %zext.offset = zext i32 %voffset to i641430 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1431 %load = load <2 x i32>, ptr %gep01432 %cast.load = bitcast <2 x i32> %load to <2 x float>1433 ret <2 x float> %cast.load1434}1435 1436define amdgpu_ps <2 x float> @flat_load_saddr_v2i32_immneg128(ptr inreg %sbase, i32 %voffset) {1437; GFX1250-LABEL: flat_load_saddr_v2i32_immneg128:1438; GFX1250: ; %bb.0:1439; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11440; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] offset:-1281441; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01442; GFX1250-NEXT: ; return to shader part epilog1443 %zext.offset = zext i32 %voffset to i641444 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1445 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281446 %load = load <2 x i32>, ptr %gep11447 %cast.load = bitcast <2 x i32> %load to <2 x float>1448 ret <2 x float> %cast.load1449}1450 1451define amdgpu_ps <2 x float> @flat_load_saddr_v4i16(ptr inreg %sbase, i32 %voffset) {1452; GFX1250-LABEL: flat_load_saddr_v4i16:1453; GFX1250: ; %bb.0:1454; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11455; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3]1456; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01457; GFX1250-NEXT: ; return to shader part epilog1458 %zext.offset = zext i32 %voffset to i641459 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1460 %load = load <4 x i16>, ptr %gep01461 %cast.load = bitcast <4 x i16> %load to <2 x float>1462 ret <2 x float> %cast.load1463}1464 1465define amdgpu_ps <2 x float> @flat_load_saddr_v4i16_immneg128(ptr inreg %sbase, i32 %voffset) {1466; GFX1250-LABEL: flat_load_saddr_v4i16_immneg128:1467; GFX1250: ; %bb.0:1468; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11469; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] offset:-1281470; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01471; GFX1250-NEXT: ; return to shader part epilog1472 %zext.offset = zext i32 %voffset to i641473 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1474 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281475 %load = load <4 x i16>, ptr %gep11476 %cast.load = bitcast <4 x i16> %load to <2 x float>1477 ret <2 x float> %cast.load1478}1479 1480define amdgpu_ps <2 x float> @flat_load_saddr_v4f16(ptr inreg %sbase, i32 %voffset) {1481; GFX1250-LABEL: flat_load_saddr_v4f16:1482; GFX1250: ; %bb.0:1483; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11484; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3]1485; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01486; GFX1250-NEXT: ; return to shader part epilog1487 %zext.offset = zext i32 %voffset to i641488 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1489 %load = load <4 x half>, ptr %gep01490 %cast.load = bitcast <4 x half> %load to <2 x float>1491 ret <2 x float> %cast.load1492}1493 1494define amdgpu_ps <2 x float> @flat_load_saddr_v4f16_immneg128(ptr inreg %sbase, i32 %voffset) {1495; GFX1250-LABEL: flat_load_saddr_v4f16_immneg128:1496; GFX1250: ; %bb.0:1497; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11498; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] offset:-1281499; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01500; GFX1250-NEXT: ; return to shader part epilog1501 %zext.offset = zext i32 %voffset to i641502 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1503 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281504 %load = load <4 x half>, ptr %gep11505 %cast.load = bitcast <4 x half> %load to <2 x float>1506 ret <2 x float> %cast.load1507}1508 1509define amdgpu_ps <2 x float> @flat_load_saddr_p1(ptr inreg %sbase, i32 %voffset) {1510; GFX1250-LABEL: flat_load_saddr_p1:1511; GFX1250: ; %bb.0:1512; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11513; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3]1514; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01515; GFX1250-NEXT: ; return to shader part epilog1516 %zext.offset = zext i32 %voffset to i641517 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1518 %load = load ptr, ptr %gep01519 %cast.load0 = ptrtoint ptr %load to i641520 %cast.load1 = bitcast i64 %cast.load0 to <2 x float>1521 ret <2 x float> %cast.load11522}1523 1524define amdgpu_ps <2 x float> @flat_load_saddr_p1_immneg128(ptr inreg %sbase, i32 %voffset) {1525; GFX1250-LABEL: flat_load_saddr_p1_immneg128:1526; GFX1250: ; %bb.0:1527; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11528; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] offset:-1281529; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01530; GFX1250-NEXT: ; return to shader part epilog1531 %zext.offset = zext i32 %voffset to i641532 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1533 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281534 %load = load ptr, ptr %gep11535 %cast.load0 = ptrtoint ptr %load to i641536 %cast.load1 = bitcast i64 %cast.load0 to <2 x float>1537 ret <2 x float> %cast.load11538}1539 1540define amdgpu_ps <3 x float> @flat_load_saddr_v3f32(ptr inreg %sbase, i32 %voffset) {1541; GFX1250-LABEL: flat_load_saddr_v3f32:1542; GFX1250: ; %bb.0:1543; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11544; GFX1250-NEXT: flat_load_b96 v[0:2], v0, s[2:3]1545; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01546; GFX1250-NEXT: ; return to shader part epilog1547 %zext.offset = zext i32 %voffset to i641548 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1549 %load = load <3 x float>, ptr %gep01550 ret <3 x float> %load1551}1552 1553define amdgpu_ps <3 x float> @flat_load_saddr_v3f32_immneg128(ptr inreg %sbase, i32 %voffset) {1554; GFX1250-LABEL: flat_load_saddr_v3f32_immneg128:1555; GFX1250: ; %bb.0:1556; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11557; GFX1250-NEXT: flat_load_b96 v[0:2], v0, s[2:3] offset:-1281558; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01559; GFX1250-NEXT: ; return to shader part epilog1560 %zext.offset = zext i32 %voffset to i641561 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1562 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281563 %load = load <3 x float>, ptr %gep11564 ret <3 x float> %load1565}1566 1567define amdgpu_ps <3 x float> @flat_load_saddr_v3i32(ptr inreg %sbase, i32 %voffset) {1568; GFX1250-LABEL: flat_load_saddr_v3i32:1569; GFX1250: ; %bb.0:1570; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11571; GFX1250-NEXT: flat_load_b96 v[0:2], v0, s[2:3]1572; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01573; GFX1250-NEXT: ; return to shader part epilog1574 %zext.offset = zext i32 %voffset to i641575 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1576 %load = load <3 x i32>, ptr %gep01577 %cast.load = bitcast <3 x i32> %load to <3 x float>1578 ret <3 x float> %cast.load1579}1580 1581define amdgpu_ps <3 x float> @flat_load_saddr_v3i32_immneg128(ptr inreg %sbase, i32 %voffset) {1582; GFX1250-LABEL: flat_load_saddr_v3i32_immneg128:1583; GFX1250: ; %bb.0:1584; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11585; GFX1250-NEXT: flat_load_b96 v[0:2], v0, s[2:3] offset:-1281586; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01587; GFX1250-NEXT: ; return to shader part epilog1588 %zext.offset = zext i32 %voffset to i641589 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1590 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281591 %load = load <3 x i32>, ptr %gep11592 %cast.load = bitcast <3 x i32> %load to <3 x float>1593 ret <3 x float> %cast.load1594}1595 1596define amdgpu_ps <6 x half> @flat_load_saddr_v6f16(ptr inreg %sbase, i32 %voffset) {1597; GFX1250-LABEL: flat_load_saddr_v6f16:1598; GFX1250: ; %bb.0:1599; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11600; GFX1250-NEXT: flat_load_b96 v[0:2], v0, s[2:3]1601; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01602; GFX1250-NEXT: ; return to shader part epilog1603 %zext.offset = zext i32 %voffset to i641604 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1605 %load = load <6 x half>, ptr %gep01606 ret <6 x half> %load1607}1608 1609define amdgpu_ps <6 x half> @flat_load_saddr_v6f16_immneg128(ptr inreg %sbase, i32 %voffset) {1610; GFX1250-LABEL: flat_load_saddr_v6f16_immneg128:1611; GFX1250: ; %bb.0:1612; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11613; GFX1250-NEXT: flat_load_b96 v[0:2], v0, s[2:3] offset:-1281614; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01615; GFX1250-NEXT: ; return to shader part epilog1616 %zext.offset = zext i32 %voffset to i641617 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1618 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281619 %load = load <6 x half>, ptr %gep11620 ret <6 x half> %load1621}1622 1623define amdgpu_ps <4 x float> @flat_load_saddr_v4f32(ptr inreg %sbase, i32 %voffset) {1624; GFX1250-LABEL: flat_load_saddr_v4f32:1625; GFX1250: ; %bb.0:1626; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11627; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3]1628; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01629; GFX1250-NEXT: ; return to shader part epilog1630 %zext.offset = zext i32 %voffset to i641631 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1632 %load = load <4 x float>, ptr %gep01633 ret <4 x float> %load1634}1635 1636define amdgpu_ps <4 x float> @flat_load_saddr_v4f32_immneg128(ptr inreg %sbase, i32 %voffset) {1637; GFX1250-LABEL: flat_load_saddr_v4f32_immneg128:1638; GFX1250: ; %bb.0:1639; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11640; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3] offset:-1281641; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01642; GFX1250-NEXT: ; return to shader part epilog1643 %zext.offset = zext i32 %voffset to i641644 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1645 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281646 %load = load <4 x float>, ptr %gep11647 ret <4 x float> %load1648}1649 1650define amdgpu_ps <4 x float> @flat_load_saddr_v4i32(ptr inreg %sbase, i32 %voffset) {1651; GFX1250-LABEL: flat_load_saddr_v4i32:1652; GFX1250: ; %bb.0:1653; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11654; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3]1655; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01656; GFX1250-NEXT: ; return to shader part epilog1657 %zext.offset = zext i32 %voffset to i641658 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1659 %load = load <4 x i32>, ptr %gep01660 %cast.load = bitcast <4 x i32> %load to <4 x float>1661 ret <4 x float> %cast.load1662}1663 1664define amdgpu_ps <4 x float> @flat_load_saddr_v4i32_immneg128(ptr inreg %sbase, i32 %voffset) {1665; GFX1250-LABEL: flat_load_saddr_v4i32_immneg128:1666; GFX1250: ; %bb.0:1667; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11668; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3] offset:-1281669; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01670; GFX1250-NEXT: ; return to shader part epilog1671 %zext.offset = zext i32 %voffset to i641672 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1673 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281674 %load = load <4 x i32>, ptr %gep11675 %cast.load = bitcast <4 x i32> %load to <4 x float>1676 ret <4 x float> %cast.load1677}1678 1679define amdgpu_ps <4 x float> @flat_load_saddr_v2i64(ptr inreg %sbase, i32 %voffset) {1680; GFX1250-LABEL: flat_load_saddr_v2i64:1681; GFX1250: ; %bb.0:1682; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11683; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3]1684; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01685; GFX1250-NEXT: ; return to shader part epilog1686 %zext.offset = zext i32 %voffset to i641687 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1688 %load = load <2 x i64>, ptr %gep01689 %cast.load = bitcast <2 x i64> %load to <4 x float>1690 ret <4 x float> %cast.load1691}1692 1693define amdgpu_ps <4 x float> @flat_load_saddr_v2i64_immneg128(ptr inreg %sbase, i32 %voffset) {1694; GFX1250-LABEL: flat_load_saddr_v2i64_immneg128:1695; GFX1250: ; %bb.0:1696; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11697; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3] offset:-1281698; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01699; GFX1250-NEXT: ; return to shader part epilog1700 %zext.offset = zext i32 %voffset to i641701 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1702 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281703 %load = load <2 x i64>, ptr %gep11704 %cast.load = bitcast <2 x i64> %load to <4 x float>1705 ret <4 x float> %cast.load1706}1707 1708define amdgpu_ps <4 x float> @flat_load_saddr_i128(ptr inreg %sbase, i32 %voffset) {1709; GFX1250-LABEL: flat_load_saddr_i128:1710; GFX1250: ; %bb.0:1711; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11712; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3]1713; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01714; GFX1250-NEXT: ; return to shader part epilog1715 %zext.offset = zext i32 %voffset to i641716 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1717 %load = load i128, ptr %gep01718 %cast.load = bitcast i128 %load to <4 x float>1719 ret <4 x float> %cast.load1720}1721 1722define amdgpu_ps <4 x float> @flat_load_saddr_i128_immneg128(ptr inreg %sbase, i32 %voffset) {1723; GFX1250-LABEL: flat_load_saddr_i128_immneg128:1724; GFX1250: ; %bb.0:1725; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11726; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3] offset:-1281727; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01728; GFX1250-NEXT: ; return to shader part epilog1729 %zext.offset = zext i32 %voffset to i641730 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1731 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281732 %load = load i128, ptr %gep11733 %cast.load = bitcast i128 %load to <4 x float>1734 ret <4 x float> %cast.load1735}1736 1737define amdgpu_ps <4 x float> @flat_load_saddr_v2p1(ptr inreg %sbase, i32 %voffset) {1738; GFX1250-LABEL: flat_load_saddr_v2p1:1739; GFX1250: ; %bb.0:1740; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11741; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3]1742; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01743; GFX1250-NEXT: ; return to shader part epilog1744 %zext.offset = zext i32 %voffset to i641745 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1746 %load = load <2 x ptr>, ptr %gep01747 %cast.load0 = ptrtoint <2 x ptr> %load to <2 x i64>1748 %cast.load1 = bitcast <2 x i64> %cast.load0 to <4 x float>1749 ret <4 x float> %cast.load11750}1751 1752define amdgpu_ps <4 x float> @flat_load_saddr_v2p1_immneg128(ptr inreg %sbase, i32 %voffset) {1753; GFX1250-LABEL: flat_load_saddr_v2p1_immneg128:1754; GFX1250: ; %bb.0:1755; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11756; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3] offset:-1281757; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01758; GFX1250-NEXT: ; return to shader part epilog1759 %zext.offset = zext i32 %voffset to i641760 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1761 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281762 %load = load <2 x ptr>, ptr %gep11763 %cast.load0 = ptrtoint <2 x ptr> %load to <2 x i64>1764 %cast.load1 = bitcast <2 x i64> %cast.load0 to <4 x float>1765 ret <4 x float> %cast.load11766}1767 1768define amdgpu_ps <4 x float> @flat_load_saddr_v4p3(ptr inreg %sbase, i32 %voffset) {1769; GFX1250-LABEL: flat_load_saddr_v4p3:1770; GFX1250: ; %bb.0:1771; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11772; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3]1773; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01774; GFX1250-NEXT: ; return to shader part epilog1775 %zext.offset = zext i32 %voffset to i641776 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1777 %load = load <4 x ptr addrspace(3)>, ptr %gep01778 %cast.load0 = ptrtoint <4 x ptr addrspace(3)> %load to <4 x i32>1779 %cast.load1 = bitcast <4 x i32> %cast.load0 to <4 x float>1780 ret <4 x float> %cast.load11781}1782 1783define amdgpu_ps <4 x float> @flat_load_saddr_v4p3_immneg128(ptr inreg %sbase, i32 %voffset) {1784; GFX1250-LABEL: flat_load_saddr_v4p3_immneg128:1785; GFX1250: ; %bb.0:1786; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11787; GFX1250-NEXT: flat_load_b128 v[0:3], v0, s[2:3] offset:-1281788; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01789; GFX1250-NEXT: ; return to shader part epilog1790 %zext.offset = zext i32 %voffset to i641791 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1792 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281793 %load = load <4 x ptr addrspace(3)>, ptr %gep11794 %cast.load0 = ptrtoint <4 x ptr addrspace(3)> %load to <4 x i32>1795 %cast.load1 = bitcast <4 x i32> %cast.load0 to <4 x float>1796 ret <4 x float> %cast.load11797}1798 1799; --------------------------------------------------------------------------------1800; Extending loads1801; --------------------------------------------------------------------------------1802 1803define amdgpu_ps float @flat_sextload_saddr_i8(ptr inreg %sbase, i32 %voffset) {1804; GFX1250-LABEL: flat_sextload_saddr_i8:1805; GFX1250: ; %bb.0:1806; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11807; GFX1250-NEXT: flat_load_i8 v0, v0, s[2:3]1808; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01809; GFX1250-NEXT: ; return to shader part epilog1810 %zext.offset = zext i32 %voffset to i641811 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1812 %load = load i8, ptr %gep01813 %sextload = sext i8 %load to i321814 %cast.load = bitcast i32 %sextload to float1815 ret float %cast.load1816}1817 1818define amdgpu_ps float @flat_sextload_saddr_i8_immneg128(ptr inreg %sbase, i32 %voffset) {1819; GFX1250-LABEL: flat_sextload_saddr_i8_immneg128:1820; GFX1250: ; %bb.0:1821; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11822; GFX1250-NEXT: flat_load_i8 v0, v0, s[2:3] offset:-1281823; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01824; GFX1250-NEXT: ; return to shader part epilog1825 %zext.offset = zext i32 %voffset to i641826 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1827 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281828 %load = load i8, ptr %gep11829 %sextload = sext i8 %load to i321830 %cast.load = bitcast i32 %sextload to float1831 ret float %cast.load1832}1833 1834define amdgpu_ps float @flat_sextload_saddr_i16(ptr inreg %sbase, i32 %voffset) {1835; GFX1250-LABEL: flat_sextload_saddr_i16:1836; GFX1250: ; %bb.0:1837; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11838; GFX1250-NEXT: flat_load_i16 v0, v0, s[2:3]1839; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01840; GFX1250-NEXT: ; return to shader part epilog1841 %zext.offset = zext i32 %voffset to i641842 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1843 %load = load i16, ptr %gep01844 %sextload = sext i16 %load to i321845 %cast.load = bitcast i32 %sextload to float1846 ret float %cast.load1847}1848 1849define amdgpu_ps float @flat_sextload_saddr_i16_immneg128(ptr inreg %sbase, i32 %voffset) {1850; GFX1250-LABEL: flat_sextload_saddr_i16_immneg128:1851; GFX1250: ; %bb.0:1852; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11853; GFX1250-NEXT: flat_load_i16 v0, v0, s[2:3] offset:-1281854; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01855; GFX1250-NEXT: ; return to shader part epilog1856 %zext.offset = zext i32 %voffset to i641857 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1858 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281859 %load = load i16, ptr %gep11860 %sextload = sext i16 %load to i321861 %cast.load = bitcast i32 %sextload to float1862 ret float %cast.load1863}1864 1865define amdgpu_ps float @flat_zextload_saddr_i8(ptr inreg %sbase, i32 %voffset) {1866; GFX1250-LABEL: flat_zextload_saddr_i8:1867; GFX1250: ; %bb.0:1868; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11869; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3]1870; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01871; GFX1250-NEXT: ; return to shader part epilog1872 %zext.offset = zext i32 %voffset to i641873 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1874 %load = load i8, ptr %gep01875 %zextload = zext i8 %load to i321876 %cast.load = bitcast i32 %zextload to float1877 ret float %cast.load1878}1879 1880define amdgpu_ps float @flat_zextload_saddr_i8_immneg128(ptr inreg %sbase, i32 %voffset) {1881; GFX1250-LABEL: flat_zextload_saddr_i8_immneg128:1882; GFX1250: ; %bb.0:1883; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11884; GFX1250-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-1281885; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01886; GFX1250-NEXT: ; return to shader part epilog1887 %zext.offset = zext i32 %voffset to i641888 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1889 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281890 %load = load i8, ptr %gep11891 %zextload = zext i8 %load to i321892 %cast.load = bitcast i32 %zextload to float1893 ret float %cast.load1894}1895 1896define amdgpu_ps float @flat_zextload_saddr_i16(ptr inreg %sbase, i32 %voffset) {1897; GFX1250-LABEL: flat_zextload_saddr_i16:1898; GFX1250: ; %bb.0:1899; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11900; GFX1250-NEXT: flat_load_u16 v0, v0, s[2:3]1901; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01902; GFX1250-NEXT: ; return to shader part epilog1903 %zext.offset = zext i32 %voffset to i641904 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1905 %load = load i16, ptr %gep01906 %zextload = zext i16 %load to i321907 %cast.load = bitcast i32 %zextload to float1908 ret float %cast.load1909}1910 1911define amdgpu_ps float @flat_zextload_saddr_i16_immneg128(ptr inreg %sbase, i32 %voffset) {1912; GFX1250-LABEL: flat_zextload_saddr_i16_immneg128:1913; GFX1250: ; %bb.0:1914; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11915; GFX1250-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1281916; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01917; GFX1250-NEXT: ; return to shader part epilog1918 %zext.offset = zext i32 %voffset to i641919 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1920 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281921 %load = load i16, ptr %gep11922 %zextload = zext i16 %load to i321923 %cast.load = bitcast i32 %zextload to float1924 ret float %cast.load1925}1926 1927; --------------------------------------------------------------------------------1928; Atomic load1929; --------------------------------------------------------------------------------1930 1931define amdgpu_ps float @atomic_flat_load_saddr_i32(ptr inreg %sbase, i32 %voffset) {1932; GFX1250-LABEL: atomic_flat_load_saddr_i32:1933; GFX1250: ; %bb.0:1934; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11935; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] scope:SCOPE_SYS1936; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01937; GFX1250-NEXT: global_inv scope:SCOPE_SYS1938; GFX1250-NEXT: s_wait_loadcnt 0x01939; GFX1250-NEXT: ; return to shader part epilog1940 %zext.offset = zext i32 %voffset to i641941 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1942 %load = load atomic i32, ptr %gep0 seq_cst, align 41943 %cast.load = bitcast i32 %load to float1944 ret float %cast.load1945}1946 1947define amdgpu_ps float @atomic_flat_load_saddr_i32_immneg128(ptr inreg %sbase, i32 %voffset) {1948; GFX1250-LABEL: atomic_flat_load_saddr_i32_immneg128:1949; GFX1250: ; %bb.0:1950; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11951; GFX1250-NEXT: flat_load_b32 v0, v0, s[2:3] offset:-128 scope:SCOPE_SYS1952; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01953; GFX1250-NEXT: global_inv scope:SCOPE_SYS1954; GFX1250-NEXT: s_wait_loadcnt 0x01955; GFX1250-NEXT: ; return to shader part epilog1956 %zext.offset = zext i32 %voffset to i641957 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1958 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281959 %load = load atomic i32, ptr %gep1 seq_cst, align 41960 %cast.load = bitcast i32 %load to float1961 ret float %cast.load1962}1963 1964define amdgpu_ps <2 x float> @atomic_flat_load_saddr_i64(ptr inreg %sbase, i32 %voffset) {1965; GFX1250-LABEL: atomic_flat_load_saddr_i64:1966; GFX1250: ; %bb.0:1967; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11968; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] scope:SCOPE_SYS1969; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01970; GFX1250-NEXT: global_inv scope:SCOPE_SYS1971; GFX1250-NEXT: s_wait_loadcnt 0x01972; GFX1250-NEXT: ; return to shader part epilog1973 %zext.offset = zext i32 %voffset to i641974 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1975 %load = load atomic i64, ptr %gep0 seq_cst, align 81976 %cast.load = bitcast i64 %load to <2 x float>1977 ret <2 x float> %cast.load1978}1979 1980define amdgpu_ps <2 x float> @atomic_flat_load_saddr_i64_immneg128(ptr inreg %sbase, i32 %voffset) {1981; GFX1250-LABEL: atomic_flat_load_saddr_i64_immneg128:1982; GFX1250: ; %bb.0:1983; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11984; GFX1250-NEXT: flat_load_b64 v[0:1], v0, s[2:3] offset:-128 scope:SCOPE_SYS1985; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01986; GFX1250-NEXT: global_inv scope:SCOPE_SYS1987; GFX1250-NEXT: s_wait_loadcnt 0x01988; GFX1250-NEXT: ; return to shader part epilog1989 %zext.offset = zext i32 %voffset to i641990 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset1991 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1281992 %load = load atomic i64, ptr %gep1 seq_cst, align 81993 %cast.load = bitcast i64 %load to <2 x float>1994 ret <2 x float> %cast.load1995}1996 1997; --------------------------------------------------------------------------------1998; D16 load (low 16)1999; --------------------------------------------------------------------------------2000 2001define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_undef_hi(ptr inreg %sbase, i32 %voffset) {2002; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_undef_hi:2003; GFX1250-SDAG: ; %bb.0:2004; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12005; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3]2006; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02007; GFX1250-SDAG-NEXT: ; return to shader part epilog2008;2009; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_undef_hi:2010; GFX1250-GISEL: ; %bb.0:2011; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12012; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3]2013; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02014; GFX1250-GISEL-NEXT: ; return to shader part epilog2015;2016; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_undef_hi:2017; GFX1250-NOECC: ; %bb.0:2018; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12019; GFX1250-NOECC-NEXT: flat_load_d16_b16 v0, v0, s[2:3]2020; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02021; GFX1250-NOECC-NEXT: ; return to shader part epilog2022 %zext.offset = zext i32 %voffset to i642023 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2024 %load = load i16, ptr %gep02025 %build = insertelement <2 x i16> undef, i16 %load, i32 02026 %cast = bitcast <2 x i16> %build to <2 x half>2027 ret <2 x half> %cast2028}2029 2030define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_undef_hi_immneg128(ptr inreg %sbase, i32 %voffset) {2031; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_undef_hi_immneg128:2032; GFX1250-SDAG: ; %bb.0:2033; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12034; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282035; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02036; GFX1250-SDAG-NEXT: ; return to shader part epilog2037;2038; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_undef_hi_immneg128:2039; GFX1250-GISEL: ; %bb.0:2040; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12041; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282042; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02043; GFX1250-GISEL-NEXT: ; return to shader part epilog2044;2045; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_undef_hi_immneg128:2046; GFX1250-NOECC: ; %bb.0:2047; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12048; GFX1250-NOECC-NEXT: flat_load_d16_b16 v0, v0, s[2:3] offset:-1282049; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02050; GFX1250-NOECC-NEXT: ; return to shader part epilog2051 %zext.offset = zext i32 %voffset to i642052 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2053 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282054 %load = load i16, ptr %gep12055 %build = insertelement <2 x i16> undef, i16 %load, i32 02056 %cast = bitcast <2 x i16> %build to <2 x half>2057 ret <2 x half> %cast2058}2059 2060define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_zero_hi(ptr inreg %sbase, i32 %voffset) {2061; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_zero_hi:2062; GFX1250-SDAG: ; %bb.0:2063; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12064; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3]2065; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02066; GFX1250-SDAG-NEXT: v_and_b32_e32 v0, 0xffff, v02067; GFX1250-SDAG-NEXT: ; return to shader part epilog2068;2069; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_zero_hi:2070; GFX1250-GISEL: ; %bb.0:2071; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12072; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3]2073; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02074; GFX1250-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02075; GFX1250-GISEL-NEXT: ; return to shader part epilog2076;2077; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_zero_hi:2078; GFX1250-NOECC: ; %bb.0:2079; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12080; GFX1250-NOECC-NEXT: v_mov_b32_e32 v1, 02081; GFX1250-NOECC-NEXT: flat_load_d16_b16 v1, v0, s[2:3]2082; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02083; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12084; GFX1250-NOECC-NEXT: ; return to shader part epilog2085 %zext.offset = zext i32 %voffset to i642086 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2087 %load = load i16, ptr %gep02088 %build = insertelement <2 x i16> zeroinitializer, i16 %load, i32 02089 %cast = bitcast <2 x i16> %build to <2 x half>2090 ret <2 x half> %cast2091}2092 2093define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_zero_hi_immneg128(ptr inreg %sbase, i32 %voffset) {2094; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_zero_hi_immneg128:2095; GFX1250-SDAG: ; %bb.0:2096; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12097; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282098; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02099; GFX1250-SDAG-NEXT: v_and_b32_e32 v0, 0xffff, v02100; GFX1250-SDAG-NEXT: ; return to shader part epilog2101;2102; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_zero_hi_immneg128:2103; GFX1250-GISEL: ; %bb.0:2104; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12105; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282106; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02107; GFX1250-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02108; GFX1250-GISEL-NEXT: ; return to shader part epilog2109;2110; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_zero_hi_immneg128:2111; GFX1250-NOECC: ; %bb.0:2112; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12113; GFX1250-NOECC-NEXT: v_mov_b32_e32 v1, 02114; GFX1250-NOECC-NEXT: flat_load_d16_b16 v1, v0, s[2:3] offset:-1282115; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02116; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12117; GFX1250-NOECC-NEXT: ; return to shader part epilog2118 %zext.offset = zext i32 %voffset to i642119 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2120 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282121 %load = load i16, ptr %gep12122 %build = insertelement <2 x i16> zeroinitializer, i16 %load, i32 02123 %cast = bitcast <2 x i16> %build to <2 x half>2124 ret <2 x half> %cast2125}2126 2127define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_reg_hi(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2128; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_reg_hi:2129; GFX1250-SDAG: ; %bb.0:2130; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12131; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3]2132; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02133; GFX1250-SDAG-NEXT: v_bfi_b32 v0, 0xffff, v0, v12134; GFX1250-SDAG-NEXT: ; return to shader part epilog2135;2136; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_reg_hi:2137; GFX1250-GISEL: ; %bb.0:2138; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12139; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3]2140; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02141; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff0000, v1, v02142; GFX1250-GISEL-NEXT: ; return to shader part epilog2143;2144; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_reg_hi:2145; GFX1250-NOECC: ; %bb.0:2146; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12147; GFX1250-NOECC-NEXT: flat_load_d16_b16 v1, v0, s[2:3]2148; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02149; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12150; GFX1250-NOECC-NEXT: ; return to shader part epilog2151 %zext.offset = zext i32 %voffset to i642152 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2153 %load = load i16, ptr %gep02154 %build = insertelement <2 x i16> %reg, i16 %load, i32 02155 %cast = bitcast <2 x i16> %build to <2 x half>2156 ret <2 x half> %cast2157}2158 2159define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_reg_hi_immneg128(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2160; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_reg_hi_immneg128:2161; GFX1250-SDAG: ; %bb.0:2162; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12163; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282164; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02165; GFX1250-SDAG-NEXT: v_bfi_b32 v0, 0xffff, v0, v12166; GFX1250-SDAG-NEXT: ; return to shader part epilog2167;2168; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_reg_hi_immneg128:2169; GFX1250-GISEL: ; %bb.0:2170; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12171; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282172; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02173; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff0000, v1, v02174; GFX1250-GISEL-NEXT: ; return to shader part epilog2175;2176; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_reg_hi_immneg128:2177; GFX1250-NOECC: ; %bb.0:2178; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12179; GFX1250-NOECC-NEXT: flat_load_d16_b16 v1, v0, s[2:3] offset:-1282180; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02181; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12182; GFX1250-NOECC-NEXT: ; return to shader part epilog2183 %zext.offset = zext i32 %voffset to i642184 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2185 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282186 %load = load i16, ptr %gep12187 %build = insertelement <2 x i16> %reg, i16 %load, i32 02188 %cast = bitcast <2 x i16> %build to <2 x half>2189 ret <2 x half> %cast2190}2191 2192define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_zexti8_reg_hi(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2193; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_zexti8_reg_hi:2194; GFX1250-SDAG: ; %bb.0:2195; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12196; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3]2197; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02198; GFX1250-SDAG-NEXT: v_bfi_b32 v0, 0xffff, v0, v12199; GFX1250-SDAG-NEXT: ; return to shader part epilog2200;2201; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_zexti8_reg_hi:2202; GFX1250-GISEL: ; %bb.0:2203; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12204; GFX1250-GISEL-NEXT: flat_load_u8 v0, v0, s[2:3]2205; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02206; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff0000, v1, v02207; GFX1250-GISEL-NEXT: ; return to shader part epilog2208;2209; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_zexti8_reg_hi:2210; GFX1250-NOECC: ; %bb.0:2211; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12212; GFX1250-NOECC-NEXT: flat_load_d16_u8 v1, v0, s[2:3]2213; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02214; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12215; GFX1250-NOECC-NEXT: ; return to shader part epilog2216 %zext.offset = zext i32 %voffset to i642217 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2218 %load = load i8, ptr %gep02219 %zext.load = zext i8 %load to i162220 %build = insertelement <2 x i16> %reg, i16 %zext.load, i32 02221 %cast = bitcast <2 x i16> %build to <2 x half>2222 ret <2 x half> %cast2223}2224 2225define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_zexti8_reg_hi_immneg128(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2226; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_zexti8_reg_hi_immneg128:2227; GFX1250-SDAG: ; %bb.0:2228; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12229; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-1282230; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02231; GFX1250-SDAG-NEXT: v_bfi_b32 v0, 0xffff, v0, v12232; GFX1250-SDAG-NEXT: ; return to shader part epilog2233;2234; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_zexti8_reg_hi_immneg128:2235; GFX1250-GISEL: ; %bb.0:2236; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12237; GFX1250-GISEL-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-1282238; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02239; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff0000, v1, v02240; GFX1250-GISEL-NEXT: ; return to shader part epilog2241;2242; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_zexti8_reg_hi_immneg128:2243; GFX1250-NOECC: ; %bb.0:2244; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12245; GFX1250-NOECC-NEXT: flat_load_d16_u8 v1, v0, s[2:3] offset:-1282246; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02247; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12248; GFX1250-NOECC-NEXT: ; return to shader part epilog2249 %zext.offset = zext i32 %voffset to i642250 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2251 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282252 %load = load i8, ptr %gep12253 %zext.load = zext i8 %load to i162254 %build = insertelement <2 x i16> %reg, i16 %zext.load, i32 02255 %cast = bitcast <2 x i16> %build to <2 x half>2256 ret <2 x half> %cast2257}2258 2259define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_sexti8_reg_hi(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2260; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_sexti8_reg_hi:2261; GFX1250-SDAG: ; %bb.0:2262; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12263; GFX1250-SDAG-NEXT: flat_load_i8 v0, v0, s[2:3]2264; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02265; GFX1250-SDAG-NEXT: v_bfi_b32 v0, 0xffff, v0, v12266; GFX1250-SDAG-NEXT: ; return to shader part epilog2267;2268; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_sexti8_reg_hi:2269; GFX1250-GISEL: ; %bb.0:2270; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12271; GFX1250-GISEL-NEXT: flat_load_i8 v0, v0, s[2:3]2272; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02273; GFX1250-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02274; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2275; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff0000, v1, v02276; GFX1250-GISEL-NEXT: ; return to shader part epilog2277;2278; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_sexti8_reg_hi:2279; GFX1250-NOECC: ; %bb.0:2280; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12281; GFX1250-NOECC-NEXT: flat_load_d16_i8 v1, v0, s[2:3]2282; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02283; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12284; GFX1250-NOECC-NEXT: ; return to shader part epilog2285 %zext.offset = zext i32 %voffset to i642286 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2287 %load = load i8, ptr %gep02288 %sext.load = sext i8 %load to i162289 %build = insertelement <2 x i16> %reg, i16 %sext.load, i32 02290 %cast = bitcast <2 x i16> %build to <2 x half>2291 ret <2 x half> %cast2292}2293 2294define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16lo_sexti8_reg_hi_immneg128(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2295; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16lo_sexti8_reg_hi_immneg128:2296; GFX1250-SDAG: ; %bb.0:2297; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12298; GFX1250-SDAG-NEXT: flat_load_i8 v0, v0, s[2:3] offset:-1282299; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02300; GFX1250-SDAG-NEXT: v_bfi_b32 v0, 0xffff, v0, v12301; GFX1250-SDAG-NEXT: ; return to shader part epilog2302;2303; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16lo_sexti8_reg_hi_immneg128:2304; GFX1250-GISEL: ; %bb.0:2305; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12306; GFX1250-GISEL-NEXT: flat_load_i8 v0, v0, s[2:3] offset:-1282307; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02308; GFX1250-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02309; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2310; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff0000, v1, v02311; GFX1250-GISEL-NEXT: ; return to shader part epilog2312;2313; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16lo_sexti8_reg_hi_immneg128:2314; GFX1250-NOECC: ; %bb.0:2315; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12316; GFX1250-NOECC-NEXT: flat_load_d16_i8 v1, v0, s[2:3] offset:-1282317; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02318; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12319; GFX1250-NOECC-NEXT: ; return to shader part epilog2320 %zext.offset = zext i32 %voffset to i642321 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2322 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282323 %load = load i8, ptr %gep12324 %sext.load = sext i8 %load to i162325 %build = insertelement <2 x i16> %reg, i16 %sext.load, i32 02326 %cast = bitcast <2 x i16> %build to <2 x half>2327 ret <2 x half> %cast2328}2329 2330; --------------------------------------------------------------------------------2331; D16 hi load (hi16)2332; --------------------------------------------------------------------------------2333 2334define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_undef_hi(ptr inreg %sbase, i32 %voffset) {2335; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_undef_hi:2336; GFX1250-SDAG: ; %bb.0:2337; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12338; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3]2339; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02340; GFX1250-SDAG-NEXT: v_lshlrev_b32_e32 v0, 16, v02341; GFX1250-SDAG-NEXT: ; return to shader part epilog2342;2343; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_undef_hi:2344; GFX1250-GISEL: ; %bb.0:2345; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12346; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3]2347; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02348; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02349; GFX1250-GISEL-NEXT: ; return to shader part epilog2350;2351; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16hi_undef_hi:2352; GFX1250-NOECC: ; %bb.0:2353; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12354; GFX1250-NOECC-NEXT: flat_load_d16_hi_b16 v0, v0, s[2:3]2355; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02356; GFX1250-NOECC-NEXT: ; return to shader part epilog2357 %zext.offset = zext i32 %voffset to i642358 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2359 %load = load i16, ptr %gep02360 %build = insertelement <2 x i16> undef, i16 %load, i32 12361 %cast = bitcast <2 x i16> %build to <2 x half>2362 ret <2 x half> %cast2363}2364 2365define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_undef_hi_immneg128(ptr inreg %sbase, i32 %voffset) {2366; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_undef_hi_immneg128:2367; GFX1250-SDAG: ; %bb.0:2368; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12369; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282370; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02371; GFX1250-SDAG-NEXT: v_lshlrev_b32_e32 v0, 16, v02372; GFX1250-SDAG-NEXT: ; return to shader part epilog2373;2374; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_undef_hi_immneg128:2375; GFX1250-GISEL: ; %bb.0:2376; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12377; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282378; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02379; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02380; GFX1250-GISEL-NEXT: ; return to shader part epilog2381;2382; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16hi_undef_hi_immneg128:2383; GFX1250-NOECC: ; %bb.0:2384; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12385; GFX1250-NOECC-NEXT: flat_load_d16_hi_b16 v0, v0, s[2:3] offset:-1282386; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02387; GFX1250-NOECC-NEXT: ; return to shader part epilog2388 %zext.offset = zext i32 %voffset to i642389 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2390 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282391 %load = load i16, ptr %gep12392 %build = insertelement <2 x i16> undef, i16 %load, i32 12393 %cast = bitcast <2 x i16> %build to <2 x half>2394 ret <2 x half> %cast2395}2396 2397define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_zero_hi(ptr inreg %sbase, i32 %voffset) {2398; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_zero_hi:2399; GFX1250-SDAG: ; %bb.0:2400; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12401; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3]2402; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02403; GFX1250-SDAG-NEXT: v_perm_b32 v0, v0, 0, 0x50401002404; GFX1250-SDAG-NEXT: ; return to shader part epilog2405;2406; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_zero_hi:2407; GFX1250-GISEL: ; %bb.0:2408; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12409; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3]2410; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02411; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02412; GFX1250-GISEL-NEXT: ; return to shader part epilog2413;2414; GFX1250-NOECC-SDAG-TRUE16-LABEL: flat_load_saddr_i16_d16hi_zero_hi:2415; GFX1250-NOECC-SDAG-TRUE16: ; %bb.0:2416; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12417; GFX1250-NOECC-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 02418; GFX1250-NOECC-SDAG-TRUE16-NEXT: flat_load_d16_hi_b16 v1, v0, s[2:3]2419; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x02420; GFX1250-NOECC-SDAG-TRUE16-NEXT: v_mov_b32_e32 v0, v12421; GFX1250-NOECC-SDAG-TRUE16-NEXT: ; return to shader part epilog2422;2423; GFX1250-NOECC-SDAG-FAKE16-LABEL: flat_load_saddr_i16_d16hi_zero_hi:2424; GFX1250-NOECC-SDAG-FAKE16: ; %bb.0:2425; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12426; GFX1250-NOECC-SDAG-FAKE16-NEXT: v_mov_b32_e32 v1, 02427; GFX1250-NOECC-SDAG-FAKE16-NEXT: flat_load_d16_hi_b16 v1, v0, s[2:3]2428; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x02429; GFX1250-NOECC-SDAG-FAKE16-NEXT: v_mov_b32_e32 v0, v12430; GFX1250-NOECC-SDAG-FAKE16-NEXT: ; return to shader part epilog2431 %zext.offset = zext i32 %voffset to i642432 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2433 %load = load i16, ptr %gep02434 %build = insertelement <2 x i16> zeroinitializer, i16 %load, i32 12435 %cast = bitcast <2 x i16> %build to <2 x half>2436 ret <2 x half> %cast2437}2438 2439define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_zero_hi_immneg128(ptr inreg %sbase, i32 %voffset) {2440; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_zero_hi_immneg128:2441; GFX1250-SDAG: ; %bb.0:2442; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12443; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282444; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02445; GFX1250-SDAG-NEXT: v_perm_b32 v0, v0, 0, 0x50401002446; GFX1250-SDAG-NEXT: ; return to shader part epilog2447;2448; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_zero_hi_immneg128:2449; GFX1250-GISEL: ; %bb.0:2450; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12451; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282452; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02453; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02454; GFX1250-GISEL-NEXT: ; return to shader part epilog2455;2456; GFX1250-NOECC-SDAG-TRUE16-LABEL: flat_load_saddr_i16_d16hi_zero_hi_immneg128:2457; GFX1250-NOECC-SDAG-TRUE16: ; %bb.0:2458; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12459; GFX1250-NOECC-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 02460; GFX1250-NOECC-SDAG-TRUE16-NEXT: flat_load_d16_hi_b16 v1, v0, s[2:3] offset:-1282461; GFX1250-NOECC-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x02462; GFX1250-NOECC-SDAG-TRUE16-NEXT: v_mov_b32_e32 v0, v12463; GFX1250-NOECC-SDAG-TRUE16-NEXT: ; return to shader part epilog2464;2465; GFX1250-NOECC-SDAG-FAKE16-LABEL: flat_load_saddr_i16_d16hi_zero_hi_immneg128:2466; GFX1250-NOECC-SDAG-FAKE16: ; %bb.0:2467; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12468; GFX1250-NOECC-SDAG-FAKE16-NEXT: v_mov_b32_e32 v1, 02469; GFX1250-NOECC-SDAG-FAKE16-NEXT: flat_load_d16_hi_b16 v1, v0, s[2:3] offset:-1282470; GFX1250-NOECC-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x02471; GFX1250-NOECC-SDAG-FAKE16-NEXT: v_mov_b32_e32 v0, v12472; GFX1250-NOECC-SDAG-FAKE16-NEXT: ; return to shader part epilog2473 %zext.offset = zext i32 %voffset to i642474 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2475 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282476 %load = load i16, ptr %gep12477 %build = insertelement <2 x i16> zeroinitializer, i16 %load, i32 12478 %cast = bitcast <2 x i16> %build to <2 x half>2479 ret <2 x half> %cast2480}2481 2482define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_reg_hi(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2483; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_reg_hi:2484; GFX1250-SDAG: ; %bb.0:2485; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12486; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3]2487; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02488; GFX1250-SDAG-NEXT: v_perm_b32 v0, v0, v1, 0x50401002489; GFX1250-SDAG-NEXT: ; return to shader part epilog2490;2491; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_reg_hi:2492; GFX1250-GISEL: ; %bb.0:2493; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12494; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3]2495; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02496; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02497; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2498; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff, v1, v02499; GFX1250-GISEL-NEXT: ; return to shader part epilog2500;2501; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16hi_reg_hi:2502; GFX1250-NOECC: ; %bb.0:2503; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12504; GFX1250-NOECC-NEXT: flat_load_d16_hi_b16 v1, v0, s[2:3]2505; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02506; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12507; GFX1250-NOECC-NEXT: ; return to shader part epilog2508 %zext.offset = zext i32 %voffset to i642509 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2510 %load = load i16, ptr %gep02511 %build = insertelement <2 x i16> %reg, i16 %load, i32 12512 %cast = bitcast <2 x i16> %build to <2 x half>2513 ret <2 x half> %cast2514}2515 2516define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_reg_hi_immneg128(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2517; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_reg_hi_immneg128:2518; GFX1250-SDAG: ; %bb.0:2519; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12520; GFX1250-SDAG-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282521; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02522; GFX1250-SDAG-NEXT: v_perm_b32 v0, v0, v1, 0x50401002523; GFX1250-SDAG-NEXT: ; return to shader part epilog2524;2525; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_reg_hi_immneg128:2526; GFX1250-GISEL: ; %bb.0:2527; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12528; GFX1250-GISEL-NEXT: flat_load_u16 v0, v0, s[2:3] offset:-1282529; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02530; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02531; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2532; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff, v1, v02533; GFX1250-GISEL-NEXT: ; return to shader part epilog2534;2535; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16hi_reg_hi_immneg128:2536; GFX1250-NOECC: ; %bb.0:2537; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12538; GFX1250-NOECC-NEXT: flat_load_d16_hi_b16 v1, v0, s[2:3] offset:-1282539; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02540; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12541; GFX1250-NOECC-NEXT: ; return to shader part epilog2542 %zext.offset = zext i32 %voffset to i642543 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2544 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282545 %load = load i16, ptr %gep12546 %build = insertelement <2 x i16> %reg, i16 %load, i32 12547 %cast = bitcast <2 x i16> %build to <2 x half>2548 ret <2 x half> %cast2549}2550 2551define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_zexti8_reg_hi(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2552; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_zexti8_reg_hi:2553; GFX1250-SDAG: ; %bb.0:2554; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12555; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3]2556; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02557; GFX1250-SDAG-NEXT: v_perm_b32 v0, v0, v1, 0x50401002558; GFX1250-SDAG-NEXT: ; return to shader part epilog2559;2560; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_zexti8_reg_hi:2561; GFX1250-GISEL: ; %bb.0:2562; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12563; GFX1250-GISEL-NEXT: flat_load_u8 v0, v0, s[2:3]2564; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02565; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02566; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2567; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff, v1, v02568; GFX1250-GISEL-NEXT: ; return to shader part epilog2569;2570; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16hi_zexti8_reg_hi:2571; GFX1250-NOECC: ; %bb.0:2572; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12573; GFX1250-NOECC-NEXT: flat_load_d16_hi_u8 v1, v0, s[2:3]2574; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02575; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12576; GFX1250-NOECC-NEXT: ; return to shader part epilog2577 %zext.offset = zext i32 %voffset to i642578 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2579 %load = load i8, ptr %gep02580 %zext.load = zext i8 %load to i162581 %build = insertelement <2 x i16> %reg, i16 %zext.load, i32 12582 %cast = bitcast <2 x i16> %build to <2 x half>2583 ret <2 x half> %cast2584}2585 2586define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_zexti8_reg_hi_immneg128(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2587; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_zexti8_reg_hi_immneg128:2588; GFX1250-SDAG: ; %bb.0:2589; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12590; GFX1250-SDAG-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-1282591; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02592; GFX1250-SDAG-NEXT: v_perm_b32 v0, v0, v1, 0x50401002593; GFX1250-SDAG-NEXT: ; return to shader part epilog2594;2595; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_zexti8_reg_hi_immneg128:2596; GFX1250-GISEL: ; %bb.0:2597; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12598; GFX1250-GISEL-NEXT: flat_load_u8 v0, v0, s[2:3] offset:-1282599; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02600; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02601; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2602; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff, v1, v02603; GFX1250-GISEL-NEXT: ; return to shader part epilog2604;2605; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16hi_zexti8_reg_hi_immneg128:2606; GFX1250-NOECC: ; %bb.0:2607; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12608; GFX1250-NOECC-NEXT: flat_load_d16_hi_u8 v1, v0, s[2:3] offset:-1282609; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02610; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12611; GFX1250-NOECC-NEXT: ; return to shader part epilog2612 %zext.offset = zext i32 %voffset to i642613 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2614 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282615 %load = load i8, ptr %gep12616 %zext.load = zext i8 %load to i162617 %build = insertelement <2 x i16> %reg, i16 %zext.load, i32 12618 %cast = bitcast <2 x i16> %build to <2 x half>2619 ret <2 x half> %cast2620}2621 2622define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_sexti8_reg_hi(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2623; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_sexti8_reg_hi:2624; GFX1250-SDAG: ; %bb.0:2625; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12626; GFX1250-SDAG-NEXT: flat_load_i8 v0, v0, s[2:3]2627; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02628; GFX1250-SDAG-NEXT: v_perm_b32 v0, v0, v1, 0x50401002629; GFX1250-SDAG-NEXT: ; return to shader part epilog2630;2631; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_sexti8_reg_hi:2632; GFX1250-GISEL: ; %bb.0:2633; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12634; GFX1250-GISEL-NEXT: flat_load_i8 v0, v0, s[2:3]2635; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02636; GFX1250-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02637; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2638; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02639; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff, v1, v02640; GFX1250-GISEL-NEXT: ; return to shader part epilog2641;2642; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16hi_sexti8_reg_hi:2643; GFX1250-NOECC: ; %bb.0:2644; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12645; GFX1250-NOECC-NEXT: flat_load_d16_hi_i8 v1, v0, s[2:3]2646; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02647; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12648; GFX1250-NOECC-NEXT: ; return to shader part epilog2649 %zext.offset = zext i32 %voffset to i642650 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2651 %load = load i8, ptr %gep02652 %sext.load = sext i8 %load to i162653 %build = insertelement <2 x i16> %reg, i16 %sext.load, i32 12654 %cast = bitcast <2 x i16> %build to <2 x half>2655 ret <2 x half> %cast2656}2657 2658define amdgpu_ps <2 x half> @flat_load_saddr_i16_d16hi_sexti8_reg_hi_immneg128(ptr inreg %sbase, i32 %voffset, <2 x i16> %reg) {2659; GFX1250-SDAG-LABEL: flat_load_saddr_i16_d16hi_sexti8_reg_hi_immneg128:2660; GFX1250-SDAG: ; %bb.0:2661; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12662; GFX1250-SDAG-NEXT: flat_load_i8 v0, v0, s[2:3] offset:-1282663; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02664; GFX1250-SDAG-NEXT: v_perm_b32 v0, v0, v1, 0x50401002665; GFX1250-SDAG-NEXT: ; return to shader part epilog2666;2667; GFX1250-GISEL-LABEL: flat_load_saddr_i16_d16hi_sexti8_reg_hi_immneg128:2668; GFX1250-GISEL: ; %bb.0:2669; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12670; GFX1250-GISEL-NEXT: flat_load_i8 v0, v0, s[2:3] offset:-1282671; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02672; GFX1250-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02673; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2674; GFX1250-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v02675; GFX1250-GISEL-NEXT: v_and_or_b32 v0, 0xffff, v1, v02676; GFX1250-GISEL-NEXT: ; return to shader part epilog2677;2678; GFX1250-NOECC-LABEL: flat_load_saddr_i16_d16hi_sexti8_reg_hi_immneg128:2679; GFX1250-NOECC: ; %bb.0:2680; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12681; GFX1250-NOECC-NEXT: flat_load_d16_hi_i8 v1, v0, s[2:3] offset:-1282682; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02683; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, v12684; GFX1250-NOECC-NEXT: ; return to shader part epilog2685 %zext.offset = zext i32 %voffset to i642686 %gep0 = getelementptr inbounds i8, ptr %sbase, i64 %zext.offset2687 %gep1 = getelementptr inbounds i8, ptr %gep0, i64 -1282688 %load = load i8, ptr %gep12689 %sext.load = sext i8 %load to i162690 %build = insertelement <2 x i16> %reg, i16 %sext.load, i32 12691 %cast = bitcast <2 x i16> %build to <2 x half>2692 ret <2 x half> %cast2693}2694 2695; --------------------------------------------------------------------------------2696; or-with-constant as add2697; --------------------------------------------------------------------------------2698 2699; Check add-as-or with split 64-bit or.2700define amdgpu_ps float @flat_load_saddr_i8_offset_or_i64_imm_offset_16(ptr addrspace(6) inreg %sbase, i32 %idx) {2701; GFX1250-LABEL: flat_load_saddr_i8_offset_or_i64_imm_offset_16:2702; GFX1250: ; %bb.0:2703; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12704; GFX1250-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_bitop2_b32 v0, 16, v0 bitop3:0x542705; GFX1250-NEXT: flat_load_u8 v0, v[0:1]2706; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x02707; GFX1250-NEXT: ; return to shader part epilog2708 %zext.idx = zext i32 %idx to i642709 %or = or i64 %zext.idx, 162710 %addr = inttoptr i64 %or to ptr2711 %load = load i8, ptr %addr2712 %zext = zext i8 %load to i322713 %to.vgpr = bitcast i32 %zext to float2714 ret float %to.vgpr2715}2716 2717define amdgpu_ps float @flat_load_saddr_i8_offset_or_i64_imm_offset_4160(ptr addrspace(6) inreg %sbase, i32 %idx) {2718; GFX1250-LABEL: flat_load_saddr_i8_offset_or_i64_imm_offset_4160:2719; GFX1250: ; %bb.0:2720; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12721; GFX1250-NEXT: v_or_b32_e32 v0, 0x1040, v02722; GFX1250-NEXT: v_mov_b32_e32 v1, 02723; GFX1250-NEXT: flat_load_u8 v0, v[0:1]2724; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x02725; GFX1250-NEXT: ; return to shader part epilog2726 %zext.idx = zext i32 %idx to i642727 %or = or i64 %zext.idx, 41602728 %addr = inttoptr i64 %or to ptr2729 %load = load i8, ptr %addr2730 %zext = zext i8 %load to i322731 %to.vgpr = bitcast i32 %zext to float2732 ret float %to.vgpr2733}2734 2735; --------------------------------------------------------------------------------2736; Full 64-bit scalar add.2737; --------------------------------------------------------------------------------2738 2739define amdgpu_ps void @flat_addr_64bit_lsr_iv(ptr inreg %arg) {2740; GFX1250-SDAG-LABEL: flat_addr_64bit_lsr_iv:2741; GFX1250-SDAG: ; %bb.0: ; %bb2742; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12743; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 02744; GFX1250-SDAG-NEXT: s_mov_b64 s[0:1], 02745; GFX1250-SDAG-NEXT: .LBB116_1: ; %bb32746; GFX1250-SDAG-NEXT: ; =>This Inner Loop Header: Depth=12747; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2748; GFX1250-SDAG-NEXT: s_add_nc_u64 s[4:5], s[2:3], s[0:1]2749; GFX1250-SDAG-NEXT: s_add_nc_u64 s[0:1], s[0:1], 42750; GFX1250-SDAG-NEXT: s_wait_dscnt 0x02751; GFX1250-SDAG-NEXT: flat_load_b32 v1, v0, s[4:5] scope:SCOPE_SYS2752; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x02753; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s0, 0x4002754; GFX1250-SDAG-NEXT: s_cbranch_scc0 .LBB116_12755; GFX1250-SDAG-NEXT: ; %bb.2: ; %bb22756; GFX1250-SDAG-NEXT: s_endpgm2757;2758; GFX1250-GISEL-LABEL: flat_addr_64bit_lsr_iv:2759; GFX1250-GISEL: ; %bb.0: ; %bb2760; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12761; GFX1250-GISEL-NEXT: s_mov_b64 s[0:1], 02762; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[2:3]2763; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1]2764; GFX1250-GISEL-NEXT: .LBB116_1: ; %bb32765; GFX1250-GISEL-NEXT: ; =>This Inner Loop Header: Depth=12766; GFX1250-GISEL-NEXT: s_wait_dscnt 0x02767; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2768; GFX1250-GISEL-NEXT: v_add_co_u32 v4, vcc_lo, v0, v22769; GFX1250-GISEL-NEXT: v_add_co_ci_u32_e64 v5, null, v1, v3, vcc_lo2770; GFX1250-GISEL-NEXT: v_add_nc_u64_e32 v[2:3], 4, v[2:3]2771; GFX1250-GISEL-NEXT: flat_load_b32 v4, v[4:5] scope:SCOPE_SYS2772; GFX1250-GISEL-NEXT: s_wait_loadcnt 0x02773; GFX1250-GISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0x400, v22774; GFX1250-GISEL-NEXT: s_cbranch_vccz .LBB116_12775; GFX1250-GISEL-NEXT: ; %bb.2: ; %bb22776; GFX1250-GISEL-NEXT: s_endpgm2777;2778; GFX1250-NOECC-LABEL: flat_addr_64bit_lsr_iv:2779; GFX1250-NOECC: ; %bb.0: ; %bb2780; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12781; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, 02782; GFX1250-NOECC-NEXT: s_mov_b64 s[0:1], 02783; GFX1250-NOECC-NEXT: .LBB116_1: ; %bb32784; GFX1250-NOECC-NEXT: ; =>This Inner Loop Header: Depth=12785; GFX1250-NOECC-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2786; GFX1250-NOECC-NEXT: s_add_nc_u64 s[4:5], s[2:3], s[0:1]2787; GFX1250-NOECC-NEXT: s_add_nc_u64 s[0:1], s[0:1], 42788; GFX1250-NOECC-NEXT: s_wait_dscnt 0x02789; GFX1250-NOECC-NEXT: flat_load_b32 v1, v0, s[4:5] scope:SCOPE_SYS2790; GFX1250-NOECC-NEXT: s_wait_loadcnt 0x02791; GFX1250-NOECC-NEXT: s_cmp_eq_u32 s0, 0x4002792; GFX1250-NOECC-NEXT: s_cbranch_scc0 .LBB116_12793; GFX1250-NOECC-NEXT: ; %bb.2: ; %bb22794; GFX1250-NOECC-NEXT: s_endpgm2795bb:2796 br label %bb32797 2798bb2: ; preds = %bb32799 ret void2800 2801bb3: ; preds = %bb3, %bb2802 %i = phi i32 [ 0, %bb ], [ %i8, %bb3 ]2803 %i4 = zext i32 %i to i642804 %i5 = getelementptr inbounds float, ptr %arg, i64 %i42805 %i6 = load volatile float, ptr %i5, align 42806 %i8 = add nuw nsw i32 %i, 12807 %i9 = icmp eq i32 %i8, 2562808 br i1 %i9, label %bb2, label %bb32809}2810 2811; Make sure we only have a single zero vaddr initialization.2812 2813define amdgpu_ps void @flat_addr_64bit_lsr_iv_multiload(ptr inreg %arg, ptr inreg %arg.1) {2814; GFX1250-SDAG-LABEL: flat_addr_64bit_lsr_iv_multiload:2815; GFX1250-SDAG: ; %bb.0: ; %bb2816; GFX1250-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12817; GFX1250-SDAG-NEXT: v_mov_b32_e32 v0, 02818; GFX1250-SDAG-NEXT: s_mov_b64 s[0:1], 02819; GFX1250-SDAG-NEXT: .LBB117_1: ; %bb32820; GFX1250-SDAG-NEXT: ; =>This Inner Loop Header: Depth=12821; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2822; GFX1250-SDAG-NEXT: s_add_nc_u64 s[4:5], s[2:3], s[0:1]2823; GFX1250-SDAG-NEXT: s_add_nc_u64 s[0:1], s[0:1], 42824; GFX1250-SDAG-NEXT: s_wait_dscnt 0x02825; GFX1250-SDAG-NEXT: flat_load_b32 v1, v0, s[4:5] scope:SCOPE_SYS2826; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x02827; GFX1250-SDAG-NEXT: flat_load_b32 v1, v0, s[4:5] scope:SCOPE_SYS2828; GFX1250-SDAG-NEXT: s_wait_loadcnt 0x02829; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s0, 0x4002830; GFX1250-SDAG-NEXT: ; kill: killed $sgpr4_sgpr52831; GFX1250-SDAG-NEXT: s_cbranch_scc0 .LBB117_12832; GFX1250-SDAG-NEXT: ; %bb.2: ; %bb22833; GFX1250-SDAG-NEXT: s_endpgm2834;2835; GFX1250-GISEL-LABEL: flat_addr_64bit_lsr_iv_multiload:2836; GFX1250-GISEL: ; %bb.0: ; %bb2837; GFX1250-GISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12838; GFX1250-GISEL-NEXT: s_mov_b64 s[0:1], 02839; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[2:3]2840; GFX1250-GISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1]2841; GFX1250-GISEL-NEXT: .LBB117_1: ; %bb32842; GFX1250-GISEL-NEXT: ; =>This Inner Loop Header: Depth=12843; GFX1250-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2844; GFX1250-GISEL-NEXT: v_add_co_u32 v4, vcc_lo, v0, v22845; GFX1250-GISEL-NEXT: v_add_co_ci_u32_e64 v5, null, v1, v3, vcc_lo2846; GFX1250-GISEL-NEXT: v_add_nc_u64_e32 v[2:3], 4, v[2:3]2847; GFX1250-GISEL-NEXT: ; kill: killed $vgpr4 killed $vgpr52848; GFX1250-GISEL-NEXT: s_wait_dscnt 0x02849; GFX1250-GISEL-NEXT: flat_load_b32 v6, v[4:5] scope:SCOPE_SYS2850; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x02851; GFX1250-GISEL-NEXT: flat_load_b32 v6, v[4:5] scope:SCOPE_SYS2852; GFX1250-GISEL-NEXT: s_wait_loadcnt 0x02853; GFX1250-GISEL-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0x400, v22854; GFX1250-GISEL-NEXT: s_cbranch_vccz .LBB117_12855; GFX1250-GISEL-NEXT: ; %bb.2: ; %bb22856; GFX1250-GISEL-NEXT: s_endpgm2857;2858; GFX1250-NOECC-LABEL: flat_addr_64bit_lsr_iv_multiload:2859; GFX1250-NOECC: ; %bb.0: ; %bb2860; GFX1250-NOECC-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12861; GFX1250-NOECC-NEXT: v_mov_b32_e32 v0, 02862; GFX1250-NOECC-NEXT: s_mov_b64 s[0:1], 02863; GFX1250-NOECC-NEXT: .LBB117_1: ; %bb32864; GFX1250-NOECC-NEXT: ; =>This Inner Loop Header: Depth=12865; GFX1250-NOECC-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2866; GFX1250-NOECC-NEXT: s_add_nc_u64 s[4:5], s[2:3], s[0:1]2867; GFX1250-NOECC-NEXT: s_add_nc_u64 s[0:1], s[0:1], 42868; GFX1250-NOECC-NEXT: s_wait_dscnt 0x02869; GFX1250-NOECC-NEXT: flat_load_b32 v1, v0, s[4:5] scope:SCOPE_SYS2870; GFX1250-NOECC-NEXT: s_wait_loadcnt_dscnt 0x02871; GFX1250-NOECC-NEXT: flat_load_b32 v1, v0, s[4:5] scope:SCOPE_SYS2872; GFX1250-NOECC-NEXT: s_wait_loadcnt 0x02873; GFX1250-NOECC-NEXT: s_cmp_eq_u32 s0, 0x4002874; GFX1250-NOECC-NEXT: ; kill: killed $sgpr4_sgpr52875; GFX1250-NOECC-NEXT: s_cbranch_scc0 .LBB117_12876; GFX1250-NOECC-NEXT: ; %bb.2: ; %bb22877; GFX1250-NOECC-NEXT: s_endpgm2878bb:2879 br label %bb32880 2881bb2: ; preds = %bb32882 ret void2883 2884bb3: ; preds = %bb3, %bb2885 %i = phi i32 [ 0, %bb ], [ %i8, %bb3 ]2886 %i4 = zext i32 %i to i642887 %i5 = getelementptr inbounds float, ptr %arg, i64 %i42888 %i6 = load volatile float, ptr %i5, align 42889 %i5.1 = getelementptr inbounds float, ptr %arg.1, i64 %i42890 %i6.1 = load volatile float, ptr %i5, align 42891 %i8 = add nuw nsw i32 %i, 12892 %i9 = icmp eq i32 %i8, 2562893 br i1 %i9, label %bb2, label %bb32894}2895 2896!0 = !{i32 0, i32 1073741824} ; (1 << 30)2897!1 = !{i32 0, i32 1073741825} ; (1 << 30) + 12898