222 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx908 < %s | FileCheck -check-prefix=GFX908 %s3; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx90a < %s | FileCheck -check-prefix=GFX90A %s4; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx942 < %s | FileCheck -check-prefix=GFX942 %s5; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 < %s | FileCheck -check-prefix=GFX1200 %s6; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1250 < %s | FileCheck -check-prefix=GFX1250 %s7 8define void @raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) #0 {9; GFX908-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:10; GFX908: ; %bb.0:11; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12; GFX908-NEXT: buffer_atomic_add_f32 v0, v1, s[16:19], s20 offen13; GFX908-NEXT: s_waitcnt vmcnt(0)14; GFX908-NEXT: s_setpc_b64 s[30:31]15;16; GFX90A-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:17; GFX90A: ; %bb.0:18; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)19; GFX90A-NEXT: buffer_atomic_add_f32 v0, v1, s[16:19], s20 offen scc20; GFX90A-NEXT: s_waitcnt vmcnt(0)21; GFX90A-NEXT: s_setpc_b64 s[30:31]22;23; GFX942-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:24; GFX942: ; %bb.0:25; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)26; GFX942-NEXT: buffer_atomic_add_f32 v0, v1, s[0:3], s16 offen sc127; GFX942-NEXT: s_waitcnt vmcnt(0)28; GFX942-NEXT: s_setpc_b64 s[30:31]29;30; GFX1200-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:31; GFX1200: ; %bb.0:32; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x033; GFX1200-NEXT: s_wait_expcnt 0x034; GFX1200-NEXT: s_wait_samplecnt 0x035; GFX1200-NEXT: s_wait_bvhcnt 0x036; GFX1200-NEXT: s_wait_kmcnt 0x037; GFX1200-NEXT: buffer_atomic_add_f32 v0, v1, s[0:3], s16 offen scope:SCOPE_SYS38; GFX1200-NEXT: s_setpc_b64 s[30:31]39;40; GFX1250-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:41; GFX1250: ; %bb.0:42; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x043; GFX1250-NEXT: s_wait_kmcnt 0x044; GFX1250-NEXT: buffer_atomic_add_f32 v0, v1, s[0:3], s16 offen scope:SCOPE_SYS45; GFX1250-NEXT: s_set_pc_i64 s[30:31]46 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 24)47 ret void48}49 50define void @raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) #0 {51; GFX908-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:52; GFX908: ; %bb.0:53; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)54; GFX908-NEXT: buffer_atomic_add_f32 v0, off, s[16:19], s2055; GFX908-NEXT: s_waitcnt vmcnt(0)56; GFX908-NEXT: s_setpc_b64 s[30:31]57;58; GFX90A-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:59; GFX90A: ; %bb.0:60; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX90A-NEXT: buffer_atomic_add_f32 v0, off, s[16:19], s2062; GFX90A-NEXT: s_waitcnt vmcnt(0)63; GFX90A-NEXT: s_setpc_b64 s[30:31]64;65; GFX942-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:66; GFX942: ; %bb.0:67; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)68; GFX942-NEXT: buffer_atomic_add_f32 v0, off, s[0:3], s1669; GFX942-NEXT: s_waitcnt vmcnt(0)70; GFX942-NEXT: s_setpc_b64 s[30:31]71;72; GFX1200-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:73; GFX1200: ; %bb.0:74; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x075; GFX1200-NEXT: s_wait_expcnt 0x076; GFX1200-NEXT: s_wait_samplecnt 0x077; GFX1200-NEXT: s_wait_bvhcnt 0x078; GFX1200-NEXT: s_wait_kmcnt 0x079; GFX1200-NEXT: buffer_atomic_add_f32 v0, off, s[0:3], s1680; GFX1200-NEXT: s_setpc_b64 s[30:31]81;82; GFX1250-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:83; GFX1250: ; %bb.0:84; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x085; GFX1250-NEXT: s_wait_kmcnt 0x086; GFX1250-NEXT: buffer_atomic_add_f32 v0, off, s[0:3], s1687; GFX1250-NEXT: s_set_pc_i64 s[30:31]88 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 0, i32 %soffset, i32 0)89 ret void90}91 92define void @raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset(<2 x half> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) #0 {93; GFX908-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:94; GFX908: ; %bb.0:95; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)96; GFX908-NEXT: buffer_atomic_pk_add_f16 v0, v1, s[16:19], s20 offen97; GFX908-NEXT: s_waitcnt vmcnt(0)98; GFX908-NEXT: s_setpc_b64 s[30:31]99;100; GFX90A-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:101; GFX90A: ; %bb.0:102; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX90A-NEXT: buffer_atomic_pk_add_f16 v0, v1, s[16:19], s20 offen104; GFX90A-NEXT: s_waitcnt vmcnt(0)105; GFX90A-NEXT: s_setpc_b64 s[30:31]106;107; GFX942-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:108; GFX942: ; %bb.0:109; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)110; GFX942-NEXT: buffer_atomic_pk_add_f16 v0, v1, s[0:3], s16 offen111; GFX942-NEXT: s_waitcnt vmcnt(0)112; GFX942-NEXT: s_setpc_b64 s[30:31]113;114; GFX1200-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:115; GFX1200: ; %bb.0:116; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0117; GFX1200-NEXT: s_wait_expcnt 0x0118; GFX1200-NEXT: s_wait_samplecnt 0x0119; GFX1200-NEXT: s_wait_bvhcnt 0x0120; GFX1200-NEXT: s_wait_kmcnt 0x0121; GFX1200-NEXT: buffer_atomic_pk_add_f16 v0, v1, s[0:3], s16 offen122; GFX1200-NEXT: s_setpc_b64 s[30:31]123;124; GFX1250-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset:125; GFX1250: ; %bb.0:126; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0127; GFX1250-NEXT: s_wait_kmcnt 0x0128; GFX1250-NEXT: buffer_atomic_pk_add_f16 v0, v1, s[0:3], s16 offen129; GFX1250-NEXT: s_set_pc_i64 s[30:31]130 %ret = call <2 x half> @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)131 ret void132}133 134define void @raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset(<2 x half> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) #0 {135; GFX908-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:136; GFX908: ; %bb.0:137; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX908-NEXT: buffer_atomic_pk_add_f16 v0, off, s[16:19], s20 offset:92139; GFX908-NEXT: s_waitcnt vmcnt(0)140; GFX908-NEXT: s_setpc_b64 s[30:31]141;142; GFX90A-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:143; GFX90A: ; %bb.0:144; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)145; GFX90A-NEXT: buffer_atomic_pk_add_f16 v0, off, s[16:19], s20 offset:92146; GFX90A-NEXT: s_waitcnt vmcnt(0)147; GFX90A-NEXT: s_setpc_b64 s[30:31]148;149; GFX942-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:150; GFX942: ; %bb.0:151; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)152; GFX942-NEXT: buffer_atomic_pk_add_f16 v0, off, s[0:3], s16 offset:92153; GFX942-NEXT: s_waitcnt vmcnt(0)154; GFX942-NEXT: s_setpc_b64 s[30:31]155;156; GFX1200-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:157; GFX1200: ; %bb.0:158; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0159; GFX1200-NEXT: s_wait_expcnt 0x0160; GFX1200-NEXT: s_wait_samplecnt 0x0161; GFX1200-NEXT: s_wait_bvhcnt 0x0162; GFX1200-NEXT: s_wait_kmcnt 0x0163; GFX1200-NEXT: buffer_atomic_pk_add_f16 v0, off, s[0:3], s16 offset:92164; GFX1200-NEXT: s_setpc_b64 s[30:31]165;166; GFX1250-LABEL: raw_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset:167; GFX1250: ; %bb.0:168; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0169; GFX1250-NEXT: s_wait_kmcnt 0x0170; GFX1250-NEXT: buffer_atomic_pk_add_f16 v0, off, s[0:3], s16 offset:92171; GFX1250-NEXT: s_set_pc_i64 s[30:31]172 %ret = call <2 x half> @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 92, i32 %soffset, i32 0)173 ret void174}175 176define void @raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) #0 {177; GFX908-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc:178; GFX908: ; %bb.0:179; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)180; GFX908-NEXT: buffer_atomic_add_f32 v0, v1, s[16:19], s20 offen slc181; GFX908-NEXT: s_waitcnt vmcnt(0)182; GFX908-NEXT: s_setpc_b64 s[30:31]183;184; GFX90A-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc:185; GFX90A: ; %bb.0:186; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)187; GFX90A-NEXT: buffer_atomic_add_f32 v0, v1, s[16:19], s20 offen slc188; GFX90A-NEXT: s_waitcnt vmcnt(0)189; GFX90A-NEXT: s_setpc_b64 s[30:31]190;191; GFX942-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc:192; GFX942: ; %bb.0:193; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)194; GFX942-NEXT: buffer_atomic_add_f32 v0, v1, s[0:3], s16 offen nt195; GFX942-NEXT: s_waitcnt vmcnt(0)196; GFX942-NEXT: s_setpc_b64 s[30:31]197;198; GFX1200-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc:199; GFX1200: ; %bb.0:200; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0201; GFX1200-NEXT: s_wait_expcnt 0x0202; GFX1200-NEXT: s_wait_samplecnt 0x0203; GFX1200-NEXT: s_wait_bvhcnt 0x0204; GFX1200-NEXT: s_wait_kmcnt 0x0205; GFX1200-NEXT: buffer_atomic_add_f32 v0, v1, s[0:3], s16 offen th:TH_ATOMIC_NT206; GFX1200-NEXT: s_setpc_b64 s[30:31]207;208; GFX1250-LABEL: raw_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc:209; GFX1250: ; %bb.0:210; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0211; GFX1250-NEXT: s_wait_kmcnt 0x0212; GFX1250-NEXT: buffer_atomic_add_f32 v0, v1, s[0:3], s16 offen th:TH_ATOMIC_NT213; GFX1250-NEXT: s_set_pc_i64 s[30:31]214 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 2)215 ret void216}217 218declare float @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f32(float, ptr addrspace(8), i32, i32, i32 immarg)219declare <2 x half> @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.v2f16(<2 x half>, ptr addrspace(8), i32, i32, i32 immarg)220 221attributes #0 = { nounwind }222