688 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=amdgcn -mcpu=verde | FileCheck %s -check-prefix=SI3; RUN: llc < %s -mtriple=amdgcn -mcpu=hawaii | FileCheck %s -check-prefix=GFX74; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1010 | FileCheck %s -check-prefix=GFX105; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1030 | FileCheck %s -check-prefix=GFX10306; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 | FileCheck %s -check-prefix=GFX11007 8; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=verde | FileCheck %s -check-prefix=G_SI9; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=hawaii | FileCheck %s -check-prefix=G_GFX710; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=gfx1010 | FileCheck %s -check-prefix=G_GFX1011; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=gfx1030 | FileCheck %s -check-prefix=G_GFX103012; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=gfx1100 | FileCheck %s -check-prefix=G_GFX110013 14declare float @llvm.amdgcn.raw.ptr.buffer.atomic.fmin.f32(float, ptr addrspace(8), i32, i32, i32 immarg)15declare float @llvm.amdgcn.raw.ptr.buffer.atomic.fmax.f32(float, ptr addrspace(8), i32, i32, i32 immarg)16 17 18define amdgpu_kernel void @raw_ptr_buffer_atomic_min_noret_f32(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {19; SI-LABEL: raw_ptr_buffer_atomic_min_noret_f32:20; SI: ; %bb.0: ; %main_body21; SI-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd22; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x923; SI-NEXT: s_waitcnt lgkmcnt(0)24; SI-NEXT: v_mov_b32_e32 v0, s625; SI-NEXT: v_mov_b32_e32 v1, s726; SI-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen27; SI-NEXT: s_endpgm28;29; GFX7-LABEL: raw_ptr_buffer_atomic_min_noret_f32:30; GFX7: ; %bb.0: ; %main_body31; GFX7-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd32; GFX7-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x933; GFX7-NEXT: s_waitcnt lgkmcnt(0)34; GFX7-NEXT: v_mov_b32_e32 v0, s635; GFX7-NEXT: v_mov_b32_e32 v1, s736; GFX7-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen37; GFX7-NEXT: s_endpgm38;39; GFX10-LABEL: raw_ptr_buffer_atomic_min_noret_f32:40; GFX10: ; %bb.0: ; %main_body41; GFX10-NEXT: s_clause 0x142; GFX10-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x3443; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2444; GFX10-NEXT: s_waitcnt lgkmcnt(0)45; GFX10-NEXT: v_mov_b32_e32 v0, s646; GFX10-NEXT: v_mov_b32_e32 v1, s747; GFX10-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen48; GFX10-NEXT: s_endpgm49;50; GFX1030-LABEL: raw_ptr_buffer_atomic_min_noret_f32:51; GFX1030: ; %bb.0: ; %main_body52; GFX1030-NEXT: s_clause 0x153; GFX1030-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x3454; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2455; GFX1030-NEXT: s_waitcnt lgkmcnt(0)56; GFX1030-NEXT: v_mov_b32_e32 v0, s657; GFX1030-NEXT: v_mov_b32_e32 v1, s758; GFX1030-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen59; GFX1030-NEXT: s_endpgm60;61; GFX1100-LABEL: raw_ptr_buffer_atomic_min_noret_f32:62; GFX1100: ; %bb.0: ; %main_body63; GFX1100-NEXT: s_clause 0x164; GFX1100-NEXT: s_load_b64 s[6:7], s[4:5], 0x3465; GFX1100-NEXT: s_load_b128 s[0:3], s[4:5], 0x2466; GFX1100-NEXT: s_waitcnt lgkmcnt(0)67; GFX1100-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s768; GFX1100-NEXT: buffer_atomic_min_f32 v0, v1, s[0:3], 0 offen69; GFX1100-NEXT: s_endpgm70;71; G_SI-LABEL: raw_ptr_buffer_atomic_min_noret_f32:72; G_SI: ; %bb.0: ; %main_body73; G_SI-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd74; G_SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x975; G_SI-NEXT: s_waitcnt lgkmcnt(0)76; G_SI-NEXT: v_mov_b32_e32 v0, s677; G_SI-NEXT: v_mov_b32_e32 v1, s778; G_SI-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen79; G_SI-NEXT: s_endpgm80;81; G_GFX7-LABEL: raw_ptr_buffer_atomic_min_noret_f32:82; G_GFX7: ; %bb.0: ; %main_body83; G_GFX7-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd84; G_GFX7-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x985; G_GFX7-NEXT: s_waitcnt lgkmcnt(0)86; G_GFX7-NEXT: v_mov_b32_e32 v0, s687; G_GFX7-NEXT: v_mov_b32_e32 v1, s788; G_GFX7-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen89; G_GFX7-NEXT: s_endpgm90;91; G_GFX10-LABEL: raw_ptr_buffer_atomic_min_noret_f32:92; G_GFX10: ; %bb.0: ; %main_body93; G_GFX10-NEXT: s_clause 0x194; G_GFX10-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x3495; G_GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2496; G_GFX10-NEXT: s_waitcnt lgkmcnt(0)97; G_GFX10-NEXT: v_mov_b32_e32 v0, s698; G_GFX10-NEXT: v_mov_b32_e32 v1, s799; G_GFX10-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen100; G_GFX10-NEXT: s_endpgm101;102; G_GFX1030-LABEL: raw_ptr_buffer_atomic_min_noret_f32:103; G_GFX1030: ; %bb.0: ; %main_body104; G_GFX1030-NEXT: s_clause 0x1105; G_GFX1030-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34106; G_GFX1030-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24107; G_GFX1030-NEXT: s_waitcnt lgkmcnt(0)108; G_GFX1030-NEXT: v_mov_b32_e32 v0, s6109; G_GFX1030-NEXT: v_mov_b32_e32 v1, s7110; G_GFX1030-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen111; G_GFX1030-NEXT: s_endpgm112;113; G_GFX1100-LABEL: raw_ptr_buffer_atomic_min_noret_f32:114; G_GFX1100: ; %bb.0: ; %main_body115; G_GFX1100-NEXT: s_clause 0x1116; G_GFX1100-NEXT: s_load_b64 s[6:7], s[4:5], 0x34117; G_GFX1100-NEXT: s_load_b128 s[0:3], s[4:5], 0x24118; G_GFX1100-NEXT: s_waitcnt lgkmcnt(0)119; G_GFX1100-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s7120; G_GFX1100-NEXT: buffer_atomic_min_f32 v0, v1, s[0:3], 0 offen121; G_GFX1100-NEXT: s_endpgm122main_body:123 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmin.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0)124 ret void125}126 127define amdgpu_ps void @raw_ptr_buffer_atomic_min_rtn_f32(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {128; SI-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:129; SI: ; %bb.0: ; %main_body130; SI-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc131; SI-NEXT: s_mov_b32 s3, 0xf000132; SI-NEXT: s_mov_b32 s2, -1133; SI-NEXT: s_waitcnt vmcnt(0)134; SI-NEXT: buffer_store_dword v0, off, s[0:3], 0135; SI-NEXT: s_endpgm136;137; GFX7-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:138; GFX7: ; %bb.0: ; %main_body139; GFX7-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc140; GFX7-NEXT: s_mov_b32 s3, 0xf000141; GFX7-NEXT: s_mov_b32 s2, -1142; GFX7-NEXT: s_waitcnt vmcnt(0)143; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 0144; GFX7-NEXT: s_endpgm145;146; GFX10-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:147; GFX10: ; %bb.0: ; %main_body148; GFX10-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc149; GFX10-NEXT: s_waitcnt vmcnt(0)150; GFX10-NEXT: global_store_dword v[0:1], v0, off151; GFX10-NEXT: s_endpgm152;153; GFX1030-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:154; GFX1030: ; %bb.0: ; %main_body155; GFX1030-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc156; GFX1030-NEXT: s_waitcnt vmcnt(0)157; GFX1030-NEXT: global_store_dword v[0:1], v0, off158; GFX1030-NEXT: s_endpgm159;160; GFX1100-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:161; GFX1100: ; %bb.0: ; %main_body162; GFX1100-NEXT: buffer_atomic_min_f32 v0, v1, s[0:3], 0 offen glc163; GFX1100-NEXT: s_waitcnt vmcnt(0)164; GFX1100-NEXT: global_store_b32 v[0:1], v0, off165; GFX1100-NEXT: s_endpgm166;167; G_SI-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:168; G_SI: ; %bb.0: ; %main_body169; G_SI-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc170; G_SI-NEXT: s_mov_b32 s2, -1171; G_SI-NEXT: s_mov_b32 s3, 0xf000172; G_SI-NEXT: s_waitcnt vmcnt(0)173; G_SI-NEXT: buffer_store_dword v0, off, s[0:3], 0174; G_SI-NEXT: s_endpgm175;176; G_GFX7-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:177; G_GFX7: ; %bb.0: ; %main_body178; G_GFX7-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc179; G_GFX7-NEXT: s_mov_b32 s2, -1180; G_GFX7-NEXT: s_mov_b32 s3, 0xf000181; G_GFX7-NEXT: s_waitcnt vmcnt(0)182; G_GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 0183; G_GFX7-NEXT: s_endpgm184;185; G_GFX10-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:186; G_GFX10: ; %bb.0: ; %main_body187; G_GFX10-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc188; G_GFX10-NEXT: s_waitcnt vmcnt(0)189; G_GFX10-NEXT: global_store_dword v[0:1], v0, off190; G_GFX10-NEXT: s_endpgm191;192; G_GFX1030-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:193; G_GFX1030: ; %bb.0: ; %main_body194; G_GFX1030-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc195; G_GFX1030-NEXT: s_waitcnt vmcnt(0)196; G_GFX1030-NEXT: global_store_dword v[0:1], v0, off197; G_GFX1030-NEXT: s_endpgm198;199; G_GFX1100-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:200; G_GFX1100: ; %bb.0: ; %main_body201; G_GFX1100-NEXT: buffer_atomic_min_f32 v0, v1, s[0:3], 0 offen glc202; G_GFX1100-NEXT: s_waitcnt vmcnt(0)203; G_GFX1100-NEXT: global_store_b32 v[0:1], v0, off204; G_GFX1100-NEXT: s_endpgm205main_body:206 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmin.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0)207 store float %ret, ptr addrspace(1) poison208 ret void209}210 211define amdgpu_kernel void @raw_ptr_buffer_atomic_min_rtn_f32_off4_slc(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex, ptr addrspace(3) %out) {212; SI-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:213; SI: ; %bb.0: ; %main_body214; SI-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd215; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9216; SI-NEXT: s_mov_b32 m0, -1217; SI-NEXT: s_waitcnt lgkmcnt(0)218; SI-NEXT: v_mov_b32_e32 v0, s6219; SI-NEXT: v_mov_b32_e32 v1, s7220; SI-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 4 offen glc slc221; SI-NEXT: s_load_dword s0, s[4:5], 0xf222; SI-NEXT: s_waitcnt lgkmcnt(0)223; SI-NEXT: v_mov_b32_e32 v1, s0224; SI-NEXT: s_waitcnt vmcnt(0)225; SI-NEXT: ds_write_b32 v1, v0226; SI-NEXT: s_endpgm227;228; GFX7-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:229; GFX7: ; %bb.0: ; %main_body230; GFX7-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9231; GFX7-NEXT: s_mov_b32 m0, -1232; GFX7-NEXT: s_waitcnt lgkmcnt(0)233; GFX7-NEXT: v_mov_b32_e32 v0, s4234; GFX7-NEXT: v_mov_b32_e32 v1, s5235; GFX7-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 4 offen glc slc236; GFX7-NEXT: v_mov_b32_e32 v1, s6237; GFX7-NEXT: s_waitcnt vmcnt(0)238; GFX7-NEXT: ds_write_b32 v1, v0239; GFX7-NEXT: s_endpgm240;241; GFX10-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:242; GFX10: ; %bb.0: ; %main_body243; GFX10-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24244; GFX10-NEXT: s_waitcnt lgkmcnt(0)245; GFX10-NEXT: v_mov_b32_e32 v0, s12246; GFX10-NEXT: v_mov_b32_e32 v1, s13247; GFX10-NEXT: buffer_atomic_fmin v0, v1, s[8:11], 4 offen glc slc248; GFX10-NEXT: v_mov_b32_e32 v1, s14249; GFX10-NEXT: s_waitcnt vmcnt(0)250; GFX10-NEXT: ds_write_b32 v1, v0251; GFX10-NEXT: s_endpgm252;253; GFX1030-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:254; GFX1030: ; %bb.0: ; %main_body255; GFX1030-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x24256; GFX1030-NEXT: s_waitcnt lgkmcnt(0)257; GFX1030-NEXT: v_mov_b32_e32 v0, s4258; GFX1030-NEXT: v_mov_b32_e32 v1, s5259; GFX1030-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 4 offen glc slc260; GFX1030-NEXT: v_mov_b32_e32 v1, s6261; GFX1030-NEXT: s_waitcnt vmcnt(0)262; GFX1030-NEXT: ds_write_b32 v1, v0263; GFX1030-NEXT: s_endpgm264;265; GFX1100-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:266; GFX1100: ; %bb.0: ; %main_body267; GFX1100-NEXT: s_load_b256 s[0:7], s[4:5], 0x24268; GFX1100-NEXT: s_waitcnt lgkmcnt(0)269; GFX1100-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5270; GFX1100-NEXT: buffer_atomic_min_f32 v0, v1, s[0:3], 4 offen glc slc271; GFX1100-NEXT: v_mov_b32_e32 v1, s6272; GFX1100-NEXT: s_waitcnt vmcnt(0)273; GFX1100-NEXT: ds_store_b32 v1, v0274; GFX1100-NEXT: s_endpgm275;276; G_SI-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:277; G_SI: ; %bb.0: ; %main_body278; G_SI-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd279; G_SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9280; G_SI-NEXT: s_mov_b32 m0, -1281; G_SI-NEXT: s_waitcnt lgkmcnt(0)282; G_SI-NEXT: v_mov_b32_e32 v0, s6283; G_SI-NEXT: v_mov_b32_e32 v1, s7284; G_SI-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 4 offen glc slc285; G_SI-NEXT: s_load_dword s0, s[4:5], 0xf286; G_SI-NEXT: s_waitcnt lgkmcnt(0)287; G_SI-NEXT: v_mov_b32_e32 v1, s0288; G_SI-NEXT: s_waitcnt vmcnt(0)289; G_SI-NEXT: ds_write_b32 v1, v0290; G_SI-NEXT: s_endpgm291;292; G_GFX7-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:293; G_GFX7: ; %bb.0: ; %main_body294; G_GFX7-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd295; G_GFX7-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9296; G_GFX7-NEXT: s_mov_b32 m0, -1297; G_GFX7-NEXT: s_waitcnt lgkmcnt(0)298; G_GFX7-NEXT: v_mov_b32_e32 v0, s6299; G_GFX7-NEXT: v_mov_b32_e32 v1, s7300; G_GFX7-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 4 offen glc slc301; G_GFX7-NEXT: s_load_dword s0, s[4:5], 0xf302; G_GFX7-NEXT: s_waitcnt lgkmcnt(0)303; G_GFX7-NEXT: v_mov_b32_e32 v1, s0304; G_GFX7-NEXT: s_waitcnt vmcnt(0)305; G_GFX7-NEXT: ds_write_b32 v1, v0306; G_GFX7-NEXT: s_endpgm307;308; G_GFX10-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:309; G_GFX10: ; %bb.0: ; %main_body310; G_GFX10-NEXT: s_clause 0x1311; G_GFX10-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34312; G_GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24313; G_GFX10-NEXT: s_waitcnt lgkmcnt(0)314; G_GFX10-NEXT: v_mov_b32_e32 v0, s6315; G_GFX10-NEXT: v_mov_b32_e32 v1, s7316; G_GFX10-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 4 offen glc slc317; G_GFX10-NEXT: s_waitcnt_depctr depctr_vm_vsrc(0)318; G_GFX10-NEXT: s_load_dword s0, s[4:5], 0x3c319; G_GFX10-NEXT: s_waitcnt lgkmcnt(0)320; G_GFX10-NEXT: v_mov_b32_e32 v1, s0321; G_GFX10-NEXT: s_waitcnt vmcnt(0)322; G_GFX10-NEXT: ds_write_b32 v1, v0323; G_GFX10-NEXT: s_endpgm324;325; G_GFX1030-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:326; G_GFX1030: ; %bb.0: ; %main_body327; G_GFX1030-NEXT: s_clause 0x1328; G_GFX1030-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34329; G_GFX1030-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24330; G_GFX1030-NEXT: s_waitcnt lgkmcnt(0)331; G_GFX1030-NEXT: v_mov_b32_e32 v0, s6332; G_GFX1030-NEXT: v_mov_b32_e32 v1, s7333; G_GFX1030-NEXT: buffer_atomic_fmin v0, v1, s[0:3], 4 offen glc slc334; G_GFX1030-NEXT: s_load_dword s0, s[4:5], 0x3c335; G_GFX1030-NEXT: s_waitcnt lgkmcnt(0)336; G_GFX1030-NEXT: v_mov_b32_e32 v1, s0337; G_GFX1030-NEXT: s_waitcnt vmcnt(0)338; G_GFX1030-NEXT: ds_write_b32 v1, v0339; G_GFX1030-NEXT: s_endpgm340;341; G_GFX1100-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:342; G_GFX1100: ; %bb.0: ; %main_body343; G_GFX1100-NEXT: s_clause 0x1344; G_GFX1100-NEXT: s_load_b64 s[6:7], s[4:5], 0x34345; G_GFX1100-NEXT: s_load_b128 s[0:3], s[4:5], 0x24346; G_GFX1100-NEXT: s_waitcnt lgkmcnt(0)347; G_GFX1100-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s7348; G_GFX1100-NEXT: buffer_atomic_min_f32 v0, v1, s[0:3], 4 offen glc slc349; G_GFX1100-NEXT: s_load_b32 s0, s[4:5], 0x3c350; G_GFX1100-NEXT: s_waitcnt lgkmcnt(0)351; G_GFX1100-NEXT: v_mov_b32_e32 v1, s0352; G_GFX1100-NEXT: s_waitcnt vmcnt(0)353; G_GFX1100-NEXT: ds_store_b32 v1, v0354; G_GFX1100-NEXT: s_endpgm355; GFX1010-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:356main_body:357 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmin.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 4, i32 2)358 store float %ret, ptr addrspace(3) %out, align 8359 ret void360}361 362define amdgpu_kernel void @raw_ptr_buffer_atomic_max_noret_f32(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {363; SI-LABEL: raw_ptr_buffer_atomic_max_noret_f32:364; SI: ; %bb.0: ; %main_body365; SI-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd366; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9367; SI-NEXT: s_waitcnt lgkmcnt(0)368; SI-NEXT: v_mov_b32_e32 v0, s6369; SI-NEXT: v_mov_b32_e32 v1, s7370; SI-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen371; SI-NEXT: s_endpgm372;373; GFX7-LABEL: raw_ptr_buffer_atomic_max_noret_f32:374; GFX7: ; %bb.0: ; %main_body375; GFX7-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd376; GFX7-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9377; GFX7-NEXT: s_waitcnt lgkmcnt(0)378; GFX7-NEXT: v_mov_b32_e32 v0, s6379; GFX7-NEXT: v_mov_b32_e32 v1, s7380; GFX7-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen381; GFX7-NEXT: s_endpgm382;383; GFX10-LABEL: raw_ptr_buffer_atomic_max_noret_f32:384; GFX10: ; %bb.0: ; %main_body385; GFX10-NEXT: s_clause 0x1386; GFX10-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34387; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24388; GFX10-NEXT: s_waitcnt lgkmcnt(0)389; GFX10-NEXT: v_mov_b32_e32 v0, s6390; GFX10-NEXT: v_mov_b32_e32 v1, s7391; GFX10-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen392; GFX10-NEXT: s_endpgm393;394; GFX1030-LABEL: raw_ptr_buffer_atomic_max_noret_f32:395; GFX1030: ; %bb.0: ; %main_body396; GFX1030-NEXT: s_clause 0x1397; GFX1030-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34398; GFX1030-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24399; GFX1030-NEXT: s_waitcnt lgkmcnt(0)400; GFX1030-NEXT: v_mov_b32_e32 v0, s6401; GFX1030-NEXT: v_mov_b32_e32 v1, s7402; GFX1030-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen403; GFX1030-NEXT: s_endpgm404;405; GFX1100-LABEL: raw_ptr_buffer_atomic_max_noret_f32:406; GFX1100: ; %bb.0: ; %main_body407; GFX1100-NEXT: s_clause 0x1408; GFX1100-NEXT: s_load_b64 s[6:7], s[4:5], 0x34409; GFX1100-NEXT: s_load_b128 s[0:3], s[4:5], 0x24410; GFX1100-NEXT: s_waitcnt lgkmcnt(0)411; GFX1100-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s7412; GFX1100-NEXT: buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen413; GFX1100-NEXT: s_endpgm414;415; G_SI-LABEL: raw_ptr_buffer_atomic_max_noret_f32:416; G_SI: ; %bb.0: ; %main_body417; G_SI-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd418; G_SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9419; G_SI-NEXT: s_waitcnt lgkmcnt(0)420; G_SI-NEXT: v_mov_b32_e32 v0, s6421; G_SI-NEXT: v_mov_b32_e32 v1, s7422; G_SI-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen423; G_SI-NEXT: s_endpgm424;425; G_GFX7-LABEL: raw_ptr_buffer_atomic_max_noret_f32:426; G_GFX7: ; %bb.0: ; %main_body427; G_GFX7-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0xd428; G_GFX7-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9429; G_GFX7-NEXT: s_waitcnt lgkmcnt(0)430; G_GFX7-NEXT: v_mov_b32_e32 v0, s6431; G_GFX7-NEXT: v_mov_b32_e32 v1, s7432; G_GFX7-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen433; G_GFX7-NEXT: s_endpgm434;435; G_GFX10-LABEL: raw_ptr_buffer_atomic_max_noret_f32:436; G_GFX10: ; %bb.0: ; %main_body437; G_GFX10-NEXT: s_clause 0x1438; G_GFX10-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34439; G_GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24440; G_GFX10-NEXT: s_waitcnt lgkmcnt(0)441; G_GFX10-NEXT: v_mov_b32_e32 v0, s6442; G_GFX10-NEXT: v_mov_b32_e32 v1, s7443; G_GFX10-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen444; G_GFX10-NEXT: s_endpgm445;446; G_GFX1030-LABEL: raw_ptr_buffer_atomic_max_noret_f32:447; G_GFX1030: ; %bb.0: ; %main_body448; G_GFX1030-NEXT: s_clause 0x1449; G_GFX1030-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34450; G_GFX1030-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24451; G_GFX1030-NEXT: s_waitcnt lgkmcnt(0)452; G_GFX1030-NEXT: v_mov_b32_e32 v0, s6453; G_GFX1030-NEXT: v_mov_b32_e32 v1, s7454; G_GFX1030-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen455; G_GFX1030-NEXT: s_endpgm456;457; G_GFX1100-LABEL: raw_ptr_buffer_atomic_max_noret_f32:458; G_GFX1100: ; %bb.0: ; %main_body459; G_GFX1100-NEXT: s_clause 0x1460; G_GFX1100-NEXT: s_load_b64 s[6:7], s[4:5], 0x34461; G_GFX1100-NEXT: s_load_b128 s[0:3], s[4:5], 0x24462; G_GFX1100-NEXT: s_waitcnt lgkmcnt(0)463; G_GFX1100-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s7464; G_GFX1100-NEXT: buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen465; G_GFX1100-NEXT: s_endpgm466main_body:467 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmax.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0)468 ret void469}470 471define amdgpu_ps void @raw_ptr_buffer_atomic_max_rtn_f32(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {472; SI-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:473; SI: ; %bb.0: ; %main_body474; SI-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc475; SI-NEXT: s_mov_b32 s3, 0xf000476; SI-NEXT: s_mov_b32 s2, -1477; SI-NEXT: s_waitcnt vmcnt(0)478; SI-NEXT: buffer_store_dword v0, off, s[0:3], 0479; SI-NEXT: s_endpgm480;481; GFX7-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:482; GFX7: ; %bb.0: ; %main_body483; GFX7-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc484; GFX7-NEXT: s_mov_b32 s3, 0xf000485; GFX7-NEXT: s_mov_b32 s2, -1486; GFX7-NEXT: s_waitcnt vmcnt(0)487; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 0488; GFX7-NEXT: s_endpgm489;490; GFX10-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:491; GFX10: ; %bb.0: ; %main_body492; GFX10-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc493; GFX10-NEXT: s_waitcnt vmcnt(0)494; GFX10-NEXT: global_store_dword v[0:1], v0, off495; GFX10-NEXT: s_endpgm496;497; GFX1030-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:498; GFX1030: ; %bb.0: ; %main_body499; GFX1030-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc500; GFX1030-NEXT: s_waitcnt vmcnt(0)501; GFX1030-NEXT: global_store_dword v[0:1], v0, off502; GFX1030-NEXT: s_endpgm503;504; GFX1100-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:505; GFX1100: ; %bb.0: ; %main_body506; GFX1100-NEXT: buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen glc507; GFX1100-NEXT: s_waitcnt vmcnt(0)508; GFX1100-NEXT: global_store_b32 v[0:1], v0, off509; GFX1100-NEXT: s_endpgm510;511; G_SI-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:512; G_SI: ; %bb.0: ; %main_body513; G_SI-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc514; G_SI-NEXT: s_mov_b32 s2, -1515; G_SI-NEXT: s_mov_b32 s3, 0xf000516; G_SI-NEXT: s_waitcnt vmcnt(0)517; G_SI-NEXT: buffer_store_dword v0, off, s[0:3], 0518; G_SI-NEXT: s_endpgm519;520; G_GFX7-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:521; G_GFX7: ; %bb.0: ; %main_body522; G_GFX7-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc523; G_GFX7-NEXT: s_mov_b32 s2, -1524; G_GFX7-NEXT: s_mov_b32 s3, 0xf000525; G_GFX7-NEXT: s_waitcnt vmcnt(0)526; G_GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 0527; G_GFX7-NEXT: s_endpgm528;529; G_GFX10-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:530; G_GFX10: ; %bb.0: ; %main_body531; G_GFX10-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc532; G_GFX10-NEXT: s_waitcnt vmcnt(0)533; G_GFX10-NEXT: global_store_dword v[0:1], v0, off534; G_GFX10-NEXT: s_endpgm535;536; G_GFX1030-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:537; G_GFX1030: ; %bb.0: ; %main_body538; G_GFX1030-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc539; G_GFX1030-NEXT: s_waitcnt vmcnt(0)540; G_GFX1030-NEXT: global_store_dword v[0:1], v0, off541; G_GFX1030-NEXT: s_endpgm542;543; G_GFX1100-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:544; G_GFX1100: ; %bb.0: ; %main_body545; G_GFX1100-NEXT: buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen glc546; G_GFX1100-NEXT: s_waitcnt vmcnt(0)547; G_GFX1100-NEXT: global_store_b32 v[0:1], v0, off548; G_GFX1100-NEXT: s_endpgm549main_body:550 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmax.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0)551 store float %ret, ptr addrspace(1) poison552 ret void553}554 555define amdgpu_kernel void @raw_ptr_buffer_atomic_max_rtn_f32_off4_slc(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex, ptr addrspace(1) %out) {556; SI-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:557; SI: ; %bb.0: ; %main_body558; SI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9559; SI-NEXT: s_waitcnt lgkmcnt(0)560; SI-NEXT: v_mov_b32_e32 v0, s4561; SI-NEXT: v_mov_b32_e32 v1, s5562; SI-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc563; SI-NEXT: s_mov_b32 s3, 0xf000564; SI-NEXT: s_mov_b32 s2, -1565; SI-NEXT: s_mov_b32 s0, s6566; SI-NEXT: s_mov_b32 s1, s7567; SI-NEXT: s_waitcnt vmcnt(0)568; SI-NEXT: buffer_store_dword v0, off, s[0:3], 0569; SI-NEXT: s_endpgm570;571; GFX7-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:572; GFX7: ; %bb.0: ; %main_body573; GFX7-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9574; GFX7-NEXT: s_waitcnt lgkmcnt(0)575; GFX7-NEXT: v_mov_b32_e32 v0, s4576; GFX7-NEXT: v_mov_b32_e32 v1, s5577; GFX7-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc578; GFX7-NEXT: s_mov_b32 s3, 0xf000579; GFX7-NEXT: s_mov_b32 s2, -1580; GFX7-NEXT: s_mov_b32 s0, s6581; GFX7-NEXT: s_mov_b32 s1, s7582; GFX7-NEXT: s_waitcnt vmcnt(0)583; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 0584; GFX7-NEXT: s_endpgm585;586; GFX10-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:587; GFX10: ; %bb.0: ; %main_body588; GFX10-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24589; GFX10-NEXT: s_waitcnt lgkmcnt(0)590; GFX10-NEXT: v_mov_b32_e32 v0, s12591; GFX10-NEXT: v_mov_b32_e32 v1, s13592; GFX10-NEXT: buffer_atomic_fmax v0, v1, s[8:11], 4 offen glc slc593; GFX10-NEXT: v_mov_b32_e32 v1, 0594; GFX10-NEXT: s_waitcnt vmcnt(0)595; GFX10-NEXT: global_store_dword v1, v0, s[14:15]596; GFX10-NEXT: s_endpgm597;598; GFX1030-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:599; GFX1030: ; %bb.0: ; %main_body600; GFX1030-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x24601; GFX1030-NEXT: s_waitcnt lgkmcnt(0)602; GFX1030-NEXT: v_mov_b32_e32 v0, s4603; GFX1030-NEXT: v_mov_b32_e32 v1, s5604; GFX1030-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc605; GFX1030-NEXT: v_mov_b32_e32 v1, 0606; GFX1030-NEXT: s_waitcnt vmcnt(0)607; GFX1030-NEXT: global_store_dword v1, v0, s[6:7]608; GFX1030-NEXT: s_endpgm609;610; GFX1100-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:611; GFX1100: ; %bb.0: ; %main_body612; GFX1100-NEXT: s_load_b256 s[0:7], s[4:5], 0x24613; GFX1100-NEXT: s_waitcnt lgkmcnt(0)614; GFX1100-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5615; GFX1100-NEXT: buffer_atomic_max_f32 v0, v1, s[0:3], 4 offen glc slc616; GFX1100-NEXT: v_mov_b32_e32 v1, 0617; GFX1100-NEXT: s_waitcnt vmcnt(0)618; GFX1100-NEXT: global_store_b32 v1, v0, s[6:7]619; GFX1100-NEXT: s_endpgm620;621; G_SI-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:622; G_SI: ; %bb.0: ; %main_body623; G_SI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9624; G_SI-NEXT: s_waitcnt lgkmcnt(0)625; G_SI-NEXT: v_mov_b32_e32 v0, s4626; G_SI-NEXT: v_mov_b32_e32 v1, s5627; G_SI-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc628; G_SI-NEXT: s_mov_b32 s2, -1629; G_SI-NEXT: s_mov_b32 s3, 0xf000630; G_SI-NEXT: s_mov_b64 s[0:1], s[6:7]631; G_SI-NEXT: s_waitcnt vmcnt(0)632; G_SI-NEXT: buffer_store_dword v0, off, s[0:3], 0633; G_SI-NEXT: s_endpgm634;635; G_GFX7-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:636; G_GFX7: ; %bb.0: ; %main_body637; G_GFX7-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9638; G_GFX7-NEXT: s_waitcnt lgkmcnt(0)639; G_GFX7-NEXT: v_mov_b32_e32 v0, s4640; G_GFX7-NEXT: v_mov_b32_e32 v1, s5641; G_GFX7-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc642; G_GFX7-NEXT: s_mov_b32 s2, -1643; G_GFX7-NEXT: s_mov_b32 s3, 0xf000644; G_GFX7-NEXT: s_mov_b64 s[0:1], s[6:7]645; G_GFX7-NEXT: s_waitcnt vmcnt(0)646; G_GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 0647; G_GFX7-NEXT: s_endpgm648;649; G_GFX10-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:650; G_GFX10: ; %bb.0: ; %main_body651; G_GFX10-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24652; G_GFX10-NEXT: s_waitcnt lgkmcnt(0)653; G_GFX10-NEXT: v_mov_b32_e32 v0, s12654; G_GFX10-NEXT: v_mov_b32_e32 v1, s13655; G_GFX10-NEXT: buffer_atomic_fmax v0, v1, s[8:11], 4 offen glc slc656; G_GFX10-NEXT: v_mov_b32_e32 v1, 0657; G_GFX10-NEXT: s_waitcnt vmcnt(0)658; G_GFX10-NEXT: global_store_dword v1, v0, s[14:15]659; G_GFX10-NEXT: s_endpgm660;661; G_GFX1030-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:662; G_GFX1030: ; %bb.0: ; %main_body663; G_GFX1030-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x24664; G_GFX1030-NEXT: s_waitcnt lgkmcnt(0)665; G_GFX1030-NEXT: v_mov_b32_e32 v0, s4666; G_GFX1030-NEXT: v_mov_b32_e32 v1, s5667; G_GFX1030-NEXT: buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc668; G_GFX1030-NEXT: v_mov_b32_e32 v1, 0669; G_GFX1030-NEXT: s_waitcnt vmcnt(0)670; G_GFX1030-NEXT: global_store_dword v1, v0, s[6:7]671; G_GFX1030-NEXT: s_endpgm672;673; G_GFX1100-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:674; G_GFX1100: ; %bb.0: ; %main_body675; G_GFX1100-NEXT: s_load_b256 s[0:7], s[4:5], 0x24676; G_GFX1100-NEXT: s_waitcnt lgkmcnt(0)677; G_GFX1100-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5678; G_GFX1100-NEXT: buffer_atomic_max_f32 v0, v1, s[0:3], 4 offen glc slc679; G_GFX1100-NEXT: v_mov_b32_e32 v1, 0680; G_GFX1100-NEXT: s_waitcnt vmcnt(0)681; G_GFX1100-NEXT: global_store_b32 v1, v0, s[6:7]682; G_GFX1100-NEXT: s_endpgm683main_body:684 %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmax.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 4, i32 2)685 store float %ret, ptr addrspace(1) %out, align 8686 ret void687}688