798 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn < %s | FileCheck -enable-var-scope -check-prefix=GCN %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx902 < %s | FileCheck -enable-var-scope -check-prefix=GFX9 %s4 5define amdgpu_kernel void @add1(ptr addrspace(1) nocapture %arg) {6; GCN-LABEL: add1:7; GCN: ; %bb.0: ; %bb8; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x99; GCN-NEXT: s_mov_b32 s3, 0xf00010; GCN-NEXT: s_mov_b32 s2, 011; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v012; GCN-NEXT: v_mov_b32_e32 v3, 013; GCN-NEXT: s_waitcnt lgkmcnt(0)14; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr6415; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v116; GCN-NEXT: s_waitcnt vmcnt(0)17; GCN-NEXT: v_addc_u32_e32 v0, vcc, 0, v4, vcc18; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr6419; GCN-NEXT: s_endpgm20;21; GFX9-LABEL: add1:22; GFX9: ; %bb.0: ; %bb23; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2424; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v025; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v126; GFX9-NEXT: s_waitcnt lgkmcnt(0)27; GFX9-NEXT: global_load_dword v3, v2, s[0:1]28; GFX9-NEXT: s_waitcnt vmcnt(0)29; GFX9-NEXT: v_addc_co_u32_e32 v0, vcc, 0, v3, vcc30; GFX9-NEXT: global_store_dword v2, v0, s[0:1]31; GFX9-NEXT: s_endpgm32bb:33 %x = tail call i32 @llvm.amdgcn.workitem.id.x()34 %y = tail call i32 @llvm.amdgcn.workitem.id.y()35 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x36 %v = load i32, ptr addrspace(1) %gep, align 437 %cmp = icmp ugt i32 %x, %y38 %ext = zext i1 %cmp to i3239 %add = add i32 %v, %ext40 store i32 %add, ptr addrspace(1) %gep, align 441 ret void42}43 44define i16 @add1_i16(ptr addrspace(1) nocapture %arg, ptr addrspace(1) nocapture %dst) {45; GCN-LABEL: add1_i16:46; GCN: ; %bb.0: ; %bb47; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)48; GCN-NEXT: v_and_b32_e32 v2, 0x3ff, v3149; GCN-NEXT: s_mov_b32 s6, 050; GCN-NEXT: v_lshlrev_b32_e32 v3, 2, v251; GCN-NEXT: v_add_i32_e32 v0, vcc, v0, v352; GCN-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc53; GCN-NEXT: s_mov_b32 s7, 0xf00054; GCN-NEXT: s_mov_b32 s4, s655; GCN-NEXT: s_mov_b32 s5, s656; GCN-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr6457; GCN-NEXT: v_bfe_u32 v1, v31, 10, 1058; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v2, v159; GCN-NEXT: s_waitcnt vmcnt(0)60; GCN-NEXT: v_addc_u32_e32 v0, vcc, 0, v0, vcc61; GCN-NEXT: s_setpc_b64 s[30:31]62;63; GFX9-LABEL: add1_i16:64; GFX9: ; %bb.0: ; %bb65; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; GFX9-NEXT: v_and_b32_e32 v2, 0x3ff, v3167; GFX9-NEXT: v_lshlrev_b32_e32 v3, 2, v268; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v0, v369; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc70; GFX9-NEXT: global_load_dword v0, v[0:1], off71; GFX9-NEXT: v_bfe_u32 v1, v31, 10, 1072; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v2, v173; GFX9-NEXT: s_waitcnt vmcnt(0)74; GFX9-NEXT: v_addc_co_u32_e32 v0, vcc, 0, v0, vcc75; GFX9-NEXT: s_setpc_b64 s[30:31]76bb:77 %x = tail call i32 @llvm.amdgcn.workitem.id.x()78 %y = tail call i32 @llvm.amdgcn.workitem.id.y()79 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x80 %v = load i32, ptr addrspace(1) %gep, align 481 %cmp = icmp ugt i32 %x, %y82 %ext = zext i1 %cmp to i3283 %add = add i32 %v, %ext84 %trunc = trunc i32 %add to i1685 ret i16 %trunc86}87 88define amdgpu_kernel void @sub1(ptr addrspace(1) nocapture %arg) {89; GCN-LABEL: sub1:90; GCN: ; %bb.0: ; %bb91; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x992; GCN-NEXT: s_mov_b32 s3, 0xf00093; GCN-NEXT: s_mov_b32 s2, 094; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v095; GCN-NEXT: v_mov_b32_e32 v3, 096; GCN-NEXT: s_waitcnt lgkmcnt(0)97; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr6498; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v199; GCN-NEXT: s_waitcnt vmcnt(0)100; GCN-NEXT: v_subbrev_u32_e32 v0, vcc, 0, v4, vcc101; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64102; GCN-NEXT: s_endpgm103;104; GFX9-LABEL: sub1:105; GFX9: ; %bb.0: ; %bb106; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24107; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0108; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1109; GFX9-NEXT: s_waitcnt lgkmcnt(0)110; GFX9-NEXT: global_load_dword v3, v2, s[0:1]111; GFX9-NEXT: s_waitcnt vmcnt(0)112; GFX9-NEXT: v_subbrev_co_u32_e32 v0, vcc, 0, v3, vcc113; GFX9-NEXT: global_store_dword v2, v0, s[0:1]114; GFX9-NEXT: s_endpgm115bb:116 %x = tail call i32 @llvm.amdgcn.workitem.id.x()117 %y = tail call i32 @llvm.amdgcn.workitem.id.y()118 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x119 %v = load i32, ptr addrspace(1) %gep, align 4120 %cmp = icmp ugt i32 %x, %y121 %ext = sext i1 %cmp to i32122 %add = add i32 %v, %ext123 store i32 %add, ptr addrspace(1) %gep, align 4124 ret void125}126 127define amdgpu_kernel void @add_adde(ptr addrspace(1) nocapture %arg, i32 %a) {128; GCN-LABEL: add_adde:129; GCN: ; %bb.0: ; %bb130; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9131; GCN-NEXT: s_load_dword s4, s[4:5], 0xb132; GCN-NEXT: s_mov_b32 s3, 0xf000133; GCN-NEXT: s_mov_b32 s2, 0134; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0135; GCN-NEXT: v_mov_b32_e32 v3, 0136; GCN-NEXT: s_waitcnt lgkmcnt(0)137; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64138; GCN-NEXT: v_mov_b32_e32 v5, s4139; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1140; GCN-NEXT: s_waitcnt vmcnt(0)141; GCN-NEXT: v_addc_u32_e32 v0, vcc, v5, v4, vcc142; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64143; GCN-NEXT: s_endpgm144;145; GFX9-LABEL: add_adde:146; GFX9: ; %bb.0: ; %bb147; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24148; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c149; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0150; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1151; GFX9-NEXT: s_waitcnt lgkmcnt(0)152; GFX9-NEXT: global_load_dword v3, v2, s[0:1]153; GFX9-NEXT: v_mov_b32_e32 v4, s2154; GFX9-NEXT: s_waitcnt vmcnt(0)155; GFX9-NEXT: v_addc_co_u32_e32 v0, vcc, v4, v3, vcc156; GFX9-NEXT: global_store_dword v2, v0, s[0:1]157; GFX9-NEXT: s_endpgm158bb:159 %x = tail call i32 @llvm.amdgcn.workitem.id.x()160 %y = tail call i32 @llvm.amdgcn.workitem.id.y()161 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x162 %v = load i32, ptr addrspace(1) %gep, align 4163 %cmp = icmp ugt i32 %x, %y164 %ext = zext i1 %cmp to i32165 %adde = add i32 %v, %ext166 %add2 = add i32 %adde, %a167 store i32 %add2, ptr addrspace(1) %gep, align 4168 ret void169}170 171define amdgpu_kernel void @adde_add(ptr addrspace(1) nocapture %arg, i32 %a) {172; GCN-LABEL: adde_add:173; GCN: ; %bb.0: ; %bb174; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9175; GCN-NEXT: s_load_dword s4, s[4:5], 0xb176; GCN-NEXT: s_mov_b32 s3, 0xf000177; GCN-NEXT: s_mov_b32 s2, 0178; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0179; GCN-NEXT: v_mov_b32_e32 v3, 0180; GCN-NEXT: s_waitcnt lgkmcnt(0)181; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64182; GCN-NEXT: v_mov_b32_e32 v5, s4183; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1184; GCN-NEXT: s_waitcnt vmcnt(0)185; GCN-NEXT: v_addc_u32_e32 v0, vcc, v4, v5, vcc186; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64187; GCN-NEXT: s_endpgm188;189; GFX9-LABEL: adde_add:190; GFX9: ; %bb.0: ; %bb191; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24192; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c193; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0194; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1195; GFX9-NEXT: s_waitcnt lgkmcnt(0)196; GFX9-NEXT: global_load_dword v3, v2, s[0:1]197; GFX9-NEXT: v_mov_b32_e32 v4, s2198; GFX9-NEXT: s_waitcnt vmcnt(0)199; GFX9-NEXT: v_addc_co_u32_e32 v0, vcc, v3, v4, vcc200; GFX9-NEXT: global_store_dword v2, v0, s[0:1]201; GFX9-NEXT: s_endpgm202bb:203 %x = tail call i32 @llvm.amdgcn.workitem.id.x()204 %y = tail call i32 @llvm.amdgcn.workitem.id.y()205 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x206 %v = load i32, ptr addrspace(1) %gep, align 4207 %cmp = icmp ugt i32 %x, %y208 %ext = zext i1 %cmp to i32209 %add = add i32 %v, %a210 %adde = add i32 %add, %ext211 store i32 %adde, ptr addrspace(1) %gep, align 4212 ret void213}214 215define amdgpu_kernel void @sub_sube(ptr addrspace(1) nocapture %arg, i32 %a) {216; GCN-LABEL: sub_sube:217; GCN: ; %bb.0: ; %bb218; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9219; GCN-NEXT: s_load_dword s4, s[4:5], 0xb220; GCN-NEXT: s_mov_b32 s3, 0xf000221; GCN-NEXT: s_mov_b32 s2, 0222; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0223; GCN-NEXT: v_mov_b32_e32 v3, 0224; GCN-NEXT: s_waitcnt lgkmcnt(0)225; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64226; GCN-NEXT: v_mov_b32_e32 v5, s4227; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1228; GCN-NEXT: s_waitcnt vmcnt(0)229; GCN-NEXT: v_subb_u32_e32 v0, vcc, v4, v5, vcc230; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64231; GCN-NEXT: s_endpgm232;233; GFX9-LABEL: sub_sube:234; GFX9: ; %bb.0: ; %bb235; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24236; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c237; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0238; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1239; GFX9-NEXT: s_waitcnt lgkmcnt(0)240; GFX9-NEXT: global_load_dword v3, v2, s[0:1]241; GFX9-NEXT: v_mov_b32_e32 v4, s2242; GFX9-NEXT: s_waitcnt vmcnt(0)243; GFX9-NEXT: v_subb_co_u32_e32 v0, vcc, v3, v4, vcc244; GFX9-NEXT: global_store_dword v2, v0, s[0:1]245; GFX9-NEXT: s_endpgm246bb:247 %x = tail call i32 @llvm.amdgcn.workitem.id.x()248 %y = tail call i32 @llvm.amdgcn.workitem.id.y()249 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x250 %v = load i32, ptr addrspace(1) %gep, align 4251 %cmp = icmp ugt i32 %x, %y252 %ext = sext i1 %cmp to i32253 %adde = add i32 %v, %ext254 %sub = sub i32 %adde, %a255 store i32 %sub, ptr addrspace(1) %gep, align 4256 ret void257}258 259define amdgpu_kernel void @sub_sube_commuted(ptr addrspace(1) nocapture %arg, i32 %a) {260; GCN-LABEL: sub_sube_commuted:261; GCN: ; %bb.0: ; %bb262; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9263; GCN-NEXT: s_load_dword s4, s[4:5], 0xb264; GCN-NEXT: s_mov_b32 s3, 0xf000265; GCN-NEXT: s_mov_b32 s2, 0266; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0267; GCN-NEXT: v_mov_b32_e32 v3, 0268; GCN-NEXT: s_waitcnt lgkmcnt(0)269; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64270; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1271; GCN-NEXT: s_waitcnt vmcnt(0)272; GCN-NEXT: v_subbrev_u32_e32 v0, vcc, 0, v4, vcc273; GCN-NEXT: v_sub_i32_e32 v0, vcc, s4, v0274; GCN-NEXT: v_add_i32_e32 v0, vcc, 0x64, v0275; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64276; GCN-NEXT: s_endpgm277;278; GFX9-LABEL: sub_sube_commuted:279; GFX9: ; %bb.0: ; %bb280; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24281; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c282; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0283; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1284; GFX9-NEXT: s_waitcnt lgkmcnt(0)285; GFX9-NEXT: global_load_dword v3, v2, s[0:1]286; GFX9-NEXT: s_waitcnt vmcnt(0)287; GFX9-NEXT: v_subbrev_co_u32_e32 v0, vcc, 0, v3, vcc288; GFX9-NEXT: v_sub_u32_e32 v0, s2, v0289; GFX9-NEXT: v_add_u32_e32 v0, 0x64, v0290; GFX9-NEXT: global_store_dword v2, v0, s[0:1]291; GFX9-NEXT: s_endpgm292bb:293 %x = tail call i32 @llvm.amdgcn.workitem.id.x()294 %y = tail call i32 @llvm.amdgcn.workitem.id.y()295 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x296 %v = load i32, ptr addrspace(1) %gep, align 4297 %cmp = icmp ugt i32 %x, %y298 %ext = sext i1 %cmp to i32299 %adde = add i32 %v, %ext300 %sub = sub i32 %adde, %a301 %sub2 = sub i32 100, %sub302 store i32 %sub2, ptr addrspace(1) %gep, align 4303 ret void304}305 306define amdgpu_kernel void @sube_sub(ptr addrspace(1) nocapture %arg, i32 %a) {307; GCN-LABEL: sube_sub:308; GCN: ; %bb.0: ; %bb309; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9310; GCN-NEXT: s_load_dword s4, s[4:5], 0xb311; GCN-NEXT: s_mov_b32 s3, 0xf000312; GCN-NEXT: s_mov_b32 s2, 0313; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0314; GCN-NEXT: v_mov_b32_e32 v3, 0315; GCN-NEXT: s_waitcnt lgkmcnt(0)316; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64317; GCN-NEXT: v_mov_b32_e32 v5, s4318; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1319; GCN-NEXT: s_waitcnt vmcnt(0)320; GCN-NEXT: v_subb_u32_e32 v0, vcc, v4, v5, vcc321; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64322; GCN-NEXT: s_endpgm323;324; GFX9-LABEL: sube_sub:325; GFX9: ; %bb.0: ; %bb326; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24327; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c328; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0329; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1330; GFX9-NEXT: s_waitcnt lgkmcnt(0)331; GFX9-NEXT: global_load_dword v3, v2, s[0:1]332; GFX9-NEXT: v_mov_b32_e32 v4, s2333; GFX9-NEXT: s_waitcnt vmcnt(0)334; GFX9-NEXT: v_subb_co_u32_e32 v0, vcc, v3, v4, vcc335; GFX9-NEXT: global_store_dword v2, v0, s[0:1]336; GFX9-NEXT: s_endpgm337bb:338 %x = tail call i32 @llvm.amdgcn.workitem.id.x()339 %y = tail call i32 @llvm.amdgcn.workitem.id.y()340 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x341 %v = load i32, ptr addrspace(1) %gep, align 4342 %cmp = icmp ugt i32 %x, %y343 %ext = sext i1 %cmp to i32344 %sub = sub i32 %v, %a345 %adde = add i32 %sub, %ext346 store i32 %adde, ptr addrspace(1) %gep, align 4347 ret void348}349 350define amdgpu_kernel void @zext_flclass(ptr addrspace(1) nocapture %arg, float %x) {351; GCN-LABEL: zext_flclass:352; GCN: ; %bb.0: ; %bb353; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9354; GCN-NEXT: s_load_dword s4, s[4:5], 0xb355; GCN-NEXT: s_mov_b32 s3, 0xf000356; GCN-NEXT: s_mov_b32 s2, 0357; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0358; GCN-NEXT: v_mov_b32_e32 v1, 0359; GCN-NEXT: s_waitcnt lgkmcnt(0)360; GCN-NEXT: buffer_load_dword v2, v[0:1], s[0:3], 0 addr64361; GCN-NEXT: v_mov_b32_e32 v3, 0x260362; GCN-NEXT: v_cmp_class_f32_e32 vcc, s4, v3363; GCN-NEXT: s_waitcnt vmcnt(0)364; GCN-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc365; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64366; GCN-NEXT: s_endpgm367;368; GFX9-LABEL: zext_flclass:369; GFX9: ; %bb.0: ; %bb370; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24371; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c372; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0373; GFX9-NEXT: v_mov_b32_e32 v2, 0x260374; GFX9-NEXT: s_waitcnt lgkmcnt(0)375; GFX9-NEXT: global_load_dword v1, v0, s[0:1]376; GFX9-NEXT: v_cmp_class_f32_e32 vcc, s2, v2377; GFX9-NEXT: s_waitcnt vmcnt(0)378; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc379; GFX9-NEXT: global_store_dword v0, v1, s[0:1]380; GFX9-NEXT: s_endpgm381bb:382 %id = tail call i32 @llvm.amdgcn.workitem.id.x()383 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %id384 %v = load i32, ptr addrspace(1) %gep, align 4385 %cmp = tail call zeroext i1 @llvm.amdgcn.class.f32(float %x, i32 608)386 %ext = zext i1 %cmp to i32387 %add = add i32 %v, %ext388 store i32 %add, ptr addrspace(1) %gep, align 4389 ret void390}391 392define amdgpu_kernel void @sext_flclass(ptr addrspace(1) nocapture %arg, float %x) {393; GCN-LABEL: sext_flclass:394; GCN: ; %bb.0: ; %bb395; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9396; GCN-NEXT: s_load_dword s4, s[4:5], 0xb397; GCN-NEXT: s_mov_b32 s3, 0xf000398; GCN-NEXT: s_mov_b32 s2, 0399; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0400; GCN-NEXT: v_mov_b32_e32 v1, 0401; GCN-NEXT: s_waitcnt lgkmcnt(0)402; GCN-NEXT: buffer_load_dword v2, v[0:1], s[0:3], 0 addr64403; GCN-NEXT: v_mov_b32_e32 v3, 0x260404; GCN-NEXT: v_cmp_class_f32_e32 vcc, s4, v3405; GCN-NEXT: s_waitcnt vmcnt(0)406; GCN-NEXT: v_subbrev_u32_e32 v2, vcc, 0, v2, vcc407; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64408; GCN-NEXT: s_endpgm409;410; GFX9-LABEL: sext_flclass:411; GFX9: ; %bb.0: ; %bb412; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24413; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c414; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0415; GFX9-NEXT: v_mov_b32_e32 v2, 0x260416; GFX9-NEXT: s_waitcnt lgkmcnt(0)417; GFX9-NEXT: global_load_dword v1, v0, s[0:1]418; GFX9-NEXT: v_cmp_class_f32_e32 vcc, s2, v2419; GFX9-NEXT: s_waitcnt vmcnt(0)420; GFX9-NEXT: v_subbrev_co_u32_e32 v1, vcc, 0, v1, vcc421; GFX9-NEXT: global_store_dword v0, v1, s[0:1]422; GFX9-NEXT: s_endpgm423bb:424 %id = tail call i32 @llvm.amdgcn.workitem.id.x()425 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %id426 %v = load i32, ptr addrspace(1) %gep, align 4427 %cmp = tail call zeroext i1 @llvm.amdgcn.class.f32(float %x, i32 608)428 %ext = sext i1 %cmp to i32429 %add = add i32 %v, %ext430 store i32 %add, ptr addrspace(1) %gep, align 4431 ret void432}433 434define amdgpu_kernel void @add_and(ptr addrspace(1) nocapture %arg) {435; GCN-LABEL: add_and:436; GCN: ; %bb.0: ; %bb437; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9438; GCN-NEXT: s_mov_b32 s3, 0xf000439; GCN-NEXT: s_mov_b32 s2, 0440; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0441; GCN-NEXT: v_mov_b32_e32 v3, 0442; GCN-NEXT: s_waitcnt lgkmcnt(0)443; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64444; GCN-NEXT: v_max_u32_e32 v1, 1, v1445; GCN-NEXT: v_cmp_lt_u32_e32 vcc, v1, v0446; GCN-NEXT: s_waitcnt vmcnt(0)447; GCN-NEXT: v_addc_u32_e32 v0, vcc, 0, v4, vcc448; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64449; GCN-NEXT: s_endpgm450;451; GFX9-LABEL: add_and:452; GFX9: ; %bb.0: ; %bb453; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24454; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0455; GFX9-NEXT: v_max_u32_e32 v1, 1, v1456; GFX9-NEXT: v_cmp_lt_u32_e32 vcc, v1, v0457; GFX9-NEXT: s_waitcnt lgkmcnt(0)458; GFX9-NEXT: global_load_dword v3, v2, s[0:1]459; GFX9-NEXT: s_waitcnt vmcnt(0)460; GFX9-NEXT: v_addc_co_u32_e32 v0, vcc, 0, v3, vcc461; GFX9-NEXT: global_store_dword v2, v0, s[0:1]462; GFX9-NEXT: s_endpgm463bb:464 %x = tail call i32 @llvm.amdgcn.workitem.id.x()465 %y = tail call i32 @llvm.amdgcn.workitem.id.y()466 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x467 %v = load i32, ptr addrspace(1) %gep, align 4468 %cmp1 = icmp ugt i32 %x, %y469 %cmp2 = icmp ugt i32 %x, 1470 %cmp = and i1 %cmp1, %cmp2471 %ext = zext i1 %cmp to i32472 %add = add i32 %v, %ext473 store i32 %add, ptr addrspace(1) %gep, align 4474 ret void475}476 477; sub x, sext (setcc) => addcarry x, 0, setcc478define amdgpu_kernel void @cmp_sub_sext(ptr addrspace(1) nocapture %arg) {479; GCN-LABEL: cmp_sub_sext:480; GCN: ; %bb.0: ; %bb481; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9482; GCN-NEXT: s_mov_b32 s3, 0xf000483; GCN-NEXT: s_mov_b32 s2, 0484; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0485; GCN-NEXT: v_mov_b32_e32 v3, 0486; GCN-NEXT: s_waitcnt lgkmcnt(0)487; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64488; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1489; GCN-NEXT: s_waitcnt vmcnt(0)490; GCN-NEXT: v_addc_u32_e32 v0, vcc, 0, v4, vcc491; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64492; GCN-NEXT: s_endpgm493;494; GFX9-LABEL: cmp_sub_sext:495; GFX9: ; %bb.0: ; %bb496; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24497; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0498; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1499; GFX9-NEXT: s_waitcnt lgkmcnt(0)500; GFX9-NEXT: global_load_dword v3, v2, s[0:1]501; GFX9-NEXT: s_waitcnt vmcnt(0)502; GFX9-NEXT: v_addc_co_u32_e32 v0, vcc, 0, v3, vcc503; GFX9-NEXT: global_store_dword v2, v0, s[0:1]504; GFX9-NEXT: s_endpgm505bb:506 %x = tail call i32 @llvm.amdgcn.workitem.id.x()507 %y = tail call i32 @llvm.amdgcn.workitem.id.y()508 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x509 %v = load i32, ptr addrspace(1) %gep, align 4510 %cmp = icmp ugt i32 %x, %y511 %ext = sext i1 %cmp to i32512 %add = sub i32 %v, %ext513 store i32 %add, ptr addrspace(1) %gep, align 4514 ret void515}516 517; sub x, zext (setcc) => subcarry x, 0, setcc518define amdgpu_kernel void @cmp_sub_zext(ptr addrspace(1) nocapture %arg) {519; GCN-LABEL: cmp_sub_zext:520; GCN: ; %bb.0: ; %bb521; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9522; GCN-NEXT: s_mov_b32 s3, 0xf000523; GCN-NEXT: s_mov_b32 s2, 0524; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0525; GCN-NEXT: v_mov_b32_e32 v3, 0526; GCN-NEXT: s_waitcnt lgkmcnt(0)527; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64528; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1529; GCN-NEXT: s_waitcnt vmcnt(0)530; GCN-NEXT: v_subbrev_u32_e32 v0, vcc, 0, v4, vcc531; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64532; GCN-NEXT: s_endpgm533;534; GFX9-LABEL: cmp_sub_zext:535; GFX9: ; %bb.0: ; %bb536; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24537; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0538; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1539; GFX9-NEXT: s_waitcnt lgkmcnt(0)540; GFX9-NEXT: global_load_dword v3, v2, s[0:1]541; GFX9-NEXT: s_waitcnt vmcnt(0)542; GFX9-NEXT: v_subbrev_co_u32_e32 v0, vcc, 0, v3, vcc543; GFX9-NEXT: global_store_dword v2, v0, s[0:1]544; GFX9-NEXT: s_endpgm545bb:546 %x = tail call i32 @llvm.amdgcn.workitem.id.x()547 %y = tail call i32 @llvm.amdgcn.workitem.id.y()548 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x549 %v = load i32, ptr addrspace(1) %gep, align 4550 %cmp = icmp ugt i32 %x, %y551 %ext = zext i1 %cmp to i32552 %add = sub i32 %v, %ext553 store i32 %add, ptr addrspace(1) %gep, align 4554 ret void555}556 557define amdgpu_kernel void @sub_addcarry(ptr addrspace(1) nocapture %arg, i32 %a) {558; GCN-LABEL: sub_addcarry:559; GCN: ; %bb.0: ; %bb560; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9561; GCN-NEXT: s_load_dword s4, s[4:5], 0xb562; GCN-NEXT: s_mov_b32 s3, 0xf000563; GCN-NEXT: s_mov_b32 s2, 0564; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0565; GCN-NEXT: v_mov_b32_e32 v3, 0566; GCN-NEXT: s_waitcnt lgkmcnt(0)567; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64568; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1569; GCN-NEXT: s_waitcnt vmcnt(0)570; GCN-NEXT: v_addc_u32_e32 v0, vcc, 0, v4, vcc571; GCN-NEXT: v_subrev_i32_e32 v0, vcc, s4, v0572; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64573; GCN-NEXT: s_endpgm574;575; GFX9-LABEL: sub_addcarry:576; GFX9: ; %bb.0: ; %bb577; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24578; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c579; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0580; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1581; GFX9-NEXT: s_waitcnt lgkmcnt(0)582; GFX9-NEXT: global_load_dword v3, v2, s[0:1]583; GFX9-NEXT: s_waitcnt vmcnt(0)584; GFX9-NEXT: v_addc_co_u32_e32 v0, vcc, 0, v3, vcc585; GFX9-NEXT: v_subrev_u32_e32 v0, s2, v0586; GFX9-NEXT: global_store_dword v2, v0, s[0:1]587; GFX9-NEXT: s_endpgm588bb:589 %x = tail call i32 @llvm.amdgcn.workitem.id.x()590 %y = tail call i32 @llvm.amdgcn.workitem.id.y()591 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x592 %v = load i32, ptr addrspace(1) %gep, align 4593 %cmp = icmp ugt i32 %x, %y594 %ext = zext i1 %cmp to i32595 %adde = add i32 %v, %ext596 %add2 = sub i32 %adde, %a597 store i32 %add2, ptr addrspace(1) %gep, align 4598 ret void599}600 601define amdgpu_kernel void @sub_subcarry(ptr addrspace(1) nocapture %arg, i32 %a) {602; GCN-LABEL: sub_subcarry:603; GCN: ; %bb.0: ; %bb604; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9605; GCN-NEXT: s_load_dword s4, s[4:5], 0xb606; GCN-NEXT: s_mov_b32 s3, 0xf000607; GCN-NEXT: s_mov_b32 s2, 0608; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0609; GCN-NEXT: v_mov_b32_e32 v3, 0610; GCN-NEXT: s_waitcnt lgkmcnt(0)611; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64612; GCN-NEXT: v_mov_b32_e32 v5, s4613; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1614; GCN-NEXT: s_waitcnt vmcnt(0)615; GCN-NEXT: v_subb_u32_e32 v0, vcc, v4, v5, vcc616; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64617; GCN-NEXT: s_endpgm618;619; GFX9-LABEL: sub_subcarry:620; GFX9: ; %bb.0: ; %bb621; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24622; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c623; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0624; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1625; GFX9-NEXT: s_waitcnt lgkmcnt(0)626; GFX9-NEXT: global_load_dword v3, v2, s[0:1]627; GFX9-NEXT: v_mov_b32_e32 v4, s2628; GFX9-NEXT: s_waitcnt vmcnt(0)629; GFX9-NEXT: v_subb_co_u32_e32 v0, vcc, v3, v4, vcc630; GFX9-NEXT: global_store_dword v2, v0, s[0:1]631; GFX9-NEXT: s_endpgm632bb:633 %x = tail call i32 @llvm.amdgcn.workitem.id.x()634 %y = tail call i32 @llvm.amdgcn.workitem.id.y()635 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x636 %v = load i32, ptr addrspace(1) %gep, align 4637 %cmp = icmp ugt i32 %x, %y638 %ext = zext i1 %cmp to i32639 %adde = sub i32 %v, %ext640 %add2 = sub i32 %adde, %a641 store i32 %add2, ptr addrspace(1) %gep, align 4642 ret void643}644 645; Check case where sub is commuted with zext646define amdgpu_kernel void @sub_zext_setcc_commute(ptr addrspace(1) nocapture %arg, i32 %a, i32%b) {647; GCN-LABEL: sub_zext_setcc_commute:648; GCN: ; %bb.0: ; %bb649; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9650; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0651; GCN-NEXT: s_waitcnt lgkmcnt(0)652; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]653; GCN-NEXT: s_mov_b32 s3, 0xf000654; GCN-NEXT: s_mov_b32 s2, 0655; GCN-NEXT: v_mov_b32_e32 v3, 0656; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64657; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1658; GCN-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc659; GCN-NEXT: s_waitcnt vmcnt(0)660; GCN-NEXT: v_sub_i32_e32 v0, vcc, v0, v4661; GCN-NEXT: v_add_i32_e32 v0, vcc, s4, v0662; GCN-NEXT: v_subrev_i32_e32 v0, vcc, s5, v0663; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64664; GCN-NEXT: s_endpgm665;666; GFX9-LABEL: sub_zext_setcc_commute:667; GFX9: ; %bb.0: ; %bb668; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24669; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0670; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1671; GFX9-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc672; GFX9-NEXT: s_waitcnt lgkmcnt(0)673; GFX9-NEXT: global_load_dword v3, v2, s[0:1]674; GFX9-NEXT: s_waitcnt vmcnt(0)675; GFX9-NEXT: v_sub_u32_e32 v0, v0, v3676; GFX9-NEXT: v_add_u32_e32 v0, s2, v0677; GFX9-NEXT: v_subrev_u32_e32 v0, s3, v0678; GFX9-NEXT: global_store_dword v2, v0, s[0:1]679; GFX9-NEXT: s_endpgm680bb:681 %x = tail call i32 @llvm.amdgcn.workitem.id.x()682 %y = tail call i32 @llvm.amdgcn.workitem.id.y()683 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x684 %v = load i32, ptr addrspace(1) %gep, align 4685 %cmp = icmp ugt i32 %x, %y686 %ext = zext i1 %cmp to i32687 %adde = sub i32 %v, %ext688 %sub = sub i32 %a, %adde689 %sub2 = sub i32 %sub, %b690 store i32 %sub2, ptr addrspace(1) %gep, align 4691 ret void692}693 694; Check case where sub is commuted with sext695define amdgpu_kernel void @sub_sext_setcc_commute(ptr addrspace(1) nocapture %arg, i32 %a, i32%b) {696; GCN-LABEL: sub_sext_setcc_commute:697; GCN: ; %bb.0: ; %bb698; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9699; GCN-NEXT: v_lshlrev_b32_e32 v2, 2, v0700; GCN-NEXT: s_waitcnt lgkmcnt(0)701; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]702; GCN-NEXT: s_mov_b32 s3, 0xf000703; GCN-NEXT: s_mov_b32 s2, 0704; GCN-NEXT: v_mov_b32_e32 v3, 0705; GCN-NEXT: buffer_load_dword v4, v[2:3], s[0:3], 0 addr64706; GCN-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1707; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc708; GCN-NEXT: s_waitcnt vmcnt(0)709; GCN-NEXT: v_sub_i32_e32 v0, vcc, v0, v4710; GCN-NEXT: v_add_i32_e32 v0, vcc, s4, v0711; GCN-NEXT: v_subrev_i32_e32 v0, vcc, s5, v0712; GCN-NEXT: buffer_store_dword v0, v[2:3], s[0:3], 0 addr64713; GCN-NEXT: s_endpgm714;715; GFX9-LABEL: sub_sext_setcc_commute:716; GFX9: ; %bb.0: ; %bb717; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24718; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v0719; GFX9-NEXT: v_cmp_gt_u32_e32 vcc, v0, v1720; GFX9-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc721; GFX9-NEXT: s_waitcnt lgkmcnt(0)722; GFX9-NEXT: global_load_dword v3, v2, s[0:1]723; GFX9-NEXT: s_waitcnt vmcnt(0)724; GFX9-NEXT: v_sub_u32_e32 v0, v0, v3725; GFX9-NEXT: v_add_u32_e32 v0, s2, v0726; GFX9-NEXT: v_subrev_u32_e32 v0, s3, v0727; GFX9-NEXT: global_store_dword v2, v0, s[0:1]728; GFX9-NEXT: s_endpgm729bb:730 %x = tail call i32 @llvm.amdgcn.workitem.id.x()731 %y = tail call i32 @llvm.amdgcn.workitem.id.y()732 %gep = getelementptr inbounds i32, ptr addrspace(1) %arg, i32 %x733 %v = load i32, ptr addrspace(1) %gep, align 4734 %cmp = icmp ugt i32 %x, %y735 %ext = sext i1 %cmp to i32736 %adde = sub i32 %v, %ext737 %sub = sub i32 %a, %adde738 %sub2 = sub i32 %sub, %b739 store i32 %sub2, ptr addrspace(1) %gep, align 4740 ret void741}742 743define i32 @add_sext_bool_is_shared(ptr %ptr, i32 %y) {744; GCN-LABEL: add_sext_bool_is_shared:745; GCN: ; %bb.0:746; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)747; GCN-NEXT: s_mov_b64 s[4:5], 0xe8748; GCN-NEXT: s_load_dword s4, s[4:5], 0x0749; GCN-NEXT: s_waitcnt lgkmcnt(0)750; GCN-NEXT: v_cmp_eq_u32_e32 vcc, s4, v1751; GCN-NEXT: v_subbrev_u32_e32 v0, vcc, 0, v2, vcc752; GCN-NEXT: s_setpc_b64 s[30:31]753;754; GFX9-LABEL: add_sext_bool_is_shared:755; GFX9: ; %bb.0:756; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)757; GFX9-NEXT: s_mov_b64 s[4:5], src_shared_base758; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, s5, v1759; GFX9-NEXT: v_subbrev_co_u32_e32 v0, vcc, 0, v2, vcc760; GFX9-NEXT: s_setpc_b64 s[30:31]761 %is.shared = call i1 @llvm.amdgcn.is.shared(ptr %ptr)762 %sext = sext i1 %is.shared to i32763 %add = add i32 %sext, %y764 ret i32 %add765}766 767define i32 @add_sext_bool_is_private(ptr %ptr, i32 %y) {768; GCN-LABEL: add_sext_bool_is_private:769; GCN: ; %bb.0:770; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)771; GCN-NEXT: s_mov_b64 s[4:5], 0xe4772; GCN-NEXT: s_load_dword s4, s[4:5], 0x0773; GCN-NEXT: s_waitcnt lgkmcnt(0)774; GCN-NEXT: v_cmp_eq_u32_e32 vcc, s4, v1775; GCN-NEXT: v_subbrev_u32_e32 v0, vcc, 0, v2, vcc776; GCN-NEXT: s_setpc_b64 s[30:31]777;778; GFX9-LABEL: add_sext_bool_is_private:779; GFX9: ; %bb.0:780; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)781; GFX9-NEXT: s_mov_b64 s[4:5], src_private_base782; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, s5, v1783; GFX9-NEXT: v_subbrev_co_u32_e32 v0, vcc, 0, v2, vcc784; GFX9-NEXT: s_setpc_b64 s[30:31]785 %is.private = call i1 @llvm.amdgcn.is.private(ptr %ptr)786 %sext = sext i1 %is.private to i32787 %add = add i32 %sext, %y788 ret i32 %add789}790 791declare i1 @llvm.amdgcn.class.f32(float, i32) #0792 793declare i32 @llvm.amdgcn.workitem.id.x() #0794 795declare i32 @llvm.amdgcn.workitem.id.y() #0796 797attributes #0 = { nounwind readnone speculatable }798