390 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 %s -o - | FileCheck -check-prefix=GFX1250-SDAG %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -global-isel %s -o - | FileCheck -check-prefix=GFX1250-GISEL %s4 5define void @test_workgroup_id_x_non_kernel(ptr addrspace(1) %out) {6; GFX1250-SDAG-LABEL: test_workgroup_id_x_non_kernel:7; GFX1250-SDAG: ; %bb.0:8; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x010; GFX1250-SDAG-NEXT: s_bfe_u32 s0, ttmp6, 0x4000c11; GFX1250-SDAG-NEXT: s_and_b32 s1, ttmp6, 1512; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, 113; GFX1250-SDAG-NEXT: s_getreg_b32 s2, hwreg(HW_REG_IB_STS2, 6, 4)14; GFX1250-SDAG-NEXT: s_mul_i32 s0, ttmp9, s015; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)16; GFX1250-SDAG-NEXT: s_add_co_i32 s1, s1, s017; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s2, 018; GFX1250-SDAG-NEXT: s_cselect_b32 s0, ttmp9, s119; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s020; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off21; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]22;23; GFX1250-GISEL-LABEL: test_workgroup_id_x_non_kernel:24; GFX1250-GISEL: ; %bb.0:25; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x026; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x027; GFX1250-GISEL-NEXT: s_bfe_u32 s0, ttmp6, 0x4000c28; GFX1250-GISEL-NEXT: s_and_b32 s1, ttmp6, 1529; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s0, 130; GFX1250-GISEL-NEXT: s_getreg_b32 s2, hwreg(HW_REG_IB_STS2, 6, 4)31; GFX1250-GISEL-NEXT: s_mul_i32 s0, ttmp9, s032; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)33; GFX1250-GISEL-NEXT: s_add_co_i32 s1, s1, s034; GFX1250-GISEL-NEXT: s_cmp_eq_u32 s2, 035; GFX1250-GISEL-NEXT: s_cselect_b32 s0, ttmp9, s136; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s037; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off38; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]39 %id = call i32 @llvm.amdgcn.workgroup.id.x()40 store i32 %id, ptr addrspace(1) %out41 ret void42}43 44define void @test_workgroup_id_x_non_kernel_optimized_used(ptr addrspace(1) %out) "amdgpu-cluster-dims"="1024,1024,1024" {45; GFX1250-SDAG-LABEL: test_workgroup_id_x_non_kernel_optimized_used:46; GFX1250-SDAG: ; %bb.0:47; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x048; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x049; GFX1250-SDAG-NEXT: s_bfe_u32 s0, ttmp6, 0x4000c50; GFX1250-SDAG-NEXT: s_and_b32 s1, ttmp6, 1551; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, 152; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)53; GFX1250-SDAG-NEXT: s_mul_i32 s0, ttmp9, s054; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s1, s055; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)56; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s057; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off58; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]59;60; GFX1250-GISEL-LABEL: test_workgroup_id_x_non_kernel_optimized_used:61; GFX1250-GISEL: ; %bb.0:62; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x063; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x064; GFX1250-GISEL-NEXT: s_bfe_u32 s0, ttmp6, 0x4000c65; GFX1250-GISEL-NEXT: s_and_b32 s1, ttmp6, 1566; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s0, 167; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)68; GFX1250-GISEL-NEXT: s_mul_i32 s0, ttmp9, s069; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s1, s070; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)71; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s072; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off73; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]74 %id = call i32 @llvm.amdgcn.workgroup.id.x()75 store i32 %id, ptr addrspace(1) %out76 ret void77}78 79define void @test_workgroup_id_x_non_kernel_optimized_not_used(ptr addrspace(1) %out) "amdgpu-cluster-dims"="0,0,0" {80; GFX1250-SDAG-LABEL: test_workgroup_id_x_non_kernel_optimized_not_used:81; GFX1250-SDAG: ; %bb.0:82; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x083; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x084; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, ttmp985; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off86; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]87;88; GFX1250-GISEL-LABEL: test_workgroup_id_x_non_kernel_optimized_not_used:89; GFX1250-GISEL: ; %bb.0:90; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x091; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x092; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, ttmp993; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off94; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]95 %id = call i32 @llvm.amdgcn.workgroup.id.x()96 store i32 %id, ptr addrspace(1) %out97 ret void98}99 100define void @test_workgroup_id_x_non_kernel_optimized_fixed(ptr addrspace(1) %out) "amdgpu-cluster-dims"="2,1,2" {101; GFX1250-SDAG-LABEL: test_workgroup_id_x_non_kernel_optimized_fixed:102; GFX1250-SDAG: ; %bb.0:103; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0104; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0105; GFX1250-SDAG-NEXT: s_and_b32 s0, ttmp6, 15106; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)107; GFX1250-SDAG-NEXT: s_lshl1_add_u32 s0, ttmp9, s0108; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0109; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off110; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]111;112; GFX1250-GISEL-LABEL: test_workgroup_id_x_non_kernel_optimized_fixed:113; GFX1250-GISEL: ; %bb.0:114; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0115; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0116; GFX1250-GISEL-NEXT: s_and_b32 s0, ttmp6, 15117; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)118; GFX1250-GISEL-NEXT: s_lshl1_add_u32 s0, ttmp9, s0119; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0120; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off121; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]122 %id = call i32 @llvm.amdgcn.workgroup.id.x()123 store i32 %id, ptr addrspace(1) %out124 ret void125}126 127define void @test_workgroup_id_y_non_kernel(ptr addrspace(1) %out) {128; GFX1250-SDAG-LABEL: test_workgroup_id_y_non_kernel:129; GFX1250-SDAG: ; %bb.0:130; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0131; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0132; GFX1250-SDAG-NEXT: s_bfe_u32 s0, ttmp6, 0x40010133; GFX1250-SDAG-NEXT: s_and_b32 s1, ttmp7, 0xffff134; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, 1135; GFX1250-SDAG-NEXT: s_bfe_u32 s2, ttmp6, 0x40004136; GFX1250-SDAG-NEXT: s_mul_i32 s0, s1, s0137; GFX1250-SDAG-NEXT: s_getreg_b32 s3, hwreg(HW_REG_IB_STS2, 6, 4)138; GFX1250-SDAG-NEXT: s_add_co_i32 s2, s2, s0139; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s3, 0140; GFX1250-SDAG-NEXT: s_cselect_b32 s0, s1, s2141; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)142; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0143; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off144; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]145;146; GFX1250-GISEL-LABEL: test_workgroup_id_y_non_kernel:147; GFX1250-GISEL: ; %bb.0:148; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0149; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0150; GFX1250-GISEL-NEXT: s_bfe_u32 s0, ttmp6, 0x40010151; GFX1250-GISEL-NEXT: s_and_b32 s1, ttmp7, 0xffff152; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s0, 1153; GFX1250-GISEL-NEXT: s_bfe_u32 s2, ttmp6, 0x40004154; GFX1250-GISEL-NEXT: s_mul_i32 s0, s1, s0155; GFX1250-GISEL-NEXT: s_getreg_b32 s3, hwreg(HW_REG_IB_STS2, 6, 4)156; GFX1250-GISEL-NEXT: s_add_co_i32 s2, s2, s0157; GFX1250-GISEL-NEXT: s_cmp_eq_u32 s3, 0158; GFX1250-GISEL-NEXT: s_cselect_b32 s0, s1, s2159; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)160; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0161; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off162; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]163 %id = call i32 @llvm.amdgcn.workgroup.id.y()164 store i32 %id, ptr addrspace(1) %out165 ret void166}167 168define void @test_workgroup_id_y_non_kernel_optimized_used(ptr addrspace(1) %out) "amdgpu-cluster-dims"="1024,1024,1024" {169; GFX1250-SDAG-LABEL: test_workgroup_id_y_non_kernel_optimized_used:170; GFX1250-SDAG: ; %bb.0:171; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0172; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0173; GFX1250-SDAG-NEXT: s_bfe_u32 s0, ttmp6, 0x40010174; GFX1250-SDAG-NEXT: s_and_b32 s1, ttmp7, 0xffff175; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, 1176; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)177; GFX1250-SDAG-NEXT: s_mul_i32 s1, s1, s0178; GFX1250-SDAG-NEXT: s_bfe_u32 s0, ttmp6, 0x40004179; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, s1180; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)181; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0182; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off183; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]184;185; GFX1250-GISEL-LABEL: test_workgroup_id_y_non_kernel_optimized_used:186; GFX1250-GISEL: ; %bb.0:187; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0188; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0189; GFX1250-GISEL-NEXT: s_bfe_u32 s0, ttmp6, 0x40010190; GFX1250-GISEL-NEXT: s_and_b32 s1, ttmp7, 0xffff191; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s0, 1192; GFX1250-GISEL-NEXT: s_bfe_u32 s2, ttmp6, 0x40004193; GFX1250-GISEL-NEXT: s_mul_i32 s1, s1, s0194; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)195; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s2, s1196; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0197; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off198; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]199 %id = call i32 @llvm.amdgcn.workgroup.id.y()200 store i32 %id, ptr addrspace(1) %out201 ret void202}203 204define void @test_workgroup_id_y_non_kernel_optimized_not_used(ptr addrspace(1) %out) "amdgpu-cluster-dims"="0,0,0" {205; GFX1250-SDAG-LABEL: test_workgroup_id_y_non_kernel_optimized_not_used:206; GFX1250-SDAG: ; %bb.0:207; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0208; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0209; GFX1250-SDAG-NEXT: s_and_b32 s0, ttmp7, 0xffff210; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)211; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0212; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off213; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]214;215; GFX1250-GISEL-LABEL: test_workgroup_id_y_non_kernel_optimized_not_used:216; GFX1250-GISEL: ; %bb.0:217; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0218; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0219; GFX1250-GISEL-NEXT: s_and_b32 s0, ttmp7, 0xffff220; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)221; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0222; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off223; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]224 %id = call i32 @llvm.amdgcn.workgroup.id.y()225 store i32 %id, ptr addrspace(1) %out226 ret void227}228 229define void @test_workgroup_id_y_non_kernel_optimized_fixed(ptr addrspace(1) %out) "amdgpu-cluster-dims"="2,1,2" {230; GFX1250-SDAG-LABEL: test_workgroup_id_y_non_kernel_optimized_fixed:231; GFX1250-SDAG: ; %bb.0:232; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0233; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0234; GFX1250-SDAG-NEXT: s_and_b32 s0, ttmp7, 0xffff235; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)236; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0237; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off238; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]239;240; GFX1250-GISEL-LABEL: test_workgroup_id_y_non_kernel_optimized_fixed:241; GFX1250-GISEL: ; %bb.0:242; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0243; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0244; GFX1250-GISEL-NEXT: s_and_b32 s0, ttmp7, 0xffff245; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)246; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0247; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off248; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]249 %id = call i32 @llvm.amdgcn.workgroup.id.y()250 store i32 %id, ptr addrspace(1) %out251 ret void252}253 254define void @test_workgroup_id_z_non_kernel(ptr addrspace(1) %out) {255; GFX1250-SDAG-LABEL: test_workgroup_id_z_non_kernel:256; GFX1250-SDAG: ; %bb.0:257; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0258; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0259; GFX1250-SDAG-NEXT: s_bfe_u32 s0, ttmp6, 0x40014260; GFX1250-SDAG-NEXT: s_lshr_b32 s1, ttmp7, 16261; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, 1262; GFX1250-SDAG-NEXT: s_bfe_u32 s2, ttmp6, 0x40008263; GFX1250-SDAG-NEXT: s_mul_i32 s0, s1, s0264; GFX1250-SDAG-NEXT: s_getreg_b32 s3, hwreg(HW_REG_IB_STS2, 6, 4)265; GFX1250-SDAG-NEXT: s_add_co_i32 s2, s2, s0266; GFX1250-SDAG-NEXT: s_cmp_eq_u32 s3, 0267; GFX1250-SDAG-NEXT: s_cselect_b32 s0, s1, s2268; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)269; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0270; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off271; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]272;273; GFX1250-GISEL-LABEL: test_workgroup_id_z_non_kernel:274; GFX1250-GISEL: ; %bb.0:275; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0276; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0277; GFX1250-GISEL-NEXT: s_bfe_u32 s0, ttmp6, 0x40014278; GFX1250-GISEL-NEXT: s_lshr_b32 s1, ttmp7, 16279; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s0, 1280; GFX1250-GISEL-NEXT: s_bfe_u32 s2, ttmp6, 0x40008281; GFX1250-GISEL-NEXT: s_mul_i32 s0, s1, s0282; GFX1250-GISEL-NEXT: s_getreg_b32 s3, hwreg(HW_REG_IB_STS2, 6, 4)283; GFX1250-GISEL-NEXT: s_add_co_i32 s2, s2, s0284; GFX1250-GISEL-NEXT: s_cmp_eq_u32 s3, 0285; GFX1250-GISEL-NEXT: s_cselect_b32 s0, s1, s2286; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)287; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0288; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off289; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]290 %id = call i32 @llvm.amdgcn.workgroup.id.z()291 store i32 %id, ptr addrspace(1) %out292 ret void293}294 295define void @test_workgroup_id_z_non_kernel_optimized_used(ptr addrspace(1) %out) "amdgpu-cluster-dims"="1024,1024,1024" {296; GFX1250-SDAG-LABEL: test_workgroup_id_z_non_kernel_optimized_used:297; GFX1250-SDAG: ; %bb.0:298; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0299; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0300; GFX1250-SDAG-NEXT: s_bfe_u32 s0, ttmp6, 0x40014301; GFX1250-SDAG-NEXT: s_lshr_b32 s1, ttmp7, 16302; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, 1303; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)304; GFX1250-SDAG-NEXT: s_mul_i32 s1, s1, s0305; GFX1250-SDAG-NEXT: s_bfe_u32 s0, ttmp6, 0x40008306; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s0, s1307; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)308; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0309; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off310; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]311;312; GFX1250-GISEL-LABEL: test_workgroup_id_z_non_kernel_optimized_used:313; GFX1250-GISEL: ; %bb.0:314; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0315; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0316; GFX1250-GISEL-NEXT: s_bfe_u32 s0, ttmp6, 0x40014317; GFX1250-GISEL-NEXT: s_lshr_b32 s1, ttmp7, 16318; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s0, 1319; GFX1250-GISEL-NEXT: s_bfe_u32 s2, ttmp6, 0x40008320; GFX1250-GISEL-NEXT: s_mul_i32 s1, s1, s0321; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)322; GFX1250-GISEL-NEXT: s_add_co_i32 s0, s2, s1323; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0324; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off325; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]326 %id = call i32 @llvm.amdgcn.workgroup.id.z()327 store i32 %id, ptr addrspace(1) %out328 ret void329}330 331define void @test_workgroup_id_z_non_kernel_optimized_not_used(ptr addrspace(1) %out) "amdgpu-cluster-dims"="0,0,0" {332; GFX1250-SDAG-LABEL: test_workgroup_id_z_non_kernel_optimized_not_used:333; GFX1250-SDAG: ; %bb.0:334; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0335; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0336; GFX1250-SDAG-NEXT: s_lshr_b32 s0, ttmp7, 16337; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)338; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0339; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off340; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]341;342; GFX1250-GISEL-LABEL: test_workgroup_id_z_non_kernel_optimized_not_used:343; GFX1250-GISEL: ; %bb.0:344; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0345; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0346; GFX1250-GISEL-NEXT: s_lshr_b32 s0, ttmp7, 16347; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)348; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0349; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off350; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]351 %id = call i32 @llvm.amdgcn.workgroup.id.z()352 store i32 %id, ptr addrspace(1) %out353 ret void354}355 356define void @test_workgroup_id_z_non_kernel_optimized_fixed(ptr addrspace(1) %out) "amdgpu-cluster-dims"="2,1,2" {357; GFX1250-SDAG-LABEL: test_workgroup_id_z_non_kernel_optimized_fixed:358; GFX1250-SDAG: ; %bb.0:359; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0360; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0361; GFX1250-SDAG-NEXT: s_lshr_b32 s0, ttmp7, 15362; GFX1250-SDAG-NEXT: s_bfe_u32 s1, ttmp6, 0x40008363; GFX1250-SDAG-NEXT: s_and_b32 s0, s0, 0x1fffe364; GFX1250-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)365; GFX1250-SDAG-NEXT: s_add_co_i32 s0, s1, s0366; GFX1250-SDAG-NEXT: v_mov_b32_e32 v2, s0367; GFX1250-SDAG-NEXT: global_store_b32 v[0:1], v2, off368; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]369;370; GFX1250-GISEL-LABEL: test_workgroup_id_z_non_kernel_optimized_fixed:371; GFX1250-GISEL: ; %bb.0:372; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0373; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0374; GFX1250-GISEL-NEXT: s_lshr_b32 s0, ttmp7, 16375; GFX1250-GISEL-NEXT: s_bfe_u32 s1, ttmp6, 0x40008376; GFX1250-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)377; GFX1250-GISEL-NEXT: s_lshl1_add_u32 s0, s0, s1378; GFX1250-GISEL-NEXT: v_mov_b32_e32 v2, s0379; GFX1250-GISEL-NEXT: global_store_b32 v[0:1], v2, off380; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]381 %id = call i32 @llvm.amdgcn.workgroup.id.z()382 store i32 %id, ptr addrspace(1) %out383 ret void384}385 386 387declare i32 @llvm.amdgcn.workgroup.id.x()388declare i32 @llvm.amdgcn.workgroup.id.y()389declare i32 @llvm.amdgcn.workgroup.id.z()390