2143 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1200 < %s | FileCheck -check-prefix=GFX12 %s3; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx942 < %s | FileCheck -check-prefix=GFX942 %s4; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11 %s5; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s6; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx90a < %s | FileCheck -check-prefix=GFX90A %s7; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx908 < %s | FileCheck -check-prefix=GFX908 %s8; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=tonga < %s | FileCheck -check-prefix=GFX8 %s9; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=hawaii < %s | FileCheck -check-prefix=GFX7 %s10 11; TODO: Delete this and add run lines to use *-atomicrmw-fmax.ll tests12 13define float @local_atomic_fmax_ret_f32(ptr addrspace(3) %ptr, float %val) {14; GFX12-LABEL: local_atomic_fmax_ret_f32:15; GFX12: ; %bb.0:16; GFX12-NEXT: s_wait_loadcnt_dscnt 0x017; GFX12-NEXT: s_wait_expcnt 0x018; GFX12-NEXT: s_wait_samplecnt 0x019; GFX12-NEXT: s_wait_bvhcnt 0x020; GFX12-NEXT: s_wait_kmcnt 0x021; GFX12-NEXT: s_wait_storecnt 0x022; GFX12-NEXT: ds_max_num_rtn_f32 v0, v0, v123; GFX12-NEXT: s_wait_dscnt 0x024; GFX12-NEXT: global_inv scope:SCOPE_SE25; GFX12-NEXT: s_wait_loadcnt 0x026; GFX12-NEXT: s_setpc_b64 s[30:31]27;28; GFX942-LABEL: local_atomic_fmax_ret_f32:29; GFX942: ; %bb.0:30; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)31; GFX942-NEXT: ds_max_rtn_f32 v0, v0, v132; GFX942-NEXT: s_waitcnt lgkmcnt(0)33; GFX942-NEXT: s_setpc_b64 s[30:31]34;35; GFX11-LABEL: local_atomic_fmax_ret_f32:36; GFX11: ; %bb.0:37; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)38; GFX11-NEXT: s_waitcnt_vscnt null, 0x039; GFX11-NEXT: ds_max_rtn_f32 v0, v0, v140; GFX11-NEXT: s_waitcnt lgkmcnt(0)41; GFX11-NEXT: buffer_gl0_inv42; GFX11-NEXT: s_setpc_b64 s[30:31]43;44; GFX10-LABEL: local_atomic_fmax_ret_f32:45; GFX10: ; %bb.0:46; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)47; GFX10-NEXT: s_waitcnt_vscnt null, 0x048; GFX10-NEXT: ds_max_rtn_f32 v0, v0, v149; GFX10-NEXT: s_waitcnt lgkmcnt(0)50; GFX10-NEXT: buffer_gl0_inv51; GFX10-NEXT: s_setpc_b64 s[30:31]52;53; GFX90A-LABEL: local_atomic_fmax_ret_f32:54; GFX90A: ; %bb.0:55; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)56; GFX90A-NEXT: ds_max_rtn_f32 v0, v0, v157; GFX90A-NEXT: s_waitcnt lgkmcnt(0)58; GFX90A-NEXT: s_setpc_b64 s[30:31]59;60; GFX908-LABEL: local_atomic_fmax_ret_f32:61; GFX908: ; %bb.0:62; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)63; GFX908-NEXT: ds_max_rtn_f32 v0, v0, v164; GFX908-NEXT: s_waitcnt lgkmcnt(0)65; GFX908-NEXT: s_setpc_b64 s[30:31]66;67; GFX8-LABEL: local_atomic_fmax_ret_f32:68; GFX8: ; %bb.0:69; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)70; GFX8-NEXT: s_mov_b32 m0, -171; GFX8-NEXT: ds_max_rtn_f32 v0, v0, v172; GFX8-NEXT: s_waitcnt lgkmcnt(0)73; GFX8-NEXT: s_setpc_b64 s[30:31]74;75; GFX7-LABEL: local_atomic_fmax_ret_f32:76; GFX7: ; %bb.0:77; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78; GFX7-NEXT: s_mov_b32 m0, -179; GFX7-NEXT: ds_max_rtn_f32 v0, v0, v180; GFX7-NEXT: s_waitcnt lgkmcnt(0)81; GFX7-NEXT: s_setpc_b64 s[30:31]82 %result = atomicrmw fmax ptr addrspace(3) %ptr, float %val seq_cst83 ret float %result84}85 86define void @local_atomic_fmax_noret_f32(ptr addrspace(3) %ptr, float %val) {87; GFX12-LABEL: local_atomic_fmax_noret_f32:88; GFX12: ; %bb.0:89; GFX12-NEXT: s_wait_loadcnt_dscnt 0x090; GFX12-NEXT: s_wait_expcnt 0x091; GFX12-NEXT: s_wait_samplecnt 0x092; GFX12-NEXT: s_wait_bvhcnt 0x093; GFX12-NEXT: s_wait_kmcnt 0x094; GFX12-NEXT: s_wait_storecnt 0x095; GFX12-NEXT: ds_max_num_f32 v0, v196; GFX12-NEXT: s_wait_dscnt 0x097; GFX12-NEXT: global_inv scope:SCOPE_SE98; GFX12-NEXT: s_wait_loadcnt 0x099; GFX12-NEXT: s_setpc_b64 s[30:31]100;101; GFX942-LABEL: local_atomic_fmax_noret_f32:102; GFX942: ; %bb.0:103; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)104; GFX942-NEXT: ds_max_f32 v0, v1105; GFX942-NEXT: s_waitcnt lgkmcnt(0)106; GFX942-NEXT: s_setpc_b64 s[30:31]107;108; GFX11-LABEL: local_atomic_fmax_noret_f32:109; GFX11: ; %bb.0:110; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)111; GFX11-NEXT: s_waitcnt_vscnt null, 0x0112; GFX11-NEXT: ds_max_f32 v0, v1113; GFX11-NEXT: s_waitcnt lgkmcnt(0)114; GFX11-NEXT: buffer_gl0_inv115; GFX11-NEXT: s_setpc_b64 s[30:31]116;117; GFX10-LABEL: local_atomic_fmax_noret_f32:118; GFX10: ; %bb.0:119; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)120; GFX10-NEXT: s_waitcnt_vscnt null, 0x0121; GFX10-NEXT: ds_max_f32 v0, v1122; GFX10-NEXT: s_waitcnt lgkmcnt(0)123; GFX10-NEXT: buffer_gl0_inv124; GFX10-NEXT: s_setpc_b64 s[30:31]125;126; GFX90A-LABEL: local_atomic_fmax_noret_f32:127; GFX90A: ; %bb.0:128; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)129; GFX90A-NEXT: ds_max_f32 v0, v1130; GFX90A-NEXT: s_waitcnt lgkmcnt(0)131; GFX90A-NEXT: s_setpc_b64 s[30:31]132;133; GFX908-LABEL: local_atomic_fmax_noret_f32:134; GFX908: ; %bb.0:135; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)136; GFX908-NEXT: ds_max_f32 v0, v1137; GFX908-NEXT: s_waitcnt lgkmcnt(0)138; GFX908-NEXT: s_setpc_b64 s[30:31]139;140; GFX8-LABEL: local_atomic_fmax_noret_f32:141; GFX8: ; %bb.0:142; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)143; GFX8-NEXT: s_mov_b32 m0, -1144; GFX8-NEXT: ds_max_f32 v0, v1145; GFX8-NEXT: s_waitcnt lgkmcnt(0)146; GFX8-NEXT: s_setpc_b64 s[30:31]147;148; GFX7-LABEL: local_atomic_fmax_noret_f32:149; GFX7: ; %bb.0:150; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)151; GFX7-NEXT: s_mov_b32 m0, -1152; GFX7-NEXT: ds_max_f32 v0, v1153; GFX7-NEXT: s_waitcnt lgkmcnt(0)154; GFX7-NEXT: s_setpc_b64 s[30:31]155 %unused = atomicrmw fmax ptr addrspace(3) %ptr, float %val seq_cst156 ret void157}158 159define double @local_atomic_fmax_ret_f64(ptr addrspace(3) %ptr, double %val) {160; GFX12-LABEL: local_atomic_fmax_ret_f64:161; GFX12: ; %bb.0:162; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0163; GFX12-NEXT: s_wait_expcnt 0x0164; GFX12-NEXT: s_wait_samplecnt 0x0165; GFX12-NEXT: s_wait_bvhcnt 0x0166; GFX12-NEXT: s_wait_kmcnt 0x0167; GFX12-NEXT: s_wait_storecnt 0x0168; GFX12-NEXT: ds_max_num_rtn_f64 v[0:1], v0, v[1:2]169; GFX12-NEXT: s_wait_dscnt 0x0170; GFX12-NEXT: global_inv scope:SCOPE_SE171; GFX12-NEXT: s_wait_loadcnt 0x0172; GFX12-NEXT: s_setpc_b64 s[30:31]173;174; GFX942-LABEL: local_atomic_fmax_ret_f64:175; GFX942: ; %bb.0:176; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)177; GFX942-NEXT: v_mov_b32_e32 v4, v1178; GFX942-NEXT: v_mov_b32_e32 v5, v2179; GFX942-NEXT: ds_max_rtn_f64 v[0:1], v0, v[4:5]180; GFX942-NEXT: s_waitcnt lgkmcnt(0)181; GFX942-NEXT: s_setpc_b64 s[30:31]182;183; GFX11-LABEL: local_atomic_fmax_ret_f64:184; GFX11: ; %bb.0:185; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)186; GFX11-NEXT: s_waitcnt_vscnt null, 0x0187; GFX11-NEXT: ds_max_rtn_f64 v[0:1], v0, v[1:2]188; GFX11-NEXT: s_waitcnt lgkmcnt(0)189; GFX11-NEXT: buffer_gl0_inv190; GFX11-NEXT: s_setpc_b64 s[30:31]191;192; GFX10-LABEL: local_atomic_fmax_ret_f64:193; GFX10: ; %bb.0:194; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)195; GFX10-NEXT: s_waitcnt_vscnt null, 0x0196; GFX10-NEXT: ds_max_rtn_f64 v[0:1], v0, v[1:2]197; GFX10-NEXT: s_waitcnt lgkmcnt(0)198; GFX10-NEXT: buffer_gl0_inv199; GFX10-NEXT: s_setpc_b64 s[30:31]200;201; GFX90A-LABEL: local_atomic_fmax_ret_f64:202; GFX90A: ; %bb.0:203; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)204; GFX90A-NEXT: v_mov_b32_e32 v4, v1205; GFX90A-NEXT: v_mov_b32_e32 v5, v2206; GFX90A-NEXT: ds_max_rtn_f64 v[0:1], v0, v[4:5]207; GFX90A-NEXT: s_waitcnt lgkmcnt(0)208; GFX90A-NEXT: s_setpc_b64 s[30:31]209;210; GFX908-LABEL: local_atomic_fmax_ret_f64:211; GFX908: ; %bb.0:212; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)213; GFX908-NEXT: ds_max_rtn_f64 v[0:1], v0, v[1:2]214; GFX908-NEXT: s_waitcnt lgkmcnt(0)215; GFX908-NEXT: s_setpc_b64 s[30:31]216;217; GFX8-LABEL: local_atomic_fmax_ret_f64:218; GFX8: ; %bb.0:219; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)220; GFX8-NEXT: s_mov_b32 m0, -1221; GFX8-NEXT: ds_max_rtn_f64 v[0:1], v0, v[1:2]222; GFX8-NEXT: s_waitcnt lgkmcnt(0)223; GFX8-NEXT: s_setpc_b64 s[30:31]224;225; GFX7-LABEL: local_atomic_fmax_ret_f64:226; GFX7: ; %bb.0:227; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)228; GFX7-NEXT: s_mov_b32 m0, -1229; GFX7-NEXT: ds_max_rtn_f64 v[0:1], v0, v[1:2]230; GFX7-NEXT: s_waitcnt lgkmcnt(0)231; GFX7-NEXT: s_setpc_b64 s[30:31]232 %result = atomicrmw fmax ptr addrspace(3) %ptr, double %val seq_cst233 ret double %result234}235 236define void @local_atomic_fmax_noret_f64(ptr addrspace(3) %ptr, double %val) {237; GFX12-LABEL: local_atomic_fmax_noret_f64:238; GFX12: ; %bb.0:239; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0240; GFX12-NEXT: s_wait_expcnt 0x0241; GFX12-NEXT: s_wait_samplecnt 0x0242; GFX12-NEXT: s_wait_bvhcnt 0x0243; GFX12-NEXT: s_wait_kmcnt 0x0244; GFX12-NEXT: s_wait_storecnt 0x0245; GFX12-NEXT: ds_max_num_f64 v0, v[1:2]246; GFX12-NEXT: s_wait_dscnt 0x0247; GFX12-NEXT: global_inv scope:SCOPE_SE248; GFX12-NEXT: s_wait_loadcnt 0x0249; GFX12-NEXT: s_setpc_b64 s[30:31]250;251; GFX942-LABEL: local_atomic_fmax_noret_f64:252; GFX942: ; %bb.0:253; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; GFX942-NEXT: v_mov_b32_e32 v4, v1255; GFX942-NEXT: v_mov_b32_e32 v5, v2256; GFX942-NEXT: ds_max_f64 v0, v[4:5]257; GFX942-NEXT: s_waitcnt lgkmcnt(0)258; GFX942-NEXT: s_setpc_b64 s[30:31]259;260; GFX11-LABEL: local_atomic_fmax_noret_f64:261; GFX11: ; %bb.0:262; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)263; GFX11-NEXT: s_waitcnt_vscnt null, 0x0264; GFX11-NEXT: ds_max_f64 v0, v[1:2]265; GFX11-NEXT: s_waitcnt lgkmcnt(0)266; GFX11-NEXT: buffer_gl0_inv267; GFX11-NEXT: s_setpc_b64 s[30:31]268;269; GFX10-LABEL: local_atomic_fmax_noret_f64:270; GFX10: ; %bb.0:271; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)272; GFX10-NEXT: s_waitcnt_vscnt null, 0x0273; GFX10-NEXT: ds_max_f64 v0, v[1:2]274; GFX10-NEXT: s_waitcnt lgkmcnt(0)275; GFX10-NEXT: buffer_gl0_inv276; GFX10-NEXT: s_setpc_b64 s[30:31]277;278; GFX90A-LABEL: local_atomic_fmax_noret_f64:279; GFX90A: ; %bb.0:280; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)281; GFX90A-NEXT: v_mov_b32_e32 v4, v1282; GFX90A-NEXT: v_mov_b32_e32 v5, v2283; GFX90A-NEXT: ds_max_f64 v0, v[4:5]284; GFX90A-NEXT: s_waitcnt lgkmcnt(0)285; GFX90A-NEXT: s_setpc_b64 s[30:31]286;287; GFX908-LABEL: local_atomic_fmax_noret_f64:288; GFX908: ; %bb.0:289; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; GFX908-NEXT: ds_max_f64 v0, v[1:2]291; GFX908-NEXT: s_waitcnt lgkmcnt(0)292; GFX908-NEXT: s_setpc_b64 s[30:31]293;294; GFX8-LABEL: local_atomic_fmax_noret_f64:295; GFX8: ; %bb.0:296; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)297; GFX8-NEXT: s_mov_b32 m0, -1298; GFX8-NEXT: ds_max_f64 v0, v[1:2]299; GFX8-NEXT: s_waitcnt lgkmcnt(0)300; GFX8-NEXT: s_setpc_b64 s[30:31]301;302; GFX7-LABEL: local_atomic_fmax_noret_f64:303; GFX7: ; %bb.0:304; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)305; GFX7-NEXT: s_mov_b32 m0, -1306; GFX7-NEXT: ds_max_f64 v0, v[1:2]307; GFX7-NEXT: s_waitcnt lgkmcnt(0)308; GFX7-NEXT: s_setpc_b64 s[30:31]309 %unused = atomicrmw fmax ptr addrspace(3) %ptr, double %val seq_cst310 ret void311}312 313define float @global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, float %val) {314; GFX12-LABEL: global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:315; GFX12: ; %bb.0:316; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0317; GFX12-NEXT: s_wait_expcnt 0x0318; GFX12-NEXT: s_wait_samplecnt 0x0319; GFX12-NEXT: s_wait_bvhcnt 0x0320; GFX12-NEXT: s_wait_kmcnt 0x0321; GFX12-NEXT: s_wait_storecnt 0x0322; GFX12-NEXT: global_atomic_max_num_f32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_DEV323; GFX12-NEXT: s_wait_loadcnt 0x0324; GFX12-NEXT: global_inv scope:SCOPE_DEV325; GFX12-NEXT: s_wait_loadcnt 0x0326; GFX12-NEXT: s_setpc_b64 s[30:31]327;328; GFX942-LABEL: global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:329; GFX942: ; %bb.0:330; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)331; GFX942-NEXT: global_load_dword v3, v[0:1], off332; GFX942-NEXT: s_mov_b64 s[0:1], 0333; GFX942-NEXT: v_max_f32_e32 v2, v2, v2334; GFX942-NEXT: .LBB4_1: ; %atomicrmw.start335; GFX942-NEXT: ; =>This Inner Loop Header: Depth=1336; GFX942-NEXT: s_waitcnt vmcnt(0)337; GFX942-NEXT: v_mov_b32_e32 v5, v3338; GFX942-NEXT: v_max_f32_e32 v3, v5, v5339; GFX942-NEXT: v_max_f32_e32 v4, v3, v2340; GFX942-NEXT: buffer_wbl2 sc1341; GFX942-NEXT: global_atomic_cmpswap v3, v[0:1], v[4:5], off sc0342; GFX942-NEXT: s_waitcnt vmcnt(0)343; GFX942-NEXT: buffer_inv sc1344; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, v3, v5345; GFX942-NEXT: s_or_b64 s[0:1], vcc, s[0:1]346; GFX942-NEXT: s_andn2_b64 exec, exec, s[0:1]347; GFX942-NEXT: s_cbranch_execnz .LBB4_1348; GFX942-NEXT: ; %bb.2: ; %atomicrmw.end349; GFX942-NEXT: s_or_b64 exec, exec, s[0:1]350; GFX942-NEXT: v_mov_b32_e32 v0, v3351; GFX942-NEXT: s_setpc_b64 s[30:31]352;353; GFX11-LABEL: global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:354; GFX11: ; %bb.0:355; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)356; GFX11-NEXT: s_waitcnt_vscnt null, 0x0357; GFX11-NEXT: global_atomic_max_f32 v0, v[0:1], v2, off glc358; GFX11-NEXT: s_waitcnt vmcnt(0)359; GFX11-NEXT: buffer_gl1_inv360; GFX11-NEXT: buffer_gl0_inv361; GFX11-NEXT: s_setpc_b64 s[30:31]362;363; GFX10-LABEL: global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:364; GFX10: ; %bb.0:365; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)366; GFX10-NEXT: s_waitcnt_vscnt null, 0x0367; GFX10-NEXT: global_atomic_fmax v0, v[0:1], v2, off glc368; GFX10-NEXT: s_waitcnt vmcnt(0)369; GFX10-NEXT: buffer_gl1_inv370; GFX10-NEXT: buffer_gl0_inv371; GFX10-NEXT: s_setpc_b64 s[30:31]372;373; GFX90A-LABEL: global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:374; GFX90A: ; %bb.0:375; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)376; GFX90A-NEXT: global_load_dword v3, v[0:1], off377; GFX90A-NEXT: s_mov_b64 s[4:5], 0378; GFX90A-NEXT: v_max_f32_e32 v2, v2, v2379; GFX90A-NEXT: .LBB4_1: ; %atomicrmw.start380; GFX90A-NEXT: ; =>This Inner Loop Header: Depth=1381; GFX90A-NEXT: s_waitcnt vmcnt(0)382; GFX90A-NEXT: v_mov_b32_e32 v5, v3383; GFX90A-NEXT: v_max_f32_e32 v3, v5, v5384; GFX90A-NEXT: v_max_f32_e32 v4, v3, v2385; GFX90A-NEXT: global_atomic_cmpswap v3, v[0:1], v[4:5], off glc386; GFX90A-NEXT: s_waitcnt vmcnt(0)387; GFX90A-NEXT: buffer_wbinvl1388; GFX90A-NEXT: v_cmp_eq_u32_e32 vcc, v3, v5389; GFX90A-NEXT: s_or_b64 s[4:5], vcc, s[4:5]390; GFX90A-NEXT: s_andn2_b64 exec, exec, s[4:5]391; GFX90A-NEXT: s_cbranch_execnz .LBB4_1392; GFX90A-NEXT: ; %bb.2: ; %atomicrmw.end393; GFX90A-NEXT: s_or_b64 exec, exec, s[4:5]394; GFX90A-NEXT: v_mov_b32_e32 v0, v3395; GFX90A-NEXT: s_setpc_b64 s[30:31]396;397; GFX908-LABEL: global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:398; GFX908: ; %bb.0:399; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)400; GFX908-NEXT: global_load_dword v3, v[0:1], off401; GFX908-NEXT: s_mov_b64 s[4:5], 0402; GFX908-NEXT: v_max_f32_e32 v2, v2, v2403; GFX908-NEXT: .LBB4_1: ; %atomicrmw.start404; GFX908-NEXT: ; =>This Inner Loop Header: Depth=1405; GFX908-NEXT: s_waitcnt vmcnt(0)406; GFX908-NEXT: v_mov_b32_e32 v4, v3407; GFX908-NEXT: v_max_f32_e32 v3, v4, v4408; GFX908-NEXT: v_max_f32_e32 v3, v3, v2409; GFX908-NEXT: global_atomic_cmpswap v3, v[0:1], v[3:4], off glc410; GFX908-NEXT: s_waitcnt vmcnt(0)411; GFX908-NEXT: buffer_wbinvl1412; GFX908-NEXT: v_cmp_eq_u32_e32 vcc, v3, v4413; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]414; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]415; GFX908-NEXT: s_cbranch_execnz .LBB4_1416; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end417; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]418; GFX908-NEXT: v_mov_b32_e32 v0, v3419; GFX908-NEXT: s_setpc_b64 s[30:31]420;421; GFX8-LABEL: global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:422; GFX8: ; %bb.0:423; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)424; GFX8-NEXT: flat_load_dword v3, v[0:1]425; GFX8-NEXT: s_mov_b64 s[4:5], 0426; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2427; GFX8-NEXT: .LBB4_1: ; %atomicrmw.start428; GFX8-NEXT: ; =>This Inner Loop Header: Depth=1429; GFX8-NEXT: s_waitcnt vmcnt(0)430; GFX8-NEXT: v_mov_b32_e32 v4, v3431; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v4432; GFX8-NEXT: v_max_f32_e32 v3, v3, v2433; GFX8-NEXT: flat_atomic_cmpswap v3, v[0:1], v[3:4] glc434; GFX8-NEXT: s_waitcnt vmcnt(0)435; GFX8-NEXT: buffer_wbinvl1436; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, v3, v4437; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]438; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]439; GFX8-NEXT: s_cbranch_execnz .LBB4_1440; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end441; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]442; GFX8-NEXT: v_mov_b32_e32 v0, v3443; GFX8-NEXT: s_setpc_b64 s[30:31]444;445; GFX7-LABEL: global_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:446; GFX7: ; %bb.0:447; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)448; GFX7-NEXT: s_mov_b32 s6, 0449; GFX7-NEXT: s_mov_b32 s7, 0xf000450; GFX7-NEXT: s_mov_b64 s[4:5], 0451; GFX7-NEXT: buffer_atomic_fmax v2, v[0:1], s[4:7], 0 addr64 glc452; GFX7-NEXT: s_waitcnt vmcnt(0)453; GFX7-NEXT: buffer_wbinvl1454; GFX7-NEXT: v_mov_b32_e32 v0, v2455; GFX7-NEXT: s_setpc_b64 s[30:31]456 %result = atomicrmw fmax ptr addrspace(1) %ptr, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0457 ret float %result458}459 460define void @global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, float %val) {461; GFX12-LABEL: global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:462; GFX12: ; %bb.0:463; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0464; GFX12-NEXT: s_wait_expcnt 0x0465; GFX12-NEXT: s_wait_samplecnt 0x0466; GFX12-NEXT: s_wait_bvhcnt 0x0467; GFX12-NEXT: s_wait_kmcnt 0x0468; GFX12-NEXT: s_wait_storecnt 0x0469; GFX12-NEXT: global_atomic_max_num_f32 v[0:1], v2, off scope:SCOPE_DEV470; GFX12-NEXT: s_wait_storecnt 0x0471; GFX12-NEXT: global_inv scope:SCOPE_DEV472; GFX12-NEXT: s_wait_loadcnt 0x0473; GFX12-NEXT: s_setpc_b64 s[30:31]474;475; GFX942-LABEL: global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:476; GFX942: ; %bb.0:477; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)478; GFX942-NEXT: global_load_dword v3, v[0:1], off479; GFX942-NEXT: s_mov_b64 s[0:1], 0480; GFX942-NEXT: v_max_f32_e32 v4, v2, v2481; GFX942-NEXT: .LBB5_1: ; %atomicrmw.start482; GFX942-NEXT: ; =>This Inner Loop Header: Depth=1483; GFX942-NEXT: s_waitcnt vmcnt(0)484; GFX942-NEXT: v_max_f32_e32 v2, v3, v3485; GFX942-NEXT: v_max_f32_e32 v2, v2, v4486; GFX942-NEXT: buffer_wbl2 sc1487; GFX942-NEXT: global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0488; GFX942-NEXT: s_waitcnt vmcnt(0)489; GFX942-NEXT: buffer_inv sc1490; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3491; GFX942-NEXT: s_or_b64 s[0:1], vcc, s[0:1]492; GFX942-NEXT: v_mov_b32_e32 v3, v2493; GFX942-NEXT: s_andn2_b64 exec, exec, s[0:1]494; GFX942-NEXT: s_cbranch_execnz .LBB5_1495; GFX942-NEXT: ; %bb.2: ; %atomicrmw.end496; GFX942-NEXT: s_or_b64 exec, exec, s[0:1]497; GFX942-NEXT: s_setpc_b64 s[30:31]498;499; GFX11-LABEL: global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:500; GFX11: ; %bb.0:501; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)502; GFX11-NEXT: s_waitcnt_vscnt null, 0x0503; GFX11-NEXT: global_atomic_max_f32 v[0:1], v2, off504; GFX11-NEXT: s_waitcnt_vscnt null, 0x0505; GFX11-NEXT: buffer_gl1_inv506; GFX11-NEXT: buffer_gl0_inv507; GFX11-NEXT: s_setpc_b64 s[30:31]508;509; GFX10-LABEL: global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:510; GFX10: ; %bb.0:511; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)512; GFX10-NEXT: s_waitcnt_vscnt null, 0x0513; GFX10-NEXT: global_atomic_fmax v[0:1], v2, off514; GFX10-NEXT: s_waitcnt_vscnt null, 0x0515; GFX10-NEXT: buffer_gl1_inv516; GFX10-NEXT: buffer_gl0_inv517; GFX10-NEXT: s_setpc_b64 s[30:31]518;519; GFX90A-LABEL: global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:520; GFX90A: ; %bb.0:521; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)522; GFX90A-NEXT: global_load_dword v3, v[0:1], off523; GFX90A-NEXT: s_mov_b64 s[4:5], 0524; GFX90A-NEXT: v_max_f32_e32 v4, v2, v2525; GFX90A-NEXT: .LBB5_1: ; %atomicrmw.start526; GFX90A-NEXT: ; =>This Inner Loop Header: Depth=1527; GFX90A-NEXT: s_waitcnt vmcnt(0)528; GFX90A-NEXT: v_max_f32_e32 v2, v3, v3529; GFX90A-NEXT: v_max_f32_e32 v2, v2, v4530; GFX90A-NEXT: global_atomic_cmpswap v2, v[0:1], v[2:3], off glc531; GFX90A-NEXT: s_waitcnt vmcnt(0)532; GFX90A-NEXT: buffer_wbinvl1533; GFX90A-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3534; GFX90A-NEXT: s_or_b64 s[4:5], vcc, s[4:5]535; GFX90A-NEXT: v_mov_b32_e32 v3, v2536; GFX90A-NEXT: s_andn2_b64 exec, exec, s[4:5]537; GFX90A-NEXT: s_cbranch_execnz .LBB5_1538; GFX90A-NEXT: ; %bb.2: ; %atomicrmw.end539; GFX90A-NEXT: s_or_b64 exec, exec, s[4:5]540; GFX90A-NEXT: s_setpc_b64 s[30:31]541;542; GFX908-LABEL: global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:543; GFX908: ; %bb.0:544; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)545; GFX908-NEXT: global_load_dword v3, v[0:1], off546; GFX908-NEXT: s_mov_b64 s[4:5], 0547; GFX908-NEXT: v_max_f32_e32 v4, v2, v2548; GFX908-NEXT: .LBB5_1: ; %atomicrmw.start549; GFX908-NEXT: ; =>This Inner Loop Header: Depth=1550; GFX908-NEXT: s_waitcnt vmcnt(0)551; GFX908-NEXT: v_max_f32_e32 v2, v3, v3552; GFX908-NEXT: v_max_f32_e32 v2, v2, v4553; GFX908-NEXT: global_atomic_cmpswap v2, v[0:1], v[2:3], off glc554; GFX908-NEXT: s_waitcnt vmcnt(0)555; GFX908-NEXT: buffer_wbinvl1556; GFX908-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3557; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]558; GFX908-NEXT: v_mov_b32_e32 v3, v2559; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]560; GFX908-NEXT: s_cbranch_execnz .LBB5_1561; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end562; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]563; GFX908-NEXT: s_setpc_b64 s[30:31]564;565; GFX8-LABEL: global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:566; GFX8: ; %bb.0:567; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)568; GFX8-NEXT: flat_load_dword v3, v[0:1]569; GFX8-NEXT: s_mov_b64 s[4:5], 0570; GFX8-NEXT: v_mul_f32_e32 v4, 1.0, v2571; GFX8-NEXT: .LBB5_1: ; %atomicrmw.start572; GFX8-NEXT: ; =>This Inner Loop Header: Depth=1573; GFX8-NEXT: s_waitcnt vmcnt(0)574; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v3575; GFX8-NEXT: v_max_f32_e32 v2, v2, v4576; GFX8-NEXT: flat_atomic_cmpswap v2, v[0:1], v[2:3] glc577; GFX8-NEXT: s_waitcnt vmcnt(0)578; GFX8-NEXT: buffer_wbinvl1579; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, v2, v3580; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]581; GFX8-NEXT: v_mov_b32_e32 v3, v2582; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]583; GFX8-NEXT: s_cbranch_execnz .LBB5_1584; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end585; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]586; GFX8-NEXT: s_setpc_b64 s[30:31]587;588; GFX7-LABEL: global_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:589; GFX7: ; %bb.0:590; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)591; GFX7-NEXT: s_mov_b32 s6, 0592; GFX7-NEXT: s_mov_b32 s7, 0xf000593; GFX7-NEXT: s_mov_b64 s[4:5], 0594; GFX7-NEXT: buffer_atomic_fmax v2, v[0:1], s[4:7], 0 addr64595; GFX7-NEXT: s_waitcnt vmcnt(0)596; GFX7-NEXT: buffer_wbinvl1597; GFX7-NEXT: s_setpc_b64 s[30:31]598 %unused = atomicrmw fmax ptr addrspace(1) %ptr, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0599 ret void600}601 602define double @global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %val) {603; GFX12-LABEL: global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:604; GFX12: ; %bb.0:605; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0606; GFX12-NEXT: s_wait_expcnt 0x0607; GFX12-NEXT: s_wait_samplecnt 0x0608; GFX12-NEXT: s_wait_bvhcnt 0x0609; GFX12-NEXT: s_wait_kmcnt 0x0610; GFX12-NEXT: global_load_b64 v[4:5], v[0:1], off611; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]612; GFX12-NEXT: s_mov_b32 s0, 0613; GFX12-NEXT: .LBB6_1: ; %atomicrmw.start614; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1615; GFX12-NEXT: s_wait_loadcnt 0x0616; GFX12-NEXT: v_dual_mov_b32 v7, v5 :: v_dual_mov_b32 v6, v4617; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)618; GFX12-NEXT: v_max_num_f64_e32 v[4:5], v[6:7], v[6:7]619; GFX12-NEXT: v_max_num_f64_e32 v[4:5], v[4:5], v[2:3]620; GFX12-NEXT: s_wait_storecnt 0x0621; GFX12-NEXT: global_atomic_cmpswap_b64 v[4:5], v[0:1], v[4:7], off th:TH_ATOMIC_RETURN scope:SCOPE_DEV622; GFX12-NEXT: s_wait_loadcnt 0x0623; GFX12-NEXT: global_inv scope:SCOPE_DEV624; GFX12-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[4:5], v[6:7]625; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)626; GFX12-NEXT: s_or_b32 s0, vcc_lo, s0627; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)628; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s0629; GFX12-NEXT: s_cbranch_execnz .LBB6_1630; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end631; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s0632; GFX12-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5633; GFX12-NEXT: s_wait_loadcnt 0x0634; GFX12-NEXT: s_setpc_b64 s[30:31]635;636; GFX942-LABEL: global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:637; GFX942: ; %bb.0:638; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)639; GFX942-NEXT: buffer_wbl2 sc1640; GFX942-NEXT: global_atomic_max_f64 v[0:1], v[0:1], v[2:3], off sc0641; GFX942-NEXT: s_waitcnt vmcnt(0)642; GFX942-NEXT: buffer_inv sc1643; GFX942-NEXT: s_setpc_b64 s[30:31]644;645; GFX11-LABEL: global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:646; GFX11: ; %bb.0:647; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)648; GFX11-NEXT: global_load_b64 v[4:5], v[0:1], off649; GFX11-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]650; GFX11-NEXT: s_mov_b32 s0, 0651; GFX11-NEXT: .LBB6_1: ; %atomicrmw.start652; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1653; GFX11-NEXT: s_waitcnt vmcnt(0)654; GFX11-NEXT: v_dual_mov_b32 v7, v5 :: v_dual_mov_b32 v6, v4655; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)656; GFX11-NEXT: v_max_f64 v[4:5], v[6:7], v[6:7]657; GFX11-NEXT: v_max_f64 v[4:5], v[4:5], v[2:3]658; GFX11-NEXT: s_waitcnt_vscnt null, 0x0659; GFX11-NEXT: global_atomic_cmpswap_b64 v[4:5], v[0:1], v[4:7], off glc660; GFX11-NEXT: s_waitcnt vmcnt(0)661; GFX11-NEXT: buffer_gl1_inv662; GFX11-NEXT: buffer_gl0_inv663; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[4:5], v[6:7]664; GFX11-NEXT: s_or_b32 s0, vcc_lo, s0665; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)666; GFX11-NEXT: s_and_not1_b32 exec_lo, exec_lo, s0667; GFX11-NEXT: s_cbranch_execnz .LBB6_1668; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end669; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0670; GFX11-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5671; GFX11-NEXT: s_setpc_b64 s[30:31]672;673; GFX10-LABEL: global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:674; GFX10: ; %bb.0:675; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)676; GFX10-NEXT: s_waitcnt_vscnt null, 0x0677; GFX10-NEXT: global_atomic_fmax_x2 v[0:1], v[0:1], v[2:3], off glc678; GFX10-NEXT: s_waitcnt vmcnt(0)679; GFX10-NEXT: buffer_gl1_inv680; GFX10-NEXT: buffer_gl0_inv681; GFX10-NEXT: s_setpc_b64 s[30:31]682;683; GFX90A-LABEL: global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:684; GFX90A: ; %bb.0:685; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)686; GFX90A-NEXT: global_atomic_max_f64 v[0:1], v[0:1], v[2:3], off glc687; GFX90A-NEXT: s_waitcnt vmcnt(0)688; GFX90A-NEXT: buffer_wbinvl1689; GFX90A-NEXT: s_setpc_b64 s[30:31]690;691; GFX908-LABEL: global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:692; GFX908: ; %bb.0:693; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)694; GFX908-NEXT: global_load_dwordx2 v[4:5], v[0:1], off695; GFX908-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]696; GFX908-NEXT: s_mov_b64 s[4:5], 0697; GFX908-NEXT: .LBB6_1: ; %atomicrmw.start698; GFX908-NEXT: ; =>This Inner Loop Header: Depth=1699; GFX908-NEXT: s_waitcnt vmcnt(0)700; GFX908-NEXT: v_mov_b32_e32 v7, v5701; GFX908-NEXT: v_mov_b32_e32 v6, v4702; GFX908-NEXT: v_max_f64 v[4:5], v[6:7], v[6:7]703; GFX908-NEXT: v_max_f64 v[4:5], v[4:5], v[2:3]704; GFX908-NEXT: global_atomic_cmpswap_x2 v[4:5], v[0:1], v[4:7], off glc705; GFX908-NEXT: s_waitcnt vmcnt(0)706; GFX908-NEXT: buffer_wbinvl1707; GFX908-NEXT: v_cmp_eq_u64_e32 vcc, v[4:5], v[6:7]708; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]709; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]710; GFX908-NEXT: s_cbranch_execnz .LBB6_1711; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end712; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]713; GFX908-NEXT: v_mov_b32_e32 v0, v4714; GFX908-NEXT: v_mov_b32_e32 v1, v5715; GFX908-NEXT: s_setpc_b64 s[30:31]716;717; GFX8-LABEL: global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:718; GFX8: ; %bb.0:719; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)720; GFX8-NEXT: flat_load_dwordx2 v[4:5], v[0:1]721; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]722; GFX8-NEXT: s_mov_b64 s[4:5], 0723; GFX8-NEXT: .LBB6_1: ; %atomicrmw.start724; GFX8-NEXT: ; =>This Inner Loop Header: Depth=1725; GFX8-NEXT: s_waitcnt vmcnt(0)726; GFX8-NEXT: v_mov_b32_e32 v7, v5727; GFX8-NEXT: v_mov_b32_e32 v6, v4728; GFX8-NEXT: v_max_f64 v[4:5], v[6:7], v[6:7]729; GFX8-NEXT: v_max_f64 v[4:5], v[4:5], v[2:3]730; GFX8-NEXT: flat_atomic_cmpswap_x2 v[4:5], v[0:1], v[4:7] glc731; GFX8-NEXT: s_waitcnt vmcnt(0)732; GFX8-NEXT: buffer_wbinvl1733; GFX8-NEXT: v_cmp_eq_u64_e32 vcc, v[4:5], v[6:7]734; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]735; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]736; GFX8-NEXT: s_cbranch_execnz .LBB6_1737; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end738; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]739; GFX8-NEXT: v_mov_b32_e32 v0, v4740; GFX8-NEXT: v_mov_b32_e32 v1, v5741; GFX8-NEXT: s_setpc_b64 s[30:31]742;743; GFX7-LABEL: global_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:744; GFX7: ; %bb.0:745; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)746; GFX7-NEXT: s_mov_b32 s6, 0747; GFX7-NEXT: s_mov_b32 s7, 0xf000748; GFX7-NEXT: s_mov_b64 s[4:5], 0749; GFX7-NEXT: buffer_atomic_fmax_x2 v[2:3], v[0:1], s[4:7], 0 addr64 glc750; GFX7-NEXT: s_waitcnt vmcnt(0)751; GFX7-NEXT: buffer_wbinvl1752; GFX7-NEXT: v_mov_b32_e32 v0, v2753; GFX7-NEXT: v_mov_b32_e32 v1, v3754; GFX7-NEXT: s_setpc_b64 s[30:31]755 %result = atomicrmw fmax ptr addrspace(1) %ptr, double %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0756 ret double %result757}758 759define void @global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %val) {760; GFX12-LABEL: global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:761; GFX12: ; %bb.0:762; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0763; GFX12-NEXT: s_wait_expcnt 0x0764; GFX12-NEXT: s_wait_samplecnt 0x0765; GFX12-NEXT: s_wait_bvhcnt 0x0766; GFX12-NEXT: s_wait_kmcnt 0x0767; GFX12-NEXT: global_load_b64 v[4:5], v[0:1], off768; GFX12-NEXT: v_max_num_f64_e32 v[6:7], v[2:3], v[2:3]769; GFX12-NEXT: s_mov_b32 s0, 0770; GFX12-NEXT: .LBB7_1: ; %atomicrmw.start771; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1772; GFX12-NEXT: s_wait_loadcnt 0x0773; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[4:5], v[4:5]774; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)775; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[2:3], v[6:7]776; GFX12-NEXT: s_wait_storecnt 0x0777; GFX12-NEXT: global_atomic_cmpswap_b64 v[2:3], v[0:1], v[2:5], off th:TH_ATOMIC_RETURN scope:SCOPE_DEV778; GFX12-NEXT: s_wait_loadcnt 0x0779; GFX12-NEXT: global_inv scope:SCOPE_DEV780; GFX12-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[2:3], v[4:5]781; GFX12-NEXT: v_dual_mov_b32 v5, v3 :: v_dual_mov_b32 v4, v2782; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)783; GFX12-NEXT: s_or_b32 s0, vcc_lo, s0784; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)785; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s0786; GFX12-NEXT: s_cbranch_execnz .LBB7_1787; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end788; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s0789; GFX12-NEXT: s_wait_loadcnt 0x0790; GFX12-NEXT: s_setpc_b64 s[30:31]791;792; GFX942-LABEL: global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:793; GFX942: ; %bb.0:794; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)795; GFX942-NEXT: buffer_wbl2 sc1796; GFX942-NEXT: global_atomic_max_f64 v[0:1], v[2:3], off797; GFX942-NEXT: s_waitcnt vmcnt(0)798; GFX942-NEXT: buffer_inv sc1799; GFX942-NEXT: s_setpc_b64 s[30:31]800;801; GFX11-LABEL: global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:802; GFX11: ; %bb.0:803; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)804; GFX11-NEXT: global_load_b64 v[4:5], v[0:1], off805; GFX11-NEXT: v_max_f64 v[6:7], v[2:3], v[2:3]806; GFX11-NEXT: s_mov_b32 s0, 0807; GFX11-NEXT: .LBB7_1: ; %atomicrmw.start808; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1809; GFX11-NEXT: s_waitcnt vmcnt(0)810; GFX11-NEXT: v_max_f64 v[2:3], v[4:5], v[4:5]811; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)812; GFX11-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]813; GFX11-NEXT: s_waitcnt_vscnt null, 0x0814; GFX11-NEXT: global_atomic_cmpswap_b64 v[2:3], v[0:1], v[2:5], off glc815; GFX11-NEXT: s_waitcnt vmcnt(0)816; GFX11-NEXT: buffer_gl1_inv817; GFX11-NEXT: buffer_gl0_inv818; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[2:3], v[4:5]819; GFX11-NEXT: v_dual_mov_b32 v5, v3 :: v_dual_mov_b32 v4, v2820; GFX11-NEXT: s_or_b32 s0, vcc_lo, s0821; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)822; GFX11-NEXT: s_and_not1_b32 exec_lo, exec_lo, s0823; GFX11-NEXT: s_cbranch_execnz .LBB7_1824; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end825; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0826; GFX11-NEXT: s_setpc_b64 s[30:31]827;828; GFX10-LABEL: global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:829; GFX10: ; %bb.0:830; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)831; GFX10-NEXT: s_waitcnt_vscnt null, 0x0832; GFX10-NEXT: global_atomic_fmax_x2 v[0:1], v[2:3], off833; GFX10-NEXT: s_waitcnt_vscnt null, 0x0834; GFX10-NEXT: buffer_gl1_inv835; GFX10-NEXT: buffer_gl0_inv836; GFX10-NEXT: s_setpc_b64 s[30:31]837;838; GFX90A-LABEL: global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:839; GFX90A: ; %bb.0:840; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)841; GFX90A-NEXT: global_atomic_max_f64 v[0:1], v[2:3], off842; GFX90A-NEXT: s_waitcnt vmcnt(0)843; GFX90A-NEXT: buffer_wbinvl1844; GFX90A-NEXT: s_setpc_b64 s[30:31]845;846; GFX908-LABEL: global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:847; GFX908: ; %bb.0:848; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)849; GFX908-NEXT: global_load_dwordx2 v[4:5], v[0:1], off850; GFX908-NEXT: v_max_f64 v[6:7], v[2:3], v[2:3]851; GFX908-NEXT: s_mov_b64 s[4:5], 0852; GFX908-NEXT: .LBB7_1: ; %atomicrmw.start853; GFX908-NEXT: ; =>This Inner Loop Header: Depth=1854; GFX908-NEXT: s_waitcnt vmcnt(0)855; GFX908-NEXT: v_max_f64 v[2:3], v[4:5], v[4:5]856; GFX908-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]857; GFX908-NEXT: global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc858; GFX908-NEXT: s_waitcnt vmcnt(0)859; GFX908-NEXT: buffer_wbinvl1860; GFX908-NEXT: v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]861; GFX908-NEXT: v_mov_b32_e32 v5, v3862; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]863; GFX908-NEXT: v_mov_b32_e32 v4, v2864; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]865; GFX908-NEXT: s_cbranch_execnz .LBB7_1866; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end867; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]868; GFX908-NEXT: s_setpc_b64 s[30:31]869;870; GFX8-LABEL: global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:871; GFX8: ; %bb.0:872; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)873; GFX8-NEXT: flat_load_dwordx2 v[4:5], v[0:1]874; GFX8-NEXT: v_max_f64 v[6:7], v[2:3], v[2:3]875; GFX8-NEXT: s_mov_b64 s[4:5], 0876; GFX8-NEXT: .LBB7_1: ; %atomicrmw.start877; GFX8-NEXT: ; =>This Inner Loop Header: Depth=1878; GFX8-NEXT: s_waitcnt vmcnt(0)879; GFX8-NEXT: v_max_f64 v[2:3], v[4:5], v[4:5]880; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]881; GFX8-NEXT: flat_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5] glc882; GFX8-NEXT: s_waitcnt vmcnt(0)883; GFX8-NEXT: buffer_wbinvl1884; GFX8-NEXT: v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]885; GFX8-NEXT: v_mov_b32_e32 v5, v3886; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]887; GFX8-NEXT: v_mov_b32_e32 v4, v2888; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]889; GFX8-NEXT: s_cbranch_execnz .LBB7_1890; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end891; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]892; GFX8-NEXT: s_setpc_b64 s[30:31]893;894; GFX7-LABEL: global_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:895; GFX7: ; %bb.0:896; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)897; GFX7-NEXT: s_mov_b32 s6, 0898; GFX7-NEXT: s_mov_b32 s7, 0xf000899; GFX7-NEXT: s_mov_b64 s[4:5], 0900; GFX7-NEXT: buffer_atomic_fmax_x2 v[2:3], v[0:1], s[4:7], 0 addr64901; GFX7-NEXT: s_waitcnt vmcnt(0)902; GFX7-NEXT: buffer_wbinvl1903; GFX7-NEXT: s_setpc_b64 s[30:31]904 %unused = atomicrmw fmax ptr addrspace(1) %ptr, double %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0905 ret void906}907 908define float @flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory(ptr %ptr, float %val) {909; GFX12-LABEL: flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:910; GFX12: ; %bb.0:911; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0912; GFX12-NEXT: s_wait_expcnt 0x0913; GFX12-NEXT: s_wait_samplecnt 0x0914; GFX12-NEXT: s_wait_bvhcnt 0x0915; GFX12-NEXT: s_wait_kmcnt 0x0916; GFX12-NEXT: s_wait_storecnt 0x0917; GFX12-NEXT: flat_atomic_max_num_f32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_DEV918; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0919; GFX12-NEXT: global_inv scope:SCOPE_DEV920; GFX12-NEXT: s_wait_loadcnt 0x0921; GFX12-NEXT: s_setpc_b64 s[30:31]922;923; GFX942-LABEL: flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:924; GFX942: ; %bb.0:925; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)926; GFX942-NEXT: flat_load_dword v3, v[0:1]927; GFX942-NEXT: s_mov_b64 s[0:1], 0928; GFX942-NEXT: v_max_f32_e32 v2, v2, v2929; GFX942-NEXT: .LBB8_1: ; %atomicrmw.start930; GFX942-NEXT: ; =>This Inner Loop Header: Depth=1931; GFX942-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)932; GFX942-NEXT: v_mov_b32_e32 v5, v3933; GFX942-NEXT: v_max_f32_e32 v3, v5, v5934; GFX942-NEXT: v_max_f32_e32 v4, v3, v2935; GFX942-NEXT: buffer_wbl2 sc1936; GFX942-NEXT: flat_atomic_cmpswap v3, v[0:1], v[4:5] sc0937; GFX942-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)938; GFX942-NEXT: buffer_inv sc1939; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, v3, v5940; GFX942-NEXT: s_or_b64 s[0:1], vcc, s[0:1]941; GFX942-NEXT: s_andn2_b64 exec, exec, s[0:1]942; GFX942-NEXT: s_cbranch_execnz .LBB8_1943; GFX942-NEXT: ; %bb.2: ; %atomicrmw.end944; GFX942-NEXT: s_or_b64 exec, exec, s[0:1]945; GFX942-NEXT: v_mov_b32_e32 v0, v3946; GFX942-NEXT: s_setpc_b64 s[30:31]947;948; GFX11-LABEL: flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:949; GFX11: ; %bb.0:950; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)951; GFX11-NEXT: s_waitcnt_vscnt null, 0x0952; GFX11-NEXT: flat_atomic_max_f32 v0, v[0:1], v2 glc953; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)954; GFX11-NEXT: buffer_gl1_inv955; GFX11-NEXT: buffer_gl0_inv956; GFX11-NEXT: s_setpc_b64 s[30:31]957;958; GFX10-LABEL: flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:959; GFX10: ; %bb.0:960; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)961; GFX10-NEXT: s_waitcnt_vscnt null, 0x0962; GFX10-NEXT: flat_atomic_fmax v0, v[0:1], v2 glc963; GFX10-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)964; GFX10-NEXT: buffer_gl1_inv965; GFX10-NEXT: buffer_gl0_inv966; GFX10-NEXT: s_setpc_b64 s[30:31]967;968; GFX90A-LABEL: flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:969; GFX90A: ; %bb.0:970; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)971; GFX90A-NEXT: flat_load_dword v3, v[0:1]972; GFX90A-NEXT: s_mov_b64 s[4:5], 0973; GFX90A-NEXT: v_max_f32_e32 v2, v2, v2974; GFX90A-NEXT: .LBB8_1: ; %atomicrmw.start975; GFX90A-NEXT: ; =>This Inner Loop Header: Depth=1976; GFX90A-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)977; GFX90A-NEXT: v_mov_b32_e32 v5, v3978; GFX90A-NEXT: v_max_f32_e32 v3, v5, v5979; GFX90A-NEXT: v_max_f32_e32 v4, v3, v2980; GFX90A-NEXT: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc981; GFX90A-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)982; GFX90A-NEXT: buffer_wbinvl1983; GFX90A-NEXT: v_cmp_eq_u32_e32 vcc, v3, v5984; GFX90A-NEXT: s_or_b64 s[4:5], vcc, s[4:5]985; GFX90A-NEXT: s_andn2_b64 exec, exec, s[4:5]986; GFX90A-NEXT: s_cbranch_execnz .LBB8_1987; GFX90A-NEXT: ; %bb.2: ; %atomicrmw.end988; GFX90A-NEXT: s_or_b64 exec, exec, s[4:5]989; GFX90A-NEXT: v_mov_b32_e32 v0, v3990; GFX90A-NEXT: s_setpc_b64 s[30:31]991;992; GFX908-LABEL: flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:993; GFX908: ; %bb.0:994; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)995; GFX908-NEXT: flat_load_dword v3, v[0:1]996; GFX908-NEXT: s_mov_b64 s[4:5], 0997; GFX908-NEXT: v_max_f32_e32 v2, v2, v2998; GFX908-NEXT: .LBB8_1: ; %atomicrmw.start999; GFX908-NEXT: ; =>This Inner Loop Header: Depth=11000; GFX908-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1001; GFX908-NEXT: v_mov_b32_e32 v4, v31002; GFX908-NEXT: v_max_f32_e32 v3, v4, v41003; GFX908-NEXT: v_max_f32_e32 v3, v3, v21004; GFX908-NEXT: flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1005; GFX908-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1006; GFX908-NEXT: buffer_wbinvl11007; GFX908-NEXT: v_cmp_eq_u32_e32 vcc, v3, v41008; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1009; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]1010; GFX908-NEXT: s_cbranch_execnz .LBB8_11011; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end1012; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]1013; GFX908-NEXT: v_mov_b32_e32 v0, v31014; GFX908-NEXT: s_setpc_b64 s[30:31]1015;1016; GFX8-LABEL: flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1017; GFX8: ; %bb.0:1018; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1019; GFX8-NEXT: flat_load_dword v3, v[0:1]1020; GFX8-NEXT: s_mov_b64 s[4:5], 01021; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v21022; GFX8-NEXT: .LBB8_1: ; %atomicrmw.start1023; GFX8-NEXT: ; =>This Inner Loop Header: Depth=11024; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1025; GFX8-NEXT: v_mov_b32_e32 v4, v31026; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v41027; GFX8-NEXT: v_max_f32_e32 v3, v3, v21028; GFX8-NEXT: flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1029; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1030; GFX8-NEXT: buffer_wbinvl11031; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, v3, v41032; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1033; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]1034; GFX8-NEXT: s_cbranch_execnz .LBB8_11035; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end1036; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]1037; GFX8-NEXT: v_mov_b32_e32 v0, v31038; GFX8-NEXT: s_setpc_b64 s[30:31]1039;1040; GFX7-LABEL: flat_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1041; GFX7: ; %bb.0:1042; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1043; GFX7-NEXT: flat_atomic_fmax v0, v[0:1], v2 glc1044; GFX7-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1045; GFX7-NEXT: buffer_wbinvl11046; GFX7-NEXT: s_setpc_b64 s[30:31]1047 %result = atomicrmw fmax ptr %ptr, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01048 ret float %result1049}1050 1051define void @flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory(ptr %ptr, float %val) {1052; GFX12-LABEL: flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1053; GFX12: ; %bb.0:1054; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01055; GFX12-NEXT: s_wait_expcnt 0x01056; GFX12-NEXT: s_wait_samplecnt 0x01057; GFX12-NEXT: s_wait_bvhcnt 0x01058; GFX12-NEXT: s_wait_kmcnt 0x01059; GFX12-NEXT: s_wait_storecnt 0x01060; GFX12-NEXT: flat_atomic_max_num_f32 v[0:1], v2 scope:SCOPE_DEV1061; GFX12-NEXT: s_wait_storecnt_dscnt 0x01062; GFX12-NEXT: global_inv scope:SCOPE_DEV1063; GFX12-NEXT: s_wait_loadcnt 0x01064; GFX12-NEXT: s_setpc_b64 s[30:31]1065;1066; GFX942-LABEL: flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1067; GFX942: ; %bb.0:1068; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1069; GFX942-NEXT: flat_load_dword v3, v[0:1]1070; GFX942-NEXT: s_mov_b64 s[0:1], 01071; GFX942-NEXT: v_max_f32_e32 v4, v2, v21072; GFX942-NEXT: .LBB9_1: ; %atomicrmw.start1073; GFX942-NEXT: ; =>This Inner Loop Header: Depth=11074; GFX942-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1075; GFX942-NEXT: v_max_f32_e32 v2, v3, v31076; GFX942-NEXT: v_max_f32_e32 v2, v2, v41077; GFX942-NEXT: buffer_wbl2 sc11078; GFX942-NEXT: flat_atomic_cmpswap v2, v[0:1], v[2:3] sc01079; GFX942-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1080; GFX942-NEXT: buffer_inv sc11081; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, v2, v31082; GFX942-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1083; GFX942-NEXT: v_mov_b32_e32 v3, v21084; GFX942-NEXT: s_andn2_b64 exec, exec, s[0:1]1085; GFX942-NEXT: s_cbranch_execnz .LBB9_11086; GFX942-NEXT: ; %bb.2: ; %atomicrmw.end1087; GFX942-NEXT: s_or_b64 exec, exec, s[0:1]1088; GFX942-NEXT: s_setpc_b64 s[30:31]1089;1090; GFX11-LABEL: flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1091; GFX11: ; %bb.0:1092; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1093; GFX11-NEXT: s_waitcnt_vscnt null, 0x01094; GFX11-NEXT: flat_atomic_max_f32 v[0:1], v21095; GFX11-NEXT: s_waitcnt lgkmcnt(0)1096; GFX11-NEXT: s_waitcnt_vscnt null, 0x01097; GFX11-NEXT: buffer_gl1_inv1098; GFX11-NEXT: buffer_gl0_inv1099; GFX11-NEXT: s_setpc_b64 s[30:31]1100;1101; GFX10-LABEL: flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1102; GFX10: ; %bb.0:1103; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1104; GFX10-NEXT: s_waitcnt_vscnt null, 0x01105; GFX10-NEXT: flat_atomic_fmax v[0:1], v21106; GFX10-NEXT: s_waitcnt lgkmcnt(0)1107; GFX10-NEXT: s_waitcnt_vscnt null, 0x01108; GFX10-NEXT: buffer_gl1_inv1109; GFX10-NEXT: buffer_gl0_inv1110; GFX10-NEXT: s_setpc_b64 s[30:31]1111;1112; GFX90A-LABEL: flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1113; GFX90A: ; %bb.0:1114; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1115; GFX90A-NEXT: flat_load_dword v3, v[0:1]1116; GFX90A-NEXT: s_mov_b64 s[4:5], 01117; GFX90A-NEXT: v_max_f32_e32 v4, v2, v21118; GFX90A-NEXT: .LBB9_1: ; %atomicrmw.start1119; GFX90A-NEXT: ; =>This Inner Loop Header: Depth=11120; GFX90A-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1121; GFX90A-NEXT: v_max_f32_e32 v2, v3, v31122; GFX90A-NEXT: v_max_f32_e32 v2, v2, v41123; GFX90A-NEXT: flat_atomic_cmpswap v2, v[0:1], v[2:3] glc1124; GFX90A-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1125; GFX90A-NEXT: buffer_wbinvl11126; GFX90A-NEXT: v_cmp_eq_u32_e32 vcc, v2, v31127; GFX90A-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1128; GFX90A-NEXT: v_mov_b32_e32 v3, v21129; GFX90A-NEXT: s_andn2_b64 exec, exec, s[4:5]1130; GFX90A-NEXT: s_cbranch_execnz .LBB9_11131; GFX90A-NEXT: ; %bb.2: ; %atomicrmw.end1132; GFX90A-NEXT: s_or_b64 exec, exec, s[4:5]1133; GFX90A-NEXT: s_setpc_b64 s[30:31]1134;1135; GFX908-LABEL: flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1136; GFX908: ; %bb.0:1137; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1138; GFX908-NEXT: flat_load_dword v3, v[0:1]1139; GFX908-NEXT: s_mov_b64 s[4:5], 01140; GFX908-NEXT: v_max_f32_e32 v4, v2, v21141; GFX908-NEXT: .LBB9_1: ; %atomicrmw.start1142; GFX908-NEXT: ; =>This Inner Loop Header: Depth=11143; GFX908-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1144; GFX908-NEXT: v_max_f32_e32 v2, v3, v31145; GFX908-NEXT: v_max_f32_e32 v2, v2, v41146; GFX908-NEXT: flat_atomic_cmpswap v2, v[0:1], v[2:3] glc1147; GFX908-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1148; GFX908-NEXT: buffer_wbinvl11149; GFX908-NEXT: v_cmp_eq_u32_e32 vcc, v2, v31150; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1151; GFX908-NEXT: v_mov_b32_e32 v3, v21152; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]1153; GFX908-NEXT: s_cbranch_execnz .LBB9_11154; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end1155; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]1156; GFX908-NEXT: s_setpc_b64 s[30:31]1157;1158; GFX8-LABEL: flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1159; GFX8: ; %bb.0:1160; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1161; GFX8-NEXT: flat_load_dword v3, v[0:1]1162; GFX8-NEXT: s_mov_b64 s[4:5], 01163; GFX8-NEXT: v_mul_f32_e32 v4, 1.0, v21164; GFX8-NEXT: .LBB9_1: ; %atomicrmw.start1165; GFX8-NEXT: ; =>This Inner Loop Header: Depth=11166; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1167; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v31168; GFX8-NEXT: v_max_f32_e32 v2, v2, v41169; GFX8-NEXT: flat_atomic_cmpswap v2, v[0:1], v[2:3] glc1170; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1171; GFX8-NEXT: buffer_wbinvl11172; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, v2, v31173; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1174; GFX8-NEXT: v_mov_b32_e32 v3, v21175; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]1176; GFX8-NEXT: s_cbranch_execnz .LBB9_11177; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end1178; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]1179; GFX8-NEXT: s_setpc_b64 s[30:31]1180;1181; GFX7-LABEL: flat_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1182; GFX7: ; %bb.0:1183; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1184; GFX7-NEXT: flat_atomic_fmax v[0:1], v21185; GFX7-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1186; GFX7-NEXT: buffer_wbinvl11187; GFX7-NEXT: s_setpc_b64 s[30:31]1188 %unused = atomicrmw fmax ptr %ptr, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01189 ret void1190}1191 1192define double @flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory(ptr %ptr, double %val) {1193; GFX12-LABEL: flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1194; GFX12: ; %bb.0:1195; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01196; GFX12-NEXT: s_wait_expcnt 0x01197; GFX12-NEXT: s_wait_samplecnt 0x01198; GFX12-NEXT: s_wait_bvhcnt 0x01199; GFX12-NEXT: s_wait_kmcnt 0x01200; GFX12-NEXT: flat_load_b64 v[4:5], v[0:1]1201; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]1202; GFX12-NEXT: s_mov_b32 s0, 01203; GFX12-NEXT: .LBB10_1: ; %atomicrmw.start1204; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11205; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01206; GFX12-NEXT: v_dual_mov_b32 v7, v5 :: v_dual_mov_b32 v6, v41207; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1208; GFX12-NEXT: v_max_num_f64_e32 v[4:5], v[6:7], v[6:7]1209; GFX12-NEXT: v_max_num_f64_e32 v[4:5], v[4:5], v[2:3]1210; GFX12-NEXT: s_wait_storecnt 0x01211; GFX12-NEXT: flat_atomic_cmpswap_b64 v[4:5], v[0:1], v[4:7] th:TH_ATOMIC_RETURN scope:SCOPE_DEV1212; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01213; GFX12-NEXT: global_inv scope:SCOPE_DEV1214; GFX12-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[4:5], v[6:7]1215; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1216; GFX12-NEXT: s_or_b32 s0, vcc_lo, s01217; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1218; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s01219; GFX12-NEXT: s_cbranch_execnz .LBB10_11220; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1221; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s01222; GFX12-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51223; GFX12-NEXT: s_wait_loadcnt 0x01224; GFX12-NEXT: s_setpc_b64 s[30:31]1225;1226; GFX942-LABEL: flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1227; GFX942: ; %bb.0:1228; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1229; GFX942-NEXT: buffer_wbl2 sc11230; GFX942-NEXT: flat_atomic_max_f64 v[0:1], v[0:1], v[2:3] sc01231; GFX942-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1232; GFX942-NEXT: buffer_inv sc11233; GFX942-NEXT: s_setpc_b64 s[30:31]1234;1235; GFX11-LABEL: flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1236; GFX11: ; %bb.0:1237; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1238; GFX11-NEXT: flat_load_b64 v[4:5], v[0:1]1239; GFX11-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]1240; GFX11-NEXT: s_mov_b32 s0, 01241; GFX11-NEXT: .LBB10_1: ; %atomicrmw.start1242; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11243; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1244; GFX11-NEXT: v_dual_mov_b32 v7, v5 :: v_dual_mov_b32 v6, v41245; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1246; GFX11-NEXT: v_max_f64 v[4:5], v[6:7], v[6:7]1247; GFX11-NEXT: v_max_f64 v[4:5], v[4:5], v[2:3]1248; GFX11-NEXT: s_waitcnt_vscnt null, 0x01249; GFX11-NEXT: flat_atomic_cmpswap_b64 v[4:5], v[0:1], v[4:7] glc1250; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1251; GFX11-NEXT: buffer_gl1_inv1252; GFX11-NEXT: buffer_gl0_inv1253; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[4:5], v[6:7]1254; GFX11-NEXT: s_or_b32 s0, vcc_lo, s01255; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1256; GFX11-NEXT: s_and_not1_b32 exec_lo, exec_lo, s01257; GFX11-NEXT: s_cbranch_execnz .LBB10_11258; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1259; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s01260; GFX11-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51261; GFX11-NEXT: s_setpc_b64 s[30:31]1262;1263; GFX10-LABEL: flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1264; GFX10: ; %bb.0:1265; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1266; GFX10-NEXT: s_waitcnt_vscnt null, 0x01267; GFX10-NEXT: flat_atomic_fmax_x2 v[0:1], v[0:1], v[2:3] glc1268; GFX10-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1269; GFX10-NEXT: buffer_gl1_inv1270; GFX10-NEXT: buffer_gl0_inv1271; GFX10-NEXT: s_setpc_b64 s[30:31]1272;1273; GFX90A-LABEL: flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1274; GFX90A: ; %bb.0:1275; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1276; GFX90A-NEXT: flat_atomic_max_f64 v[0:1], v[0:1], v[2:3] glc1277; GFX90A-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1278; GFX90A-NEXT: buffer_wbinvl11279; GFX90A-NEXT: s_setpc_b64 s[30:31]1280;1281; GFX908-LABEL: flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1282; GFX908: ; %bb.0:1283; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1284; GFX908-NEXT: flat_load_dwordx2 v[4:5], v[0:1]1285; GFX908-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]1286; GFX908-NEXT: s_mov_b64 s[4:5], 01287; GFX908-NEXT: .LBB10_1: ; %atomicrmw.start1288; GFX908-NEXT: ; =>This Inner Loop Header: Depth=11289; GFX908-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1290; GFX908-NEXT: v_mov_b32_e32 v7, v51291; GFX908-NEXT: v_mov_b32_e32 v6, v41292; GFX908-NEXT: v_max_f64 v[4:5], v[6:7], v[6:7]1293; GFX908-NEXT: v_max_f64 v[4:5], v[4:5], v[2:3]1294; GFX908-NEXT: flat_atomic_cmpswap_x2 v[4:5], v[0:1], v[4:7] glc1295; GFX908-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1296; GFX908-NEXT: buffer_wbinvl11297; GFX908-NEXT: v_cmp_eq_u64_e32 vcc, v[4:5], v[6:7]1298; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1299; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]1300; GFX908-NEXT: s_cbranch_execnz .LBB10_11301; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end1302; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]1303; GFX908-NEXT: v_mov_b32_e32 v0, v41304; GFX908-NEXT: v_mov_b32_e32 v1, v51305; GFX908-NEXT: s_setpc_b64 s[30:31]1306;1307; GFX8-LABEL: flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1308; GFX8: ; %bb.0:1309; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1310; GFX8-NEXT: v_add_u32_e32 v5, vcc, 4, v01311; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v1, vcc1312; GFX8-NEXT: flat_load_dword v4, v[0:1]1313; GFX8-NEXT: flat_load_dword v5, v[5:6]1314; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]1315; GFX8-NEXT: s_mov_b64 s[4:5], 01316; GFX8-NEXT: .LBB10_1: ; %atomicrmw.start1317; GFX8-NEXT: ; =>This Inner Loop Header: Depth=11318; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1319; GFX8-NEXT: v_mov_b32_e32 v7, v51320; GFX8-NEXT: v_mov_b32_e32 v6, v41321; GFX8-NEXT: v_max_f64 v[4:5], v[6:7], v[6:7]1322; GFX8-NEXT: v_max_f64 v[4:5], v[4:5], v[2:3]1323; GFX8-NEXT: flat_atomic_cmpswap_x2 v[4:5], v[0:1], v[4:7] glc1324; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1325; GFX8-NEXT: buffer_wbinvl11326; GFX8-NEXT: v_cmp_eq_u64_e32 vcc, v[4:5], v[6:7]1327; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1328; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]1329; GFX8-NEXT: s_cbranch_execnz .LBB10_11330; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end1331; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]1332; GFX8-NEXT: v_mov_b32_e32 v0, v41333; GFX8-NEXT: v_mov_b32_e32 v1, v51334; GFX8-NEXT: s_setpc_b64 s[30:31]1335;1336; GFX7-LABEL: flat_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1337; GFX7: ; %bb.0:1338; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1339; GFX7-NEXT: flat_atomic_fmax_x2 v[0:1], v[0:1], v[2:3] glc1340; GFX7-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1341; GFX7-NEXT: buffer_wbinvl11342; GFX7-NEXT: s_setpc_b64 s[30:31]1343 %result = atomicrmw fmax ptr %ptr, double %val syncscope("agent") seq_cst, !noalias.addrspace !1, !amdgpu.no.fine.grained.memory !01344 ret double %result1345}1346 1347define void @flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory(ptr %ptr, double %val) {1348; GFX12-LABEL: flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1349; GFX12: ; %bb.0:1350; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01351; GFX12-NEXT: s_wait_expcnt 0x01352; GFX12-NEXT: s_wait_samplecnt 0x01353; GFX12-NEXT: s_wait_bvhcnt 0x01354; GFX12-NEXT: s_wait_kmcnt 0x01355; GFX12-NEXT: flat_load_b64 v[4:5], v[0:1]1356; GFX12-NEXT: v_max_num_f64_e32 v[6:7], v[2:3], v[2:3]1357; GFX12-NEXT: s_mov_b32 s0, 01358; GFX12-NEXT: .LBB11_1: ; %atomicrmw.start1359; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11360; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01361; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[4:5], v[4:5]1362; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1363; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[2:3], v[6:7]1364; GFX12-NEXT: s_wait_storecnt 0x01365; GFX12-NEXT: flat_atomic_cmpswap_b64 v[2:3], v[0:1], v[2:5] th:TH_ATOMIC_RETURN scope:SCOPE_DEV1366; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01367; GFX12-NEXT: global_inv scope:SCOPE_DEV1368; GFX12-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[2:3], v[4:5]1369; GFX12-NEXT: v_dual_mov_b32 v5, v3 :: v_dual_mov_b32 v4, v21370; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1371; GFX12-NEXT: s_or_b32 s0, vcc_lo, s01372; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1373; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s01374; GFX12-NEXT: s_cbranch_execnz .LBB11_11375; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1376; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s01377; GFX12-NEXT: s_wait_loadcnt 0x01378; GFX12-NEXT: s_setpc_b64 s[30:31]1379;1380; GFX942-LABEL: flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1381; GFX942: ; %bb.0:1382; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1383; GFX942-NEXT: buffer_wbl2 sc11384; GFX942-NEXT: flat_atomic_max_f64 v[0:1], v[2:3]1385; GFX942-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1386; GFX942-NEXT: buffer_inv sc11387; GFX942-NEXT: s_setpc_b64 s[30:31]1388;1389; GFX11-LABEL: flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1390; GFX11: ; %bb.0:1391; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1392; GFX11-NEXT: flat_load_b64 v[4:5], v[0:1]1393; GFX11-NEXT: v_max_f64 v[6:7], v[2:3], v[2:3]1394; GFX11-NEXT: s_mov_b32 s0, 01395; GFX11-NEXT: .LBB11_1: ; %atomicrmw.start1396; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11397; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1398; GFX11-NEXT: v_max_f64 v[2:3], v[4:5], v[4:5]1399; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1400; GFX11-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]1401; GFX11-NEXT: s_waitcnt_vscnt null, 0x01402; GFX11-NEXT: flat_atomic_cmpswap_b64 v[2:3], v[0:1], v[2:5] glc1403; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1404; GFX11-NEXT: buffer_gl1_inv1405; GFX11-NEXT: buffer_gl0_inv1406; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[2:3], v[4:5]1407; GFX11-NEXT: v_dual_mov_b32 v5, v3 :: v_dual_mov_b32 v4, v21408; GFX11-NEXT: s_or_b32 s0, vcc_lo, s01409; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1410; GFX11-NEXT: s_and_not1_b32 exec_lo, exec_lo, s01411; GFX11-NEXT: s_cbranch_execnz .LBB11_11412; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1413; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s01414; GFX11-NEXT: s_setpc_b64 s[30:31]1415;1416; GFX10-LABEL: flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1417; GFX10: ; %bb.0:1418; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1419; GFX10-NEXT: s_waitcnt_vscnt null, 0x01420; GFX10-NEXT: flat_atomic_fmax_x2 v[0:1], v[2:3]1421; GFX10-NEXT: s_waitcnt lgkmcnt(0)1422; GFX10-NEXT: s_waitcnt_vscnt null, 0x01423; GFX10-NEXT: buffer_gl1_inv1424; GFX10-NEXT: buffer_gl0_inv1425; GFX10-NEXT: s_setpc_b64 s[30:31]1426;1427; GFX90A-LABEL: flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1428; GFX90A: ; %bb.0:1429; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1430; GFX90A-NEXT: flat_atomic_max_f64 v[0:1], v[2:3]1431; GFX90A-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1432; GFX90A-NEXT: buffer_wbinvl11433; GFX90A-NEXT: s_setpc_b64 s[30:31]1434;1435; GFX908-LABEL: flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1436; GFX908: ; %bb.0:1437; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1438; GFX908-NEXT: flat_load_dwordx2 v[4:5], v[0:1]1439; GFX908-NEXT: v_max_f64 v[6:7], v[2:3], v[2:3]1440; GFX908-NEXT: s_mov_b64 s[4:5], 01441; GFX908-NEXT: .LBB11_1: ; %atomicrmw.start1442; GFX908-NEXT: ; =>This Inner Loop Header: Depth=11443; GFX908-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1444; GFX908-NEXT: v_max_f64 v[2:3], v[4:5], v[4:5]1445; GFX908-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]1446; GFX908-NEXT: flat_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5] glc1447; GFX908-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1448; GFX908-NEXT: buffer_wbinvl11449; GFX908-NEXT: v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]1450; GFX908-NEXT: v_mov_b32_e32 v5, v31451; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1452; GFX908-NEXT: v_mov_b32_e32 v4, v21453; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]1454; GFX908-NEXT: s_cbranch_execnz .LBB11_11455; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end1456; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]1457; GFX908-NEXT: s_setpc_b64 s[30:31]1458;1459; GFX8-LABEL: flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1460; GFX8: ; %bb.0:1461; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1462; GFX8-NEXT: v_add_u32_e32 v5, vcc, 4, v01463; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v1, vcc1464; GFX8-NEXT: flat_load_dword v4, v[0:1]1465; GFX8-NEXT: flat_load_dword v5, v[5:6]1466; GFX8-NEXT: v_max_f64 v[6:7], v[2:3], v[2:3]1467; GFX8-NEXT: s_mov_b64 s[4:5], 01468; GFX8-NEXT: .LBB11_1: ; %atomicrmw.start1469; GFX8-NEXT: ; =>This Inner Loop Header: Depth=11470; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1471; GFX8-NEXT: v_max_f64 v[2:3], v[4:5], v[4:5]1472; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]1473; GFX8-NEXT: flat_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5] glc1474; GFX8-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1475; GFX8-NEXT: buffer_wbinvl11476; GFX8-NEXT: v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]1477; GFX8-NEXT: v_mov_b32_e32 v5, v31478; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1479; GFX8-NEXT: v_mov_b32_e32 v4, v21480; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]1481; GFX8-NEXT: s_cbranch_execnz .LBB11_11482; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end1483; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]1484; GFX8-NEXT: s_setpc_b64 s[30:31]1485;1486; GFX7-LABEL: flat_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1487; GFX7: ; %bb.0:1488; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1489; GFX7-NEXT: flat_atomic_fmax_x2 v[0:1], v[2:3]1490; GFX7-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1491; GFX7-NEXT: buffer_wbinvl11492; GFX7-NEXT: s_setpc_b64 s[30:31]1493 %unused = atomicrmw fmax ptr %ptr, double %val syncscope("agent") seq_cst, !noalias.addrspace !1, !amdgpu.no.fine.grained.memory !01494 ret void1495}1496 1497define float @buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, float %val) {1498; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1499; GFX12: ; %bb.0:1500; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01501; GFX12-NEXT: s_wait_expcnt 0x01502; GFX12-NEXT: s_wait_samplecnt 0x01503; GFX12-NEXT: s_wait_bvhcnt 0x01504; GFX12-NEXT: s_wait_kmcnt 0x01505; GFX12-NEXT: v_mov_b32_e32 v1, s161506; GFX12-NEXT: s_wait_storecnt 0x01507; GFX12-NEXT: buffer_atomic_max_num_f32 v0, v1, s[0:3], null offen th:TH_ATOMIC_RETURN1508; GFX12-NEXT: s_wait_loadcnt 0x01509; GFX12-NEXT: global_inv scope:SCOPE_DEV1510; GFX12-NEXT: s_wait_loadcnt 0x01511; GFX12-NEXT: s_setpc_b64 s[30:31]1512;1513; GFX942-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1514; GFX942: ; %bb.0:1515; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1516; GFX942-NEXT: v_mov_b32_e32 v2, s161517; GFX942-NEXT: v_mov_b32_e32 v1, v01518; GFX942-NEXT: buffer_load_dword v0, v2, s[0:3], 0 offen1519; GFX942-NEXT: s_mov_b64 s[4:5], 01520; GFX942-NEXT: v_max_f32_e32 v3, v1, v11521; GFX942-NEXT: .LBB12_1: ; %atomicrmw.start1522; GFX942-NEXT: ; =>This Inner Loop Header: Depth=11523; GFX942-NEXT: s_waitcnt vmcnt(0)1524; GFX942-NEXT: v_mov_b32_e32 v5, v01525; GFX942-NEXT: v_max_f32_e32 v0, v5, v51526; GFX942-NEXT: v_max_f32_e32 v4, v0, v31527; GFX942-NEXT: v_mov_b64_e32 v[0:1], v[4:5]1528; GFX942-NEXT: buffer_wbl2 sc11529; GFX942-NEXT: buffer_atomic_cmpswap v[0:1], v2, s[0:3], 0 offen sc01530; GFX942-NEXT: s_waitcnt vmcnt(0)1531; GFX942-NEXT: buffer_inv sc11532; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51533; GFX942-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1534; GFX942-NEXT: s_andn2_b64 exec, exec, s[4:5]1535; GFX942-NEXT: s_cbranch_execnz .LBB12_11536; GFX942-NEXT: ; %bb.2: ; %atomicrmw.end1537; GFX942-NEXT: s_or_b64 exec, exec, s[4:5]1538; GFX942-NEXT: s_setpc_b64 s[30:31]1539;1540; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1541; GFX11: ; %bb.0:1542; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1543; GFX11-NEXT: v_mov_b32_e32 v1, s161544; GFX11-NEXT: s_waitcnt_vscnt null, 0x01545; GFX11-NEXT: buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen glc1546; GFX11-NEXT: s_waitcnt vmcnt(0)1547; GFX11-NEXT: buffer_gl1_inv1548; GFX11-NEXT: buffer_gl0_inv1549; GFX11-NEXT: s_setpc_b64 s[30:31]1550;1551; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1552; GFX10: ; %bb.0:1553; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1554; GFX10-NEXT: v_mov_b32_e32 v1, s201555; GFX10-NEXT: s_waitcnt_vscnt null, 0x01556; GFX10-NEXT: buffer_atomic_fmax v0, v1, s[16:19], 0 offen glc1557; GFX10-NEXT: s_waitcnt vmcnt(0)1558; GFX10-NEXT: buffer_gl1_inv1559; GFX10-NEXT: buffer_gl0_inv1560; GFX10-NEXT: s_setpc_b64 s[30:31]1561;1562; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1563; GFX90A: ; %bb.0:1564; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1565; GFX90A-NEXT: v_mov_b32_e32 v2, s201566; GFX90A-NEXT: v_mov_b32_e32 v1, v01567; GFX90A-NEXT: buffer_load_dword v0, v2, s[16:19], 0 offen1568; GFX90A-NEXT: s_mov_b64 s[4:5], 01569; GFX90A-NEXT: v_max_f32_e32 v3, v1, v11570; GFX90A-NEXT: .LBB12_1: ; %atomicrmw.start1571; GFX90A-NEXT: ; =>This Inner Loop Header: Depth=11572; GFX90A-NEXT: s_waitcnt vmcnt(0)1573; GFX90A-NEXT: v_mov_b32_e32 v5, v01574; GFX90A-NEXT: v_max_f32_e32 v0, v5, v51575; GFX90A-NEXT: v_max_f32_e32 v4, v0, v31576; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[4:5] op_sel:[0,1]1577; GFX90A-NEXT: buffer_atomic_cmpswap v[0:1], v2, s[16:19], 0 offen glc1578; GFX90A-NEXT: s_waitcnt vmcnt(0)1579; GFX90A-NEXT: buffer_wbinvl11580; GFX90A-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51581; GFX90A-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1582; GFX90A-NEXT: s_andn2_b64 exec, exec, s[4:5]1583; GFX90A-NEXT: s_cbranch_execnz .LBB12_11584; GFX90A-NEXT: ; %bb.2: ; %atomicrmw.end1585; GFX90A-NEXT: s_or_b64 exec, exec, s[4:5]1586; GFX90A-NEXT: s_setpc_b64 s[30:31]1587;1588; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1589; GFX908: ; %bb.0:1590; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1591; GFX908-NEXT: v_mov_b32_e32 v2, s201592; GFX908-NEXT: v_mov_b32_e32 v1, v01593; GFX908-NEXT: buffer_load_dword v0, v2, s[16:19], 0 offen1594; GFX908-NEXT: s_mov_b64 s[4:5], 01595; GFX908-NEXT: v_max_f32_e32 v3, v1, v11596; GFX908-NEXT: .LBB12_1: ; %atomicrmw.start1597; GFX908-NEXT: ; =>This Inner Loop Header: Depth=11598; GFX908-NEXT: s_waitcnt vmcnt(0)1599; GFX908-NEXT: v_mov_b32_e32 v5, v01600; GFX908-NEXT: v_max_f32_e32 v0, v5, v51601; GFX908-NEXT: v_max_f32_e32 v4, v0, v31602; GFX908-NEXT: v_mov_b32_e32 v0, v41603; GFX908-NEXT: v_mov_b32_e32 v1, v51604; GFX908-NEXT: buffer_atomic_cmpswap v[0:1], v2, s[16:19], 0 offen glc1605; GFX908-NEXT: s_waitcnt vmcnt(0)1606; GFX908-NEXT: buffer_wbinvl11607; GFX908-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51608; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1609; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]1610; GFX908-NEXT: s_cbranch_execnz .LBB12_11611; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end1612; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]1613; GFX908-NEXT: s_setpc_b64 s[30:31]1614;1615; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1616; GFX8: ; %bb.0:1617; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1618; GFX8-NEXT: v_mov_b32_e32 v2, s201619; GFX8-NEXT: v_mov_b32_e32 v1, v01620; GFX8-NEXT: buffer_load_dword v0, v2, s[16:19], 0 offen1621; GFX8-NEXT: s_mov_b64 s[4:5], 01622; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v11623; GFX8-NEXT: .LBB12_1: ; %atomicrmw.start1624; GFX8-NEXT: ; =>This Inner Loop Header: Depth=11625; GFX8-NEXT: s_waitcnt vmcnt(0)1626; GFX8-NEXT: v_mov_b32_e32 v5, v01627; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v51628; GFX8-NEXT: v_max_f32_e32 v4, v0, v31629; GFX8-NEXT: v_mov_b32_e32 v0, v41630; GFX8-NEXT: v_mov_b32_e32 v1, v51631; GFX8-NEXT: buffer_atomic_cmpswap v[0:1], v2, s[16:19], 0 offen glc1632; GFX8-NEXT: s_waitcnt vmcnt(0)1633; GFX8-NEXT: buffer_wbinvl11634; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51635; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1636; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]1637; GFX8-NEXT: s_cbranch_execnz .LBB12_11638; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end1639; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]1640; GFX8-NEXT: s_setpc_b64 s[30:31]1641;1642; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f32__amdgpu_no_fine_grained_memory:1643; GFX7: ; %bb.0:1644; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1645; GFX7-NEXT: v_mov_b32_e32 v1, s201646; GFX7-NEXT: buffer_atomic_fmax v0, v1, s[16:19], 0 offen glc1647; GFX7-NEXT: s_waitcnt vmcnt(0)1648; GFX7-NEXT: buffer_wbinvl11649; GFX7-NEXT: s_setpc_b64 s[30:31]1650 %result = atomicrmw fmax ptr addrspace(7) %ptr, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01651 ret float %result1652}1653 1654define void @buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, float %val) {1655; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1656; GFX12: ; %bb.0:1657; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01658; GFX12-NEXT: s_wait_expcnt 0x01659; GFX12-NEXT: s_wait_samplecnt 0x01660; GFX12-NEXT: s_wait_bvhcnt 0x01661; GFX12-NEXT: s_wait_kmcnt 0x01662; GFX12-NEXT: v_mov_b32_e32 v1, s161663; GFX12-NEXT: s_wait_storecnt 0x01664; GFX12-NEXT: buffer_atomic_max_num_f32 v0, v1, s[0:3], null offen1665; GFX12-NEXT: s_wait_storecnt 0x01666; GFX12-NEXT: global_inv scope:SCOPE_DEV1667; GFX12-NEXT: s_wait_loadcnt 0x01668; GFX12-NEXT: s_setpc_b64 s[30:31]1669;1670; GFX942-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1671; GFX942: ; %bb.0:1672; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1673; GFX942-NEXT: v_mov_b32_e32 v2, s161674; GFX942-NEXT: buffer_load_dword v1, v2, s[0:3], 0 offen1675; GFX942-NEXT: s_mov_b64 s[4:5], 01676; GFX942-NEXT: v_max_f32_e32 v3, v0, v01677; GFX942-NEXT: .LBB13_1: ; %atomicrmw.start1678; GFX942-NEXT: ; =>This Inner Loop Header: Depth=11679; GFX942-NEXT: s_waitcnt vmcnt(0)1680; GFX942-NEXT: v_max_f32_e32 v0, v1, v11681; GFX942-NEXT: v_max_f32_e32 v0, v0, v31682; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]1683; GFX942-NEXT: buffer_wbl2 sc11684; GFX942-NEXT: buffer_atomic_cmpswap v[4:5], v2, s[0:3], 0 offen sc01685; GFX942-NEXT: s_waitcnt vmcnt(0)1686; GFX942-NEXT: buffer_inv sc11687; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, v4, v11688; GFX942-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1689; GFX942-NEXT: v_mov_b32_e32 v1, v41690; GFX942-NEXT: s_andn2_b64 exec, exec, s[4:5]1691; GFX942-NEXT: s_cbranch_execnz .LBB13_11692; GFX942-NEXT: ; %bb.2: ; %atomicrmw.end1693; GFX942-NEXT: s_or_b64 exec, exec, s[4:5]1694; GFX942-NEXT: s_setpc_b64 s[30:31]1695;1696; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1697; GFX11: ; %bb.0:1698; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1699; GFX11-NEXT: v_mov_b32_e32 v1, s161700; GFX11-NEXT: s_waitcnt_vscnt null, 0x01701; GFX11-NEXT: buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen1702; GFX11-NEXT: s_waitcnt_vscnt null, 0x01703; GFX11-NEXT: buffer_gl1_inv1704; GFX11-NEXT: buffer_gl0_inv1705; GFX11-NEXT: s_setpc_b64 s[30:31]1706;1707; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1708; GFX10: ; %bb.0:1709; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1710; GFX10-NEXT: v_mov_b32_e32 v1, s201711; GFX10-NEXT: s_waitcnt_vscnt null, 0x01712; GFX10-NEXT: buffer_atomic_fmax v0, v1, s[16:19], 0 offen1713; GFX10-NEXT: s_waitcnt_vscnt null, 0x01714; GFX10-NEXT: buffer_gl1_inv1715; GFX10-NEXT: buffer_gl0_inv1716; GFX10-NEXT: s_setpc_b64 s[30:31]1717;1718; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1719; GFX90A: ; %bb.0:1720; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1721; GFX90A-NEXT: v_mov_b32_e32 v2, s201722; GFX90A-NEXT: buffer_load_dword v1, v2, s[16:19], 0 offen1723; GFX90A-NEXT: s_mov_b64 s[4:5], 01724; GFX90A-NEXT: v_max_f32_e32 v3, v0, v01725; GFX90A-NEXT: .LBB13_1: ; %atomicrmw.start1726; GFX90A-NEXT: ; =>This Inner Loop Header: Depth=11727; GFX90A-NEXT: s_waitcnt vmcnt(0)1728; GFX90A-NEXT: v_max_f32_e32 v0, v1, v11729; GFX90A-NEXT: v_max_f32_e32 v0, v0, v31730; GFX90A-NEXT: v_pk_mov_b32 v[4:5], v[0:1], v[0:1] op_sel:[0,1]1731; GFX90A-NEXT: buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc1732; GFX90A-NEXT: s_waitcnt vmcnt(0)1733; GFX90A-NEXT: buffer_wbinvl11734; GFX90A-NEXT: v_cmp_eq_u32_e32 vcc, v4, v11735; GFX90A-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1736; GFX90A-NEXT: v_mov_b32_e32 v1, v41737; GFX90A-NEXT: s_andn2_b64 exec, exec, s[4:5]1738; GFX90A-NEXT: s_cbranch_execnz .LBB13_11739; GFX90A-NEXT: ; %bb.2: ; %atomicrmw.end1740; GFX90A-NEXT: s_or_b64 exec, exec, s[4:5]1741; GFX90A-NEXT: s_setpc_b64 s[30:31]1742;1743; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1744; GFX908: ; %bb.0:1745; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1746; GFX908-NEXT: v_mov_b32_e32 v2, s201747; GFX908-NEXT: buffer_load_dword v1, v2, s[16:19], 0 offen1748; GFX908-NEXT: s_mov_b64 s[4:5], 01749; GFX908-NEXT: v_max_f32_e32 v3, v0, v01750; GFX908-NEXT: .LBB13_1: ; %atomicrmw.start1751; GFX908-NEXT: ; =>This Inner Loop Header: Depth=11752; GFX908-NEXT: s_waitcnt vmcnt(0)1753; GFX908-NEXT: v_max_f32_e32 v0, v1, v11754; GFX908-NEXT: v_max_f32_e32 v0, v0, v31755; GFX908-NEXT: v_mov_b32_e32 v5, v11756; GFX908-NEXT: v_mov_b32_e32 v4, v01757; GFX908-NEXT: buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc1758; GFX908-NEXT: s_waitcnt vmcnt(0)1759; GFX908-NEXT: buffer_wbinvl11760; GFX908-NEXT: v_cmp_eq_u32_e32 vcc, v4, v11761; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1762; GFX908-NEXT: v_mov_b32_e32 v1, v41763; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]1764; GFX908-NEXT: s_cbranch_execnz .LBB13_11765; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end1766; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]1767; GFX908-NEXT: s_setpc_b64 s[30:31]1768;1769; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1770; GFX8: ; %bb.0:1771; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1772; GFX8-NEXT: v_mov_b32_e32 v2, s201773; GFX8-NEXT: buffer_load_dword v1, v2, s[16:19], 0 offen1774; GFX8-NEXT: s_mov_b64 s[4:5], 01775; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v01776; GFX8-NEXT: .LBB13_1: ; %atomicrmw.start1777; GFX8-NEXT: ; =>This Inner Loop Header: Depth=11778; GFX8-NEXT: s_waitcnt vmcnt(0)1779; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v11780; GFX8-NEXT: v_max_f32_e32 v0, v0, v31781; GFX8-NEXT: v_mov_b32_e32 v5, v11782; GFX8-NEXT: v_mov_b32_e32 v4, v01783; GFX8-NEXT: buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc1784; GFX8-NEXT: s_waitcnt vmcnt(0)1785; GFX8-NEXT: buffer_wbinvl11786; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, v4, v11787; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1788; GFX8-NEXT: v_mov_b32_e32 v1, v41789; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]1790; GFX8-NEXT: s_cbranch_execnz .LBB13_11791; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end1792; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]1793; GFX8-NEXT: s_setpc_b64 s[30:31]1794;1795; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f32__amdgpu_no_fine_grained_memory:1796; GFX7: ; %bb.0:1797; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1798; GFX7-NEXT: v_mov_b32_e32 v1, s201799; GFX7-NEXT: buffer_atomic_fmax v0, v1, s[16:19], 0 offen1800; GFX7-NEXT: s_waitcnt vmcnt(0)1801; GFX7-NEXT: buffer_wbinvl11802; GFX7-NEXT: s_setpc_b64 s[30:31]1803 %unused = atomicrmw fmax ptr addrspace(7) %ptr, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01804 ret void1805}1806 1807define double @buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, double %val) {1808; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1809; GFX12: ; %bb.0:1810; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01811; GFX12-NEXT: s_wait_expcnt 0x01812; GFX12-NEXT: s_wait_samplecnt 0x01813; GFX12-NEXT: s_wait_bvhcnt 0x01814; GFX12-NEXT: s_wait_kmcnt 0x01815; GFX12-NEXT: v_mov_b32_e32 v8, s161816; GFX12-NEXT: v_max_num_f64_e32 v[6:7], v[0:1], v[0:1]1817; GFX12-NEXT: s_mov_b32 s4, 01818; GFX12-NEXT: buffer_load_b64 v[4:5], v8, s[0:3], null offen1819; GFX12-NEXT: .LBB14_1: ; %atomicrmw.start1820; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11821; GFX12-NEXT: s_wait_loadcnt 0x01822; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[4:5], v[4:5]1823; GFX12-NEXT: s_wait_storecnt 0x01824; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1825; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[0:1], v[6:7]1826; GFX12-NEXT: v_mov_b32_e32 v0, v21827; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)1828; GFX12-NEXT: v_dual_mov_b32 v1, v3 :: v_dual_mov_b32 v2, v41829; GFX12-NEXT: v_mov_b32_e32 v3, v51830; GFX12-NEXT: buffer_atomic_cmpswap_b64 v[0:3], v8, s[0:3], null offen th:TH_ATOMIC_RETURN1831; GFX12-NEXT: s_wait_loadcnt 0x01832; GFX12-NEXT: global_inv scope:SCOPE_DEV1833; GFX12-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[4:5]1834; GFX12-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v01835; GFX12-NEXT: s_or_b32 s4, vcc_lo, s41836; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1837; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s41838; GFX12-NEXT: s_cbranch_execnz .LBB14_11839; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1840; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s41841; GFX12-NEXT: s_wait_loadcnt 0x01842; GFX12-NEXT: s_setpc_b64 s[30:31]1843;1844; GFX942-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1845; GFX942: ; %bb.0:1846; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1847; GFX942-NEXT: v_mov_b32_e32 v2, s161848; GFX942-NEXT: buffer_wbl2 sc11849; GFX942-NEXT: buffer_atomic_max_f64 v[0:1], v2, s[0:3], 0 offen sc01850; GFX942-NEXT: s_waitcnt vmcnt(0)1851; GFX942-NEXT: buffer_inv sc11852; GFX942-NEXT: s_setpc_b64 s[30:31]1853;1854; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1855; GFX11: ; %bb.0:1856; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1857; GFX11-NEXT: v_mov_b32_e32 v8, s161858; GFX11-NEXT: v_max_f64 v[6:7], v[0:1], v[0:1]1859; GFX11-NEXT: s_mov_b32 s4, 01860; GFX11-NEXT: buffer_load_b64 v[4:5], v8, s[0:3], 0 offen1861; GFX11-NEXT: .LBB14_1: ; %atomicrmw.start1862; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11863; GFX11-NEXT: s_waitcnt vmcnt(0)1864; GFX11-NEXT: v_max_f64 v[0:1], v[4:5], v[4:5]1865; GFX11-NEXT: s_waitcnt_vscnt null, 0x01866; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1867; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]1868; GFX11-NEXT: v_mov_b32_e32 v0, v21869; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1870; GFX11-NEXT: v_dual_mov_b32 v1, v3 :: v_dual_mov_b32 v2, v41871; GFX11-NEXT: v_mov_b32_e32 v3, v51872; GFX11-NEXT: buffer_atomic_cmpswap_b64 v[0:3], v8, s[0:3], 0 offen glc1873; GFX11-NEXT: s_waitcnt vmcnt(0)1874; GFX11-NEXT: buffer_gl1_inv1875; GFX11-NEXT: buffer_gl0_inv1876; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[4:5]1877; GFX11-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v01878; GFX11-NEXT: s_or_b32 s4, vcc_lo, s41879; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1880; GFX11-NEXT: s_and_not1_b32 exec_lo, exec_lo, s41881; GFX11-NEXT: s_cbranch_execnz .LBB14_11882; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1883; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s41884; GFX11-NEXT: s_setpc_b64 s[30:31]1885;1886; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1887; GFX10: ; %bb.0:1888; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1889; GFX10-NEXT: v_mov_b32_e32 v2, s201890; GFX10-NEXT: s_waitcnt_vscnt null, 0x01891; GFX10-NEXT: buffer_atomic_fmax_x2 v[0:1], v2, s[16:19], 0 offen glc1892; GFX10-NEXT: s_waitcnt vmcnt(0)1893; GFX10-NEXT: buffer_gl1_inv1894; GFX10-NEXT: buffer_gl0_inv1895; GFX10-NEXT: s_setpc_b64 s[30:31]1896;1897; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1898; GFX90A: ; %bb.0:1899; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1900; GFX90A-NEXT: v_mov_b32_e32 v2, s201901; GFX90A-NEXT: buffer_atomic_max_f64 v[0:1], v2, s[16:19], 0 offen glc1902; GFX90A-NEXT: s_waitcnt vmcnt(0)1903; GFX90A-NEXT: buffer_wbinvl11904; GFX90A-NEXT: s_setpc_b64 s[30:31]1905;1906; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1907; GFX908: ; %bb.0:1908; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1909; GFX908-NEXT: v_mov_b32_e32 v8, s201910; GFX908-NEXT: buffer_load_dwordx2 v[4:5], v8, s[16:19], 0 offen1911; GFX908-NEXT: v_max_f64 v[6:7], v[0:1], v[0:1]1912; GFX908-NEXT: s_mov_b64 s[4:5], 01913; GFX908-NEXT: .LBB14_1: ; %atomicrmw.start1914; GFX908-NEXT: ; =>This Inner Loop Header: Depth=11915; GFX908-NEXT: s_waitcnt vmcnt(0)1916; GFX908-NEXT: v_max_f64 v[0:1], v[4:5], v[4:5]1917; GFX908-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]1918; GFX908-NEXT: v_mov_b32_e32 v0, v21919; GFX908-NEXT: v_mov_b32_e32 v1, v31920; GFX908-NEXT: v_mov_b32_e32 v2, v41921; GFX908-NEXT: v_mov_b32_e32 v3, v51922; GFX908-NEXT: buffer_atomic_cmpswap_x2 v[0:3], v8, s[16:19], 0 offen glc1923; GFX908-NEXT: s_waitcnt vmcnt(0)1924; GFX908-NEXT: buffer_wbinvl11925; GFX908-NEXT: v_cmp_eq_u64_e32 vcc, v[0:1], v[4:5]1926; GFX908-NEXT: v_mov_b32_e32 v5, v11927; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1928; GFX908-NEXT: v_mov_b32_e32 v4, v01929; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]1930; GFX908-NEXT: s_cbranch_execnz .LBB14_11931; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end1932; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]1933; GFX908-NEXT: s_setpc_b64 s[30:31]1934;1935; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1936; GFX8: ; %bb.0:1937; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1938; GFX8-NEXT: v_mov_b32_e32 v8, s201939; GFX8-NEXT: buffer_load_dwordx2 v[4:5], v8, s[16:19], 0 offen1940; GFX8-NEXT: v_max_f64 v[6:7], v[0:1], v[0:1]1941; GFX8-NEXT: s_mov_b64 s[4:5], 01942; GFX8-NEXT: .LBB14_1: ; %atomicrmw.start1943; GFX8-NEXT: ; =>This Inner Loop Header: Depth=11944; GFX8-NEXT: s_waitcnt vmcnt(0)1945; GFX8-NEXT: v_max_f64 v[0:1], v[4:5], v[4:5]1946; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]1947; GFX8-NEXT: v_mov_b32_e32 v0, v21948; GFX8-NEXT: v_mov_b32_e32 v1, v31949; GFX8-NEXT: v_mov_b32_e32 v2, v41950; GFX8-NEXT: v_mov_b32_e32 v3, v51951; GFX8-NEXT: buffer_atomic_cmpswap_x2 v[0:3], v8, s[16:19], 0 offen glc1952; GFX8-NEXT: s_waitcnt vmcnt(0)1953; GFX8-NEXT: buffer_wbinvl11954; GFX8-NEXT: v_cmp_eq_u64_e32 vcc, v[0:1], v[4:5]1955; GFX8-NEXT: v_mov_b32_e32 v5, v11956; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]1957; GFX8-NEXT: v_mov_b32_e32 v4, v01958; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]1959; GFX8-NEXT: s_cbranch_execnz .LBB14_11960; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end1961; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]1962; GFX8-NEXT: s_setpc_b64 s[30:31]1963;1964; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fmax_ret_f64__amdgpu_no_fine_grained_memory:1965; GFX7: ; %bb.0:1966; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1967; GFX7-NEXT: v_mov_b32_e32 v2, s201968; GFX7-NEXT: buffer_atomic_fmax_x2 v[0:1], v2, s[16:19], 0 offen glc1969; GFX7-NEXT: s_waitcnt vmcnt(0)1970; GFX7-NEXT: buffer_wbinvl11971; GFX7-NEXT: s_setpc_b64 s[30:31]1972 %result = atomicrmw fmax ptr addrspace(7) %ptr, double %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01973 ret double %result1974}1975 1976define void @buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, double %val) {1977; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:1978; GFX12: ; %bb.0:1979; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01980; GFX12-NEXT: s_wait_expcnt 0x01981; GFX12-NEXT: s_wait_samplecnt 0x01982; GFX12-NEXT: s_wait_bvhcnt 0x01983; GFX12-NEXT: s_wait_kmcnt 0x01984; GFX12-NEXT: v_mov_b32_e32 v6, s161985; GFX12-NEXT: v_max_num_f64_e32 v[4:5], v[0:1], v[0:1]1986; GFX12-NEXT: s_mov_b32 s4, 01987; GFX12-NEXT: buffer_load_b64 v[2:3], v6, s[0:3], null offen1988; GFX12-NEXT: .LBB15_1: ; %atomicrmw.start1989; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11990; GFX12-NEXT: s_wait_loadcnt 0x01991; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[2:3], v[2:3]1992; GFX12-NEXT: s_wait_storecnt 0x01993; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1994; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[0:1], v[4:5]1995; GFX12-NEXT: v_dual_mov_b32 v10, v3 :: v_dual_mov_b32 v9, v21996; GFX12-NEXT: v_dual_mov_b32 v8, v1 :: v_dual_mov_b32 v7, v01997; GFX12-NEXT: buffer_atomic_cmpswap_b64 v[7:10], v6, s[0:3], null offen th:TH_ATOMIC_RETURN1998; GFX12-NEXT: s_wait_loadcnt 0x01999; GFX12-NEXT: global_inv scope:SCOPE_DEV2000; GFX12-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[7:8], v[2:3]2001; GFX12-NEXT: v_dual_mov_b32 v2, v7 :: v_dual_mov_b32 v3, v82002; GFX12-NEXT: s_or_b32 s4, vcc_lo, s42003; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2004; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s42005; GFX12-NEXT: s_cbranch_execnz .LBB15_12006; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2007; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s42008; GFX12-NEXT: s_wait_loadcnt 0x02009; GFX12-NEXT: s_setpc_b64 s[30:31]2010;2011; GFX942-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:2012; GFX942: ; %bb.0:2013; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2014; GFX942-NEXT: v_mov_b32_e32 v2, s162015; GFX942-NEXT: buffer_wbl2 sc12016; GFX942-NEXT: buffer_atomic_max_f64 v[0:1], v2, s[0:3], 0 offen2017; GFX942-NEXT: s_waitcnt vmcnt(0)2018; GFX942-NEXT: buffer_inv sc12019; GFX942-NEXT: s_setpc_b64 s[30:31]2020;2021; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:2022; GFX11: ; %bb.0:2023; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2024; GFX11-NEXT: v_mov_b32_e32 v6, s162025; GFX11-NEXT: v_max_f64 v[4:5], v[0:1], v[0:1]2026; GFX11-NEXT: s_mov_b32 s4, 02027; GFX11-NEXT: buffer_load_b64 v[2:3], v6, s[0:3], 0 offen2028; GFX11-NEXT: .LBB15_1: ; %atomicrmw.start2029; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12030; GFX11-NEXT: s_waitcnt vmcnt(0)2031; GFX11-NEXT: v_max_f64 v[0:1], v[2:3], v[2:3]2032; GFX11-NEXT: s_waitcnt_vscnt null, 0x02033; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2034; GFX11-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]2035; GFX11-NEXT: v_dual_mov_b32 v10, v3 :: v_dual_mov_b32 v9, v22036; GFX11-NEXT: v_dual_mov_b32 v8, v1 :: v_dual_mov_b32 v7, v02037; GFX11-NEXT: buffer_atomic_cmpswap_b64 v[7:10], v6, s[0:3], 0 offen glc2038; GFX11-NEXT: s_waitcnt vmcnt(0)2039; GFX11-NEXT: buffer_gl1_inv2040; GFX11-NEXT: buffer_gl0_inv2041; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, v[7:8], v[2:3]2042; GFX11-NEXT: v_dual_mov_b32 v2, v7 :: v_dual_mov_b32 v3, v82043; GFX11-NEXT: s_or_b32 s4, vcc_lo, s42044; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2045; GFX11-NEXT: s_and_not1_b32 exec_lo, exec_lo, s42046; GFX11-NEXT: s_cbranch_execnz .LBB15_12047; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2048; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s42049; GFX11-NEXT: s_setpc_b64 s[30:31]2050;2051; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:2052; GFX10: ; %bb.0:2053; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2054; GFX10-NEXT: v_mov_b32_e32 v2, s202055; GFX10-NEXT: s_waitcnt_vscnt null, 0x02056; GFX10-NEXT: buffer_atomic_fmax_x2 v[0:1], v2, s[16:19], 0 offen2057; GFX10-NEXT: s_waitcnt_vscnt null, 0x02058; GFX10-NEXT: buffer_gl1_inv2059; GFX10-NEXT: buffer_gl0_inv2060; GFX10-NEXT: s_setpc_b64 s[30:31]2061;2062; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:2063; GFX90A: ; %bb.0:2064; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2065; GFX90A-NEXT: v_mov_b32_e32 v2, s202066; GFX90A-NEXT: buffer_atomic_max_f64 v[0:1], v2, s[16:19], 0 offen2067; GFX90A-NEXT: s_waitcnt vmcnt(0)2068; GFX90A-NEXT: buffer_wbinvl12069; GFX90A-NEXT: s_setpc_b64 s[30:31]2070;2071; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:2072; GFX908: ; %bb.0:2073; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2074; GFX908-NEXT: v_mov_b32_e32 v6, s202075; GFX908-NEXT: buffer_load_dwordx2 v[2:3], v6, s[16:19], 0 offen2076; GFX908-NEXT: v_max_f64 v[4:5], v[0:1], v[0:1]2077; GFX908-NEXT: s_mov_b64 s[4:5], 02078; GFX908-NEXT: .LBB15_1: ; %atomicrmw.start2079; GFX908-NEXT: ; =>This Inner Loop Header: Depth=12080; GFX908-NEXT: s_waitcnt vmcnt(0)2081; GFX908-NEXT: v_max_f64 v[0:1], v[2:3], v[2:3]2082; GFX908-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]2083; GFX908-NEXT: v_mov_b32_e32 v10, v32084; GFX908-NEXT: v_mov_b32_e32 v9, v22085; GFX908-NEXT: v_mov_b32_e32 v8, v12086; GFX908-NEXT: v_mov_b32_e32 v7, v02087; GFX908-NEXT: buffer_atomic_cmpswap_x2 v[7:10], v6, s[16:19], 0 offen glc2088; GFX908-NEXT: s_waitcnt vmcnt(0)2089; GFX908-NEXT: buffer_wbinvl12090; GFX908-NEXT: v_cmp_eq_u64_e32 vcc, v[7:8], v[2:3]2091; GFX908-NEXT: v_mov_b32_e32 v2, v72092; GFX908-NEXT: s_or_b64 s[4:5], vcc, s[4:5]2093; GFX908-NEXT: v_mov_b32_e32 v3, v82094; GFX908-NEXT: s_andn2_b64 exec, exec, s[4:5]2095; GFX908-NEXT: s_cbranch_execnz .LBB15_12096; GFX908-NEXT: ; %bb.2: ; %atomicrmw.end2097; GFX908-NEXT: s_or_b64 exec, exec, s[4:5]2098; GFX908-NEXT: s_setpc_b64 s[30:31]2099;2100; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:2101; GFX8: ; %bb.0:2102; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2103; GFX8-NEXT: v_mov_b32_e32 v6, s202104; GFX8-NEXT: buffer_load_dwordx2 v[2:3], v6, s[16:19], 0 offen2105; GFX8-NEXT: v_max_f64 v[4:5], v[0:1], v[0:1]2106; GFX8-NEXT: s_mov_b64 s[4:5], 02107; GFX8-NEXT: .LBB15_1: ; %atomicrmw.start2108; GFX8-NEXT: ; =>This Inner Loop Header: Depth=12109; GFX8-NEXT: s_waitcnt vmcnt(0)2110; GFX8-NEXT: v_max_f64 v[0:1], v[2:3], v[2:3]2111; GFX8-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]2112; GFX8-NEXT: v_mov_b32_e32 v10, v32113; GFX8-NEXT: v_mov_b32_e32 v9, v22114; GFX8-NEXT: v_mov_b32_e32 v8, v12115; GFX8-NEXT: v_mov_b32_e32 v7, v02116; GFX8-NEXT: buffer_atomic_cmpswap_x2 v[7:10], v6, s[16:19], 0 offen glc2117; GFX8-NEXT: s_waitcnt vmcnt(0)2118; GFX8-NEXT: buffer_wbinvl12119; GFX8-NEXT: v_cmp_eq_u64_e32 vcc, v[7:8], v[2:3]2120; GFX8-NEXT: v_mov_b32_e32 v2, v72121; GFX8-NEXT: s_or_b64 s[4:5], vcc, s[4:5]2122; GFX8-NEXT: v_mov_b32_e32 v3, v82123; GFX8-NEXT: s_andn2_b64 exec, exec, s[4:5]2124; GFX8-NEXT: s_cbranch_execnz .LBB15_12125; GFX8-NEXT: ; %bb.2: ; %atomicrmw.end2126; GFX8-NEXT: s_or_b64 exec, exec, s[4:5]2127; GFX8-NEXT: s_setpc_b64 s[30:31]2128;2129; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fmax_noret_f64__amdgpu_no_fine_grained_memory:2130; GFX7: ; %bb.0:2131; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2132; GFX7-NEXT: v_mov_b32_e32 v2, s202133; GFX7-NEXT: buffer_atomic_fmax_x2 v[0:1], v2, s[16:19], 0 offen2134; GFX7-NEXT: s_waitcnt vmcnt(0)2135; GFX7-NEXT: buffer_wbinvl12136; GFX7-NEXT: s_setpc_b64 s[30:31]2137 %unused = atomicrmw fmax ptr addrspace(7) %ptr, double %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02138 ret void2139}2140 2141!0 = !{}2142!1 = !{i32 5, i32 6}2143