brintos

brintos / llvm-project-archived public Read only

0
0
Text · 255.5 KiB · 668e7ba Raw
3596 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 -passes=atomic-expand %s | FileCheck -check-prefixes=COMMON,GFX803 %s3; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 -passes=atomic-expand %s | FileCheck -check-prefixes=COMMON,GFX906 %s4; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx908 -passes=atomic-expand %s | FileCheck -check-prefixes=COMMON,GFX908 %s5; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -passes=atomic-expand %s | FileCheck -check-prefixes=COMMON,GFX90A %s6; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 -passes=atomic-expand %s | FileCheck -check-prefixes=COMMON,GFX942 %s7; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 -passes=atomic-expand %s | FileCheck -check-prefixes=COMMON,GFX10 %s8; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -passes=atomic-expand %s | FileCheck -check-prefixes=COMMON,GFX11 %s9; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -passes=atomic-expand %s | FileCheck -check-prefixes=COMMON,GFX12 %s10 11;---------------------------------------------------------------------12; atomicrmw xchg13;---------------------------------------------------------------------14 15; xchg is supported over PCIe, so no expansion is necessary16define double @test_atomicrmw_xchg_f64_global_agent(ptr addrspace(1) %ptr, double %value) {17; COMMON-LABEL: define double @test_atomicrmw_xchg_f64_global_agent(18; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0:[0-9]+]] {19; COMMON-NEXT:    [[RES:%.*]] = atomicrmw xchg ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 820; COMMON-NEXT:    ret double [[RES]]21;22  %res = atomicrmw xchg ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst23  ret double %res24}25 26; xchg is supported over PCIe, so no expansion is necessary. Metadata should be ignored.27define double @test_atomicrmw_xchg_f64_global_agent__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {28; COMMON-LABEL: define double @test_atomicrmw_xchg_f64_global_agent__amdgpu_no_fine_grained_memory(29; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {30; COMMON-NEXT:    [[RES:%.*]] = atomicrmw xchg ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0:![0-9]+]]31; COMMON-NEXT:    ret double [[RES]]32;33  %res = atomicrmw xchg ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !034  ret double %res35}36 37; xchg is supported over PCIe, so no expansion is necessary. Metadata should be ignored.38define double @test_atomicrmw_xchg_f64_global_agent__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {39; COMMON-LABEL: define double @test_atomicrmw_xchg_f64_global_agent__amdgpu_no_remote_memory(40; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {41; COMMON-NEXT:    [[RES:%.*]] = atomicrmw xchg ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]42; COMMON-NEXT:    ret double [[RES]]43;44  %res = atomicrmw xchg ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.remote.memory !045  ret double %res46}47 48; xchg is supported over PCIe, so no expansion is necessary. Metadata should be ignored.49define double @test_atomicrmw_xchg_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {50; COMMON-LABEL: define double @test_atomicrmw_xchg_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(51; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {52; COMMON-NEXT:    [[RES:%.*]] = atomicrmw xchg ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]53; COMMON-NEXT:    ret double [[RES]]54;55  %res = atomicrmw xchg ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !056  ret double %res57}58 59;---------------------------------------------------------------------60; atomicrmw fadd61;---------------------------------------------------------------------62 63define double @test_atomicrmw_fadd_f64_global_agent(ptr addrspace(1) %ptr, double %value) {64; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent(65; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {66; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 867; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]68; GFX803:       atomicrmw.start:69; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]70; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]71; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i6472; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i6473; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 874; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 175; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 076; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double77; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]78; GFX803:       atomicrmw.end:79; GFX803-NEXT:    ret double [[TMP5]]80;81; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent(82; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {83; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 884; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]85; GFX906:       atomicrmw.start:86; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]87; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]88; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i6489; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i6490; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 891; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 192; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 093; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double94; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]95; GFX906:       atomicrmw.end:96; GFX906-NEXT:    ret double [[TMP5]]97;98; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent(99; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {100; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8101; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]102; GFX908:       atomicrmw.start:103; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]104; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]105; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64106; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64107; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8108; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1109; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0110; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double111; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]112; GFX908:       atomicrmw.end:113; GFX908-NEXT:    ret double [[TMP5]]114;115; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent(116; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {117; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8118; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]119; GFX90A:       atomicrmw.start:120; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]121; GFX90A-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]122; GFX90A-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64123; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64124; GFX90A-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8125; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1126; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0127; GFX90A-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double128; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]129; GFX90A:       atomicrmw.end:130; GFX90A-NEXT:    ret double [[TMP5]]131;132; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent(133; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {134; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8135; GFX942-NEXT:    ret double [[RES]]136;137; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent(138; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {139; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8140; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]141; GFX10:       atomicrmw.start:142; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]143; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]144; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64145; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64146; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8147; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1148; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0149; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double150; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]151; GFX10:       atomicrmw.end:152; GFX10-NEXT:    ret double [[TMP5]]153;154; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent(155; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {156; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8157; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]158; GFX11:       atomicrmw.start:159; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]160; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]161; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64162; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64163; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8164; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1165; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0166; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double167; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]168; GFX11:       atomicrmw.end:169; GFX11-NEXT:    ret double [[TMP5]]170;171; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent(172; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {173; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8174; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]175; GFX12:       atomicrmw.start:176; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]177; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]178; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64179; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64180; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8181; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1182; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0183; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double184; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]185; GFX12:       atomicrmw.end:186; GFX12-NEXT:    ret double [[TMP5]]187;188  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst189  ret double %res190}191 192define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {193; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(194; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {195; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8196; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]197; GFX803:       atomicrmw.start:198; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]199; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]200; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64201; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64202; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]203; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1204; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0205; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double206; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]207; GFX803:       atomicrmw.end:208; GFX803-NEXT:    ret double [[TMP5]]209;210; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(211; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {212; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8213; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]214; GFX906:       atomicrmw.start:215; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]216; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]217; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64218; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64219; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]220; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1221; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0222; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double223; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]224; GFX906:       atomicrmw.end:225; GFX906-NEXT:    ret double [[TMP5]]226;227; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(228; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {229; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8230; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]231; GFX908:       atomicrmw.start:232; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]233; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]234; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64235; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64236; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]237; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1238; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0239; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double240; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]241; GFX908:       atomicrmw.end:242; GFX908-NEXT:    ret double [[TMP5]]243;244; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(245; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {246; GFX90A-NEXT:    [[TMP5:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]247; GFX90A-NEXT:    ret double [[TMP5]]248;249; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(250; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {251; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]252; GFX942-NEXT:    ret double [[RES]]253;254; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(255; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {256; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8257; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]258; GFX10:       atomicrmw.start:259; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]260; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]261; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64262; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64263; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]264; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1265; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0266; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double267; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]268; GFX10:       atomicrmw.end:269; GFX10-NEXT:    ret double [[TMP5]]270;271; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(272; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {273; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8274; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]275; GFX11:       atomicrmw.start:276; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]277; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]278; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64279; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64280; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]281; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1282; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0283; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double284; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]285; GFX11:       atomicrmw.end:286; GFX11-NEXT:    ret double [[TMP5]]287;288; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory(289; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {290; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8291; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]292; GFX12:       atomicrmw.start:293; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]294; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]295; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64296; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64297; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]298; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1299; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0300; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double301; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]302; GFX12:       atomicrmw.end:303; GFX12-NEXT:    ret double [[TMP5]]304;305  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0306  ret double %res307}308 309define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {310; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(311; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {312; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8313; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]314; GFX803:       atomicrmw.start:315; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]316; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]317; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64318; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64319; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]320; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1321; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0322; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double323; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]324; GFX803:       atomicrmw.end:325; GFX803-NEXT:    ret double [[TMP5]]326;327; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(328; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {329; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8330; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]331; GFX906:       atomicrmw.start:332; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]333; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]334; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64335; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64336; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]337; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1338; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0339; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double340; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]341; GFX906:       atomicrmw.end:342; GFX906-NEXT:    ret double [[TMP5]]343;344; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(345; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {346; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8347; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]348; GFX908:       atomicrmw.start:349; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]350; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]351; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64352; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64353; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]354; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1355; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0356; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double357; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]358; GFX908:       atomicrmw.end:359; GFX908-NEXT:    ret double [[TMP5]]360;361; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(362; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {363; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8364; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]365; GFX90A:       atomicrmw.start:366; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]367; GFX90A-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]368; GFX90A-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64369; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64370; GFX90A-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]371; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1372; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0373; GFX90A-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double374; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]375; GFX90A:       atomicrmw.end:376; GFX90A-NEXT:    ret double [[TMP5]]377;378; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(379; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {380; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]381; GFX942-NEXT:    ret double [[RES]]382;383; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(384; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {385; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8386; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]387; GFX10:       atomicrmw.start:388; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]389; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]390; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64391; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64392; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]393; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1394; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0395; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double396; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]397; GFX10:       atomicrmw.end:398; GFX10-NEXT:    ret double [[TMP5]]399;400; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(401; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {402; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8403; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]404; GFX11:       atomicrmw.start:405; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]406; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]407; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64408; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64409; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]410; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1411; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0412; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double413; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]414; GFX11:       atomicrmw.end:415; GFX11-NEXT:    ret double [[TMP5]]416;417; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_remote_memory(418; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {419; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8420; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]421; GFX12:       atomicrmw.start:422; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]423; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]424; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64425; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64426; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]427; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1428; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0429; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double430; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]431; GFX12:       atomicrmw.end:432; GFX12-NEXT:    ret double [[TMP5]]433;434  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.remote.memory !0435  ret double %res436}437 438define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {439; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(440; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {441; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8442; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]443; GFX803:       atomicrmw.start:444; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]445; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]446; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64447; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64448; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]449; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1450; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0451; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double452; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]453; GFX803:       atomicrmw.end:454; GFX803-NEXT:    ret double [[TMP5]]455;456; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(457; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {458; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8459; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]460; GFX906:       atomicrmw.start:461; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]462; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]463; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64464; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64465; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]466; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1467; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0468; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double469; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]470; GFX906:       atomicrmw.end:471; GFX906-NEXT:    ret double [[TMP5]]472;473; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(474; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {475; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8476; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]477; GFX908:       atomicrmw.start:478; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]479; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]480; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64481; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64482; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]483; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1484; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0485; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double486; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]487; GFX908:       atomicrmw.end:488; GFX908-NEXT:    ret double [[TMP5]]489;490; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(491; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {492; GFX90A-NEXT:    [[TMP5:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]493; GFX90A-NEXT:    ret double [[TMP5]]494;495; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(496; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {497; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]498; GFX942-NEXT:    ret double [[RES]]499;500; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(501; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {502; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8503; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]504; GFX10:       atomicrmw.start:505; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]506; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]507; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64508; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64509; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]510; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1511; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0512; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double513; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]514; GFX10:       atomicrmw.end:515; GFX10-NEXT:    ret double [[TMP5]]516;517; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(518; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {519; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8520; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]521; GFX11:       atomicrmw.start:522; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]523; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]524; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64525; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64526; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]527; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1528; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0529; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double530; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]531; GFX11:       atomicrmw.end:532; GFX11-NEXT:    ret double [[TMP5]]533;534; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(535; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {536; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8537; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]538; GFX12:       atomicrmw.start:539; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]540; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]541; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64542; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64543; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]544; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1545; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0546; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double547; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]548; GFX12:       atomicrmw.end:549; GFX12-NEXT:    ret double [[TMP5]]550;551  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0552  ret double %res553}554 555define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(ptr addrspace(1) %ptr, double %value) #0 {556; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(557; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1:[0-9]+]] {558; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8559; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]560; GFX803:       atomicrmw.start:561; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]562; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]563; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64564; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64565; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]566; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1567; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0568; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double569; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]570; GFX803:       atomicrmw.end:571; GFX803-NEXT:    ret double [[TMP5]]572;573; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(574; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1:[0-9]+]] {575; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8576; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]577; GFX906:       atomicrmw.start:578; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]579; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]580; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64581; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64582; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]583; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1584; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0585; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double586; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]587; GFX906:       atomicrmw.end:588; GFX906-NEXT:    ret double [[TMP5]]589;590; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(591; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1:[0-9]+]] {592; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8593; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]594; GFX908:       atomicrmw.start:595; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]596; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]597; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64598; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64599; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]600; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1601; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0602; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double603; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]604; GFX908:       atomicrmw.end:605; GFX908-NEXT:    ret double [[TMP5]]606;607; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(608; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1:[0-9]+]] {609; GFX90A-NEXT:    [[TMP5:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]610; GFX90A-NEXT:    ret double [[TMP5]]611;612; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(613; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1:[0-9]+]] {614; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]615; GFX942-NEXT:    ret double [[RES]]616;617; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(618; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1:[0-9]+]] {619; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8620; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]621; GFX10:       atomicrmw.start:622; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]623; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]624; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64625; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64626; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]627; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1628; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0629; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double630; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]631; GFX10:       atomicrmw.end:632; GFX10-NEXT:    ret double [[TMP5]]633;634; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(635; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1:[0-9]+]] {636; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8637; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]638; GFX11:       atomicrmw.start:639; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]640; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]641; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64642; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64643; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]644; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1645; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0646; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double647; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]648; GFX11:       atomicrmw.end:649; GFX11-NEXT:    ret double [[TMP5]]650;651; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_daz(652; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1:[0-9]+]] {653; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8654; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]655; GFX12:       atomicrmw.start:656; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]657; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]658; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64659; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64660; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]661; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1662; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0663; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double664; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]665; GFX12:       atomicrmw.end:666; GFX12-NEXT:    ret double [[TMP5]]667;668  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0669  ret double %res670}671 672define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(ptr addrspace(1) %ptr, double %value) #1 {673; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(674; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2:[0-9]+]] {675; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8676; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]677; GFX803:       atomicrmw.start:678; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]679; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]680; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64681; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64682; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]683; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1684; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0685; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double686; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]687; GFX803:       atomicrmw.end:688; GFX803-NEXT:    ret double [[TMP5]]689;690; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(691; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2:[0-9]+]] {692; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8693; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]694; GFX906:       atomicrmw.start:695; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]696; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]697; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64698; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64699; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]700; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1701; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0702; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double703; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]704; GFX906:       atomicrmw.end:705; GFX906-NEXT:    ret double [[TMP5]]706;707; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(708; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2:[0-9]+]] {709; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8710; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]711; GFX908:       atomicrmw.start:712; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]713; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]714; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64715; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64716; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]717; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1718; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0719; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double720; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]721; GFX908:       atomicrmw.end:722; GFX908-NEXT:    ret double [[TMP5]]723;724; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(725; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2:[0-9]+]] {726; GFX90A-NEXT:    [[TMP5:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]727; GFX90A-NEXT:    ret double [[TMP5]]728;729; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(730; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2:[0-9]+]] {731; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]732; GFX942-NEXT:    ret double [[RES]]733;734; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(735; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2:[0-9]+]] {736; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8737; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]738; GFX10:       atomicrmw.start:739; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]740; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]741; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64742; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64743; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]744; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1745; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0746; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double747; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]748; GFX10:       atomicrmw.end:749; GFX10-NEXT:    ret double [[TMP5]]750;751; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(752; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2:[0-9]+]] {753; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8754; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]755; GFX11:       atomicrmw.start:756; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]757; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]758; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64759; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64760; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]761; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1762; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0763; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double764; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]765; GFX11:       atomicrmw.end:766; GFX11-NEXT:    ret double [[TMP5]]767;768; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory___denormal_fp_mode_f64_dynamic(769; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2:[0-9]+]] {770; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8771; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]772; GFX12:       atomicrmw.start:773; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]774; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]775; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64776; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64777; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]778; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1779; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0780; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double781; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]782; GFX12:       atomicrmw.end:783; GFX12-NEXT:    ret double [[TMP5]]784;785  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0786  ret double %res787}788 789define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(ptr addrspace(1) %ptr, double %value) {790; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(791; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {792; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8793; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]794; GFX803:       atomicrmw.start:795; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]796; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]797; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64798; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64799; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8800; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1801; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0802; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double803; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]804; GFX803:       atomicrmw.end:805; GFX803-NEXT:    ret double [[TMP5]]806;807; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(808; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {809; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8810; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]811; GFX906:       atomicrmw.start:812; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]813; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]814; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64815; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64816; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8817; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1818; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0819; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double820; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]821; GFX906:       atomicrmw.end:822; GFX906-NEXT:    ret double [[TMP5]]823;824; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(825; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {826; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8827; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]828; GFX908:       atomicrmw.start:829; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]830; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]831; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64832; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64833; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8834; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1835; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0836; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double837; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]838; GFX908:       atomicrmw.end:839; GFX908-NEXT:    ret double [[TMP5]]840;841; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(842; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {843; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8844; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]845; GFX90A:       atomicrmw.start:846; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]847; GFX90A-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]848; GFX90A-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64849; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64850; GFX90A-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8851; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1852; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0853; GFX90A-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double854; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]855; GFX90A:       atomicrmw.end:856; GFX90A-NEXT:    ret double [[TMP5]]857;858; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(859; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {860; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.ignore.denormal.mode [[META0]]861; GFX942-NEXT:    ret double [[RES]]862;863; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(864; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {865; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8866; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]867; GFX10:       atomicrmw.start:868; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]869; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]870; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64871; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64872; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8873; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1874; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0875; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double876; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]877; GFX10:       atomicrmw.end:878; GFX10-NEXT:    ret double [[TMP5]]879;880; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(881; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {882; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8883; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]884; GFX11:       atomicrmw.start:885; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]886; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]887; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64888; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64889; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8890; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1891; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0892; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double893; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]894; GFX11:       atomicrmw.end:895; GFX11-NEXT:    ret double [[TMP5]]896;897; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode(898; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {899; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8900; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]901; GFX12:       atomicrmw.start:902; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]903; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]904; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64905; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64906; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8907; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1908; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0909; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double910; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]911; GFX12:       atomicrmw.end:912; GFX12-NEXT:    ret double [[TMP5]]913;914  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.ignore.denormal.mode !0915  ret double %res916}917 918define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {919; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(920; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {921; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8922; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]923; GFX803:       atomicrmw.start:924; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]925; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]926; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64927; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64928; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]929; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1930; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0931; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double932; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]933; GFX803:       atomicrmw.end:934; GFX803-NEXT:    ret double [[TMP5]]935;936; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(937; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {938; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8939; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]940; GFX906:       atomicrmw.start:941; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]942; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]943; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64944; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64945; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]946; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1947; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0948; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double949; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]950; GFX906:       atomicrmw.end:951; GFX906-NEXT:    ret double [[TMP5]]952;953; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(954; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {955; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8956; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]957; GFX908:       atomicrmw.start:958; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]959; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]960; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64961; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64962; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]963; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1964; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0965; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double966; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]967; GFX908:       atomicrmw.end:968; GFX908-NEXT:    ret double [[TMP5]]969;970; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(971; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {972; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]973; GFX90A-NEXT:    ret double [[RES]]974;975; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(976; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {977; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]978; GFX942-NEXT:    ret double [[RES]]979;980; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(981; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {982; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 8983; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]984; GFX10:       atomicrmw.start:985; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]986; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]987; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i64988; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i64989; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]990; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 1991; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 0992; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double993; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]994; GFX10:       atomicrmw.end:995; GFX10-NEXT:    ret double [[TMP5]]996;997; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(998; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {999; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81000; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]1001; GFX11:       atomicrmw.start:1002; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1003; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1004; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641005; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641006; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1007; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11008; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01009; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1010; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1011; GFX11:       atomicrmw.end:1012; GFX11-NEXT:    ret double [[TMP5]]1013;1014; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(1015; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1016; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81017; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]1018; GFX12:       atomicrmw.start:1019; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1020; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1021; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641022; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641023; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1024; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11025; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01026; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1027; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1028; GFX12:       atomicrmw.end:1029; GFX12-NEXT:    ret double [[TMP5]]1030;1031  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !01032  ret double %res1033}1034 1035define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {1036; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1037; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1038; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81039; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]1040; GFX803:       atomicrmw.start:1041; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1042; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1043; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641044; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641045; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1046; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11047; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01048; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1049; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1050; GFX803:       atomicrmw.end:1051; GFX803-NEXT:    ret double [[TMP5]]1052;1053; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1054; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1055; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81056; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]1057; GFX906:       atomicrmw.start:1058; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1059; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1060; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641061; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641062; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1063; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11064; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01065; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1066; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1067; GFX906:       atomicrmw.end:1068; GFX906-NEXT:    ret double [[TMP5]]1069;1070; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1071; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1072; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81073; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]1074; GFX908:       atomicrmw.start:1075; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1076; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1077; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641078; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641079; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1080; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11081; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01082; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1083; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1084; GFX908:       atomicrmw.end:1085; GFX908-NEXT:    ret double [[TMP5]]1086;1087; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1088; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1089; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81090; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]1091; GFX90A:       atomicrmw.start:1092; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1093; GFX90A-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1094; GFX90A-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641095; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641096; GFX90A-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1097; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11098; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01099; GFX90A-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1100; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1101; GFX90A:       atomicrmw.end:1102; GFX90A-NEXT:    ret double [[TMP5]]1103;1104; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1105; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1106; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]1107; GFX942-NEXT:    ret double [[RES]]1108;1109; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1110; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1111; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81112; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]1113; GFX10:       atomicrmw.start:1114; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1115; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1116; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641117; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641118; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1119; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11120; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01121; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1122; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1123; GFX10:       atomicrmw.end:1124; GFX10-NEXT:    ret double [[TMP5]]1125;1126; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1127; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1128; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81129; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]1130; GFX11:       atomicrmw.start:1131; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1132; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1133; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641134; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641135; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1136; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11137; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01138; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1139; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1140; GFX11:       atomicrmw.end:1141; GFX11-NEXT:    ret double [[TMP5]]1142;1143; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1144; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1145; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81146; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]1147; GFX12:       atomicrmw.start:1148; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1149; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1150; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641151; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641152; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1153; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11154; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01155; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1156; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1157; GFX12:       atomicrmw.end:1158; GFX12-NEXT:    ret double [[TMP5]]1159;1160  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !01161  ret double %res1162}1163 1164define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {1165; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1166; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1167; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81168; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]1169; GFX803:       atomicrmw.start:1170; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1171; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1172; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641173; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641174; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1175; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11176; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01177; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1178; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1179; GFX803:       atomicrmw.end:1180; GFX803-NEXT:    ret double [[TMP5]]1181;1182; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1183; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1184; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81185; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]1186; GFX906:       atomicrmw.start:1187; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1188; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1189; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641190; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641191; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1192; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11193; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01194; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1195; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1196; GFX906:       atomicrmw.end:1197; GFX906-NEXT:    ret double [[TMP5]]1198;1199; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1200; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1201; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81202; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]1203; GFX908:       atomicrmw.start:1204; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1205; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1206; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641207; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641208; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1209; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11210; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01211; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1212; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1213; GFX908:       atomicrmw.end:1214; GFX908-NEXT:    ret double [[TMP5]]1215;1216; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1217; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1218; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]1219; GFX90A-NEXT:    ret double [[RES]]1220;1221; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1222; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1223; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]1224; GFX942-NEXT:    ret double [[RES]]1225;1226; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1227; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1228; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81229; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]1230; GFX10:       atomicrmw.start:1231; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1232; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1233; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641234; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641235; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1236; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11237; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01238; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1239; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1240; GFX10:       atomicrmw.end:1241; GFX10-NEXT:    ret double [[TMP5]]1242;1243; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1244; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1245; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81246; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]1247; GFX11:       atomicrmw.start:1248; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1249; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1250; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641251; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641252; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1253; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11254; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01255; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1256; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1257; GFX11:       atomicrmw.end:1258; GFX11-NEXT:    ret double [[TMP5]]1259;1260; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1261; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1262; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81263; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]1264; GFX12:       atomicrmw.start:1265; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1266; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1267; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641268; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641269; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1270; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11271; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01272; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1273; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1274; GFX12:       atomicrmw.end:1275; GFX12-NEXT:    ret double [[TMP5]]1276;1277  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !01278  ret double %res1279}1280 1281define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(ptr addrspace(1) %ptr, double %value) #0 {1282; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(1283; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1]] {1284; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81285; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]1286; GFX803:       atomicrmw.start:1287; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1288; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1289; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641290; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641291; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1292; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11293; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01294; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1295; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1296; GFX803:       atomicrmw.end:1297; GFX803-NEXT:    ret double [[TMP5]]1298;1299; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(1300; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1]] {1301; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81302; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]1303; GFX906:       atomicrmw.start:1304; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1305; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1306; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641307; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641308; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1309; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11310; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01311; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1312; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1313; GFX906:       atomicrmw.end:1314; GFX906-NEXT:    ret double [[TMP5]]1315;1316; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(1317; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1]] {1318; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81319; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]1320; GFX908:       atomicrmw.start:1321; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1322; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1323; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641324; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641325; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1326; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11327; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01328; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1329; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1330; GFX908:       atomicrmw.end:1331; GFX908-NEXT:    ret double [[TMP5]]1332;1333; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(1334; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1]] {1335; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]1336; GFX90A-NEXT:    ret double [[RES]]1337;1338; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(1339; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1]] {1340; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]1341; GFX942-NEXT:    ret double [[RES]]1342;1343; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(1344; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1]] {1345; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81346; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]1347; GFX10:       atomicrmw.start:1348; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1349; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1350; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641351; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641352; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1353; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11354; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01355; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1356; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1357; GFX10:       atomicrmw.end:1358; GFX10-NEXT:    ret double [[TMP5]]1359;1360; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(1361; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1]] {1362; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81363; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]1364; GFX11:       atomicrmw.start:1365; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1366; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1367; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641368; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641369; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1370; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11371; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01372; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1373; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1374; GFX11:       atomicrmw.end:1375; GFX11-NEXT:    ret double [[TMP5]]1376;1377; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_daz(1378; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR1]] {1379; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81380; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]1381; GFX12:       atomicrmw.start:1382; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1383; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1384; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641385; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641386; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1387; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11388; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01389; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1390; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1391; GFX12:       atomicrmw.end:1392; GFX12-NEXT:    ret double [[TMP5]]1393;1394  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !01395  ret double %res1396}1397 1398define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(ptr addrspace(1) %ptr, double %value) #1 {1399; GFX803-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(1400; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2]] {1401; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81402; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]1403; GFX803:       atomicrmw.start:1404; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1405; GFX803-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1406; GFX803-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641407; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641408; GFX803-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1409; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11410; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01411; GFX803-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1412; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1413; GFX803:       atomicrmw.end:1414; GFX803-NEXT:    ret double [[TMP5]]1415;1416; GFX906-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(1417; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2]] {1418; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81419; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]1420; GFX906:       atomicrmw.start:1421; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1422; GFX906-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1423; GFX906-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641424; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641425; GFX906-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1426; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11427; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01428; GFX906-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1429; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1430; GFX906:       atomicrmw.end:1431; GFX906-NEXT:    ret double [[TMP5]]1432;1433; GFX908-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(1434; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2]] {1435; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81436; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]1437; GFX908:       atomicrmw.start:1438; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1439; GFX908-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1440; GFX908-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641441; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641442; GFX908-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1443; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11444; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01445; GFX908-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1446; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1447; GFX908:       atomicrmw.end:1448; GFX908-NEXT:    ret double [[TMP5]]1449;1450; GFX90A-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(1451; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2]] {1452; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]1453; GFX90A-NEXT:    ret double [[RES]]1454;1455; GFX942-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(1456; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2]] {1457; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fadd ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]1458; GFX942-NEXT:    ret double [[RES]]1459;1460; GFX10-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(1461; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2]] {1462; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81463; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]1464; GFX10:       atomicrmw.start:1465; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1466; GFX10-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1467; GFX10-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641468; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641469; GFX10-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1470; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11471; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01472; GFX10-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1473; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1474; GFX10:       atomicrmw.end:1475; GFX10-NEXT:    ret double [[TMP5]]1476;1477; GFX11-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(1478; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2]] {1479; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81480; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]1481; GFX11:       atomicrmw.start:1482; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1483; GFX11-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1484; GFX11-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641485; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641486; GFX11-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1487; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11488; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01489; GFX11-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1490; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1491; GFX11:       atomicrmw.end:1492; GFX11-NEXT:    ret double [[TMP5]]1493;1494; GFX12-LABEL: define double @test_atomicrmw_fadd_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory__denormal_mode_dynamic(1495; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR2]] {1496; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81497; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]1498; GFX12:       atomicrmw.start:1499; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1500; GFX12-NEXT:    [[NEW:%.*]] = fadd double [[LOADED]], [[VALUE]]1501; GFX12-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641502; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641503; GFX12-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1504; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11505; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01506; GFX12-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1507; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1508; GFX12:       atomicrmw.end:1509; GFX12-NEXT:    ret double [[TMP5]]1510;1511  %res = atomicrmw fadd ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !01512  ret double %res1513}1514 1515;---------------------------------------------------------------------1516; atomicrmw fsub1517;---------------------------------------------------------------------1518 1519define double @test_atomicrmw_fsub_f64_global_agent(ptr addrspace(1) %ptr, double %value) {1520; COMMON-LABEL: define double @test_atomicrmw_fsub_f64_global_agent(1521; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1522; COMMON-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81523; COMMON-NEXT:    br label [[ATOMICRMW_START:%.*]]1524; COMMON:       atomicrmw.start:1525; COMMON-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[RES:%.*]], [[ATOMICRMW_START]] ]1526; COMMON-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE]]1527; COMMON-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641528; COMMON-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641529; COMMON-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 81530; COMMON-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11531; COMMON-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01532; COMMON-NEXT:    [[RES]] = bitcast i64 [[NEWLOADED]] to double1533; COMMON-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1534; COMMON:       atomicrmw.end:1535; COMMON-NEXT:    ret double [[RES]]1536;1537  %res = atomicrmw fsub ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst1538  ret double %res1539}1540 1541define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {1542; COMMON-LABEL: define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_no_fine_grained_memory(1543; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1544; COMMON-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81545; COMMON-NEXT:    br label [[ATOMICRMW_START:%.*]]1546; COMMON:       atomicrmw.start:1547; COMMON-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[RES:%.*]], [[ATOMICRMW_START]] ]1548; COMMON-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE]]1549; COMMON-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641550; COMMON-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641551; COMMON-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1552; COMMON-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11553; COMMON-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01554; COMMON-NEXT:    [[RES]] = bitcast i64 [[NEWLOADED]] to double1555; COMMON-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1556; COMMON:       atomicrmw.end:1557; COMMON-NEXT:    ret double [[RES]]1558;1559  %res = atomicrmw fsub ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01560  ret double %res1561}1562 1563define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {1564; COMMON-LABEL: define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_no_remote_memory(1565; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1566; COMMON-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81567; COMMON-NEXT:    br label [[ATOMICRMW_START:%.*]]1568; COMMON:       atomicrmw.start:1569; COMMON-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[RES:%.*]], [[ATOMICRMW_START]] ]1570; COMMON-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE]]1571; COMMON-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641572; COMMON-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641573; COMMON-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1574; COMMON-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11575; COMMON-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01576; COMMON-NEXT:    [[RES]] = bitcast i64 [[NEWLOADED]] to double1577; COMMON-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1578; COMMON:       atomicrmw.end:1579; COMMON-NEXT:    ret double [[RES]]1580;1581  %res = atomicrmw fsub ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.remote.memory !01582  ret double %res1583}1584 1585define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {1586; COMMON-LABEL: define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1587; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1588; COMMON-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81589; COMMON-NEXT:    br label [[ATOMICRMW_START:%.*]]1590; COMMON:       atomicrmw.start:1591; COMMON-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[RES:%.*]], [[ATOMICRMW_START]] ]1592; COMMON-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE]]1593; COMMON-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641594; COMMON-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641595; COMMON-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1596; COMMON-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11597; COMMON-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01598; COMMON-NEXT:    [[RES]] = bitcast i64 [[NEWLOADED]] to double1599; COMMON-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1600; COMMON:       atomicrmw.end:1601; COMMON-NEXT:    ret double [[RES]]1602;1603  %res = atomicrmw fsub ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !01604  ret double %res1605}1606 1607define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_ignore_denormal_mode(ptr addrspace(1) %ptr, double %value) {1608; COMMON-LABEL: define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_ignore_denormal_mode(1609; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1610; COMMON-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81611; COMMON-NEXT:    br label [[ATOMICRMW_START:%.*]]1612; COMMON:       atomicrmw.start:1613; COMMON-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1614; COMMON-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE]]1615; COMMON-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641616; COMMON-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641617; COMMON-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 81618; COMMON-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11619; COMMON-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01620; COMMON-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1621; COMMON-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1622; COMMON:       atomicrmw.end:1623; COMMON-NEXT:    ret double [[TMP5]]1624;1625  %res = atomicrmw fsub ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.ignore.denormal.mode !01626  ret double %res1627}1628 1629define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {1630; COMMON-LABEL: define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(1631; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1632; COMMON-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81633; COMMON-NEXT:    br label [[ATOMICRMW_START:%.*]]1634; COMMON:       atomicrmw.start:1635; COMMON-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1636; COMMON-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE]]1637; COMMON-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641638; COMMON-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641639; COMMON-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1640; COMMON-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11641; COMMON-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01642; COMMON-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1643; COMMON-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1644; COMMON:       atomicrmw.end:1645; COMMON-NEXT:    ret double [[TMP5]]1646;1647  %res = atomicrmw fsub ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !01648  ret double %res1649}1650 1651define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {1652; COMMON-LABEL: define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(1653; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1654; COMMON-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81655; COMMON-NEXT:    br label [[ATOMICRMW_START:%.*]]1656; COMMON:       atomicrmw.start:1657; COMMON-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1658; COMMON-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE]]1659; COMMON-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641660; COMMON-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641661; COMMON-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1662; COMMON-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11663; COMMON-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01664; COMMON-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1665; COMMON-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1666; COMMON:       atomicrmw.end:1667; COMMON-NEXT:    ret double [[TMP5]]1668;1669  %res = atomicrmw fsub ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !01670  ret double %res1671}1672 1673define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {1674; COMMON-LABEL: define double @test_atomicrmw_fsub_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(1675; COMMON-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1676; COMMON-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81677; COMMON-NEXT:    br label [[ATOMICRMW_START:%.*]]1678; COMMON:       atomicrmw.start:1679; COMMON-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP5:%.*]], [[ATOMICRMW_START]] ]1680; COMMON-NEXT:    [[NEW:%.*]] = fsub double [[LOADED]], [[VALUE]]1681; COMMON-NEXT:    [[TMP2:%.*]] = bitcast double [[NEW]] to i641682; COMMON-NEXT:    [[TMP3:%.*]] = bitcast double [[LOADED]] to i641683; COMMON-NEXT:    [[TMP4:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP3]], i64 [[TMP2]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]1684; COMMON-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP4]], 11685; COMMON-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP4]], 01686; COMMON-NEXT:    [[TMP5]] = bitcast i64 [[NEWLOADED]] to double1687; COMMON-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1688; COMMON:       atomicrmw.end:1689; COMMON-NEXT:    ret double [[TMP5]]1690;1691  %res = atomicrmw fsub ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !01692  ret double %res1693}1694 1695;---------------------------------------------------------------------1696; atomicrmw fmax1697;---------------------------------------------------------------------1698 1699define double @test_atomicrmw_fmax_f64_global_agent(ptr addrspace(1) %ptr, double %value) {1700; GFX803-LABEL: define double @test_atomicrmw_fmax_f64_global_agent(1701; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1702; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81703; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]1704; GFX803:       atomicrmw.start:1705; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1706; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1707; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641708; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641709; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 81710; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11711; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01712; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1713; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1714; GFX803:       atomicrmw.end:1715; GFX803-NEXT:    ret double [[TMP6]]1716;1717; GFX906-LABEL: define double @test_atomicrmw_fmax_f64_global_agent(1718; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1719; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81720; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]1721; GFX906:       atomicrmw.start:1722; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1723; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1724; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641725; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641726; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 81727; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11728; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01729; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1730; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1731; GFX906:       atomicrmw.end:1732; GFX906-NEXT:    ret double [[TMP6]]1733;1734; GFX908-LABEL: define double @test_atomicrmw_fmax_f64_global_agent(1735; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1736; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81737; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]1738; GFX908:       atomicrmw.start:1739; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1740; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1741; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641742; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641743; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 81744; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11745; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01746; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1747; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1748; GFX908:       atomicrmw.end:1749; GFX908-NEXT:    ret double [[TMP6]]1750;1751; GFX90A-LABEL: define double @test_atomicrmw_fmax_f64_global_agent(1752; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1753; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81754; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]1755; GFX90A:       atomicrmw.start:1756; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1757; GFX90A-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1758; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641759; GFX90A-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641760; GFX90A-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 81761; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11762; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01763; GFX90A-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1764; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1765; GFX90A:       atomicrmw.end:1766; GFX90A-NEXT:    ret double [[TMP6]]1767;1768; GFX942-LABEL: define double @test_atomicrmw_fmax_f64_global_agent(1769; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1770; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 81771; GFX942-NEXT:    ret double [[RES]]1772;1773; GFX10-LABEL: define double @test_atomicrmw_fmax_f64_global_agent(1774; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1775; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81776; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]1777; GFX10:       atomicrmw.start:1778; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1779; GFX10-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1780; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641781; GFX10-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641782; GFX10-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 81783; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11784; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01785; GFX10-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1786; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1787; GFX10:       atomicrmw.end:1788; GFX10-NEXT:    ret double [[TMP6]]1789;1790; GFX11-LABEL: define double @test_atomicrmw_fmax_f64_global_agent(1791; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1792; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81793; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]1794; GFX11:       atomicrmw.start:1795; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1796; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1797; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641798; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641799; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 81800; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11801; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01802; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1803; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1804; GFX11:       atomicrmw.end:1805; GFX11-NEXT:    ret double [[TMP6]]1806;1807; GFX12-LABEL: define double @test_atomicrmw_fmax_f64_global_agent(1808; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1809; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81810; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]1811; GFX12:       atomicrmw.start:1812; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1813; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1814; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641815; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641816; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 81817; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11818; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01819; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1820; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1821; GFX12:       atomicrmw.end:1822; GFX12-NEXT:    ret double [[TMP6]]1823;1824  %res = atomicrmw fmax ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst1825  ret double %res1826}1827 1828define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {1829; GFX803-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(1830; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1831; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81832; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]1833; GFX803:       atomicrmw.start:1834; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1835; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1836; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641837; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641838; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1839; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11840; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01841; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1842; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1843; GFX803:       atomicrmw.end:1844; GFX803-NEXT:    ret double [[TMP6]]1845;1846; GFX906-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(1847; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1848; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81849; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]1850; GFX906:       atomicrmw.start:1851; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1852; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1853; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641854; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641855; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1856; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11857; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01858; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1859; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1860; GFX906:       atomicrmw.end:1861; GFX906-NEXT:    ret double [[TMP6]]1862;1863; GFX908-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(1864; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1865; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81866; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]1867; GFX908:       atomicrmw.start:1868; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1869; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1870; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641871; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641872; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1873; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11874; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01875; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1876; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1877; GFX908:       atomicrmw.end:1878; GFX908-NEXT:    ret double [[TMP6]]1879;1880; GFX90A-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(1881; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1882; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1883; GFX90A-NEXT:    ret double [[RES]]1884;1885; GFX942-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(1886; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1887; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1888; GFX942-NEXT:    ret double [[RES]]1889;1890; GFX10-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(1891; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1892; GFX10-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1893; GFX10-NEXT:    ret double [[RES]]1894;1895; GFX11-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(1896; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1897; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81898; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]1899; GFX11:       atomicrmw.start:1900; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1901; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1902; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641903; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641904; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1905; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11906; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01907; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1908; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1909; GFX11:       atomicrmw.end:1910; GFX11-NEXT:    ret double [[TMP6]]1911;1912; GFX12-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory(1913; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1914; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81915; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]1916; GFX12:       atomicrmw.start:1917; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1918; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1919; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641920; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641921; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]1922; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11923; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01924; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1925; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1926; GFX12:       atomicrmw.end:1927; GFX12-NEXT:    ret double [[TMP6]]1928;1929  %res = atomicrmw fmax ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01930  ret double %res1931}1932 1933define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {1934; GFX803-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(1935; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1936; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81937; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]1938; GFX803:       atomicrmw.start:1939; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1940; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1941; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641942; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641943; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1944; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11945; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01946; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1947; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1948; GFX803:       atomicrmw.end:1949; GFX803-NEXT:    ret double [[TMP6]]1950;1951; GFX906-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(1952; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1953; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81954; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]1955; GFX906:       atomicrmw.start:1956; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1957; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1958; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641959; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641960; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1961; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11962; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01963; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1964; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1965; GFX906:       atomicrmw.end:1966; GFX906-NEXT:    ret double [[TMP6]]1967;1968; GFX908-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(1969; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1970; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81971; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]1972; GFX908:       atomicrmw.start:1973; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]1974; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1975; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641976; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641977; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1978; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11979; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01980; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double1981; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1982; GFX908:       atomicrmw.end:1983; GFX908-NEXT:    ret double [[TMP6]]1984;1985; GFX90A-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(1986; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {1987; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 81988; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]1989; GFX90A:       atomicrmw.start:1990; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[RES:%.*]], [[ATOMICRMW_START]] ]1991; GFX90A-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])1992; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i641993; GFX90A-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i641994; GFX90A-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]1995; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 11996; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 01997; GFX90A-NEXT:    [[RES]] = bitcast i64 [[NEWLOADED]] to double1998; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]1999; GFX90A:       atomicrmw.end:2000; GFX90A-NEXT:    ret double [[RES]]2001;2002; GFX942-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(2003; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2004; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2005; GFX942-NEXT:    ret double [[RES]]2006;2007; GFX10-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(2008; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2009; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82010; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]2011; GFX10:       atomicrmw.start:2012; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[RES:%.*]], [[ATOMICRMW_START]] ]2013; GFX10-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2014; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642015; GFX10-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642016; GFX10-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2017; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12018; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02019; GFX10-NEXT:    [[RES]] = bitcast i64 [[NEWLOADED]] to double2020; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2021; GFX10:       atomicrmw.end:2022; GFX10-NEXT:    ret double [[RES]]2023;2024; GFX11-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(2025; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2026; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82027; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2028; GFX11:       atomicrmw.start:2029; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2030; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2031; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642032; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642033; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2034; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12035; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02036; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2037; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2038; GFX11:       atomicrmw.end:2039; GFX11-NEXT:    ret double [[TMP6]]2040;2041; GFX12-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_remote_memory(2042; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2043; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82044; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2045; GFX12:       atomicrmw.start:2046; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2047; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2048; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642049; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642050; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2051; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12052; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02053; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2054; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2055; GFX12:       atomicrmw.end:2056; GFX12-NEXT:    ret double [[TMP6]]2057;2058  %res = atomicrmw fmax ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.remote.memory !02059  ret double %res2060}2061 2062define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {2063; GFX803-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2064; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2065; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82066; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]2067; GFX803:       atomicrmw.start:2068; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2069; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2070; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642071; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642072; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2073; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12074; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02075; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2076; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2077; GFX803:       atomicrmw.end:2078; GFX803-NEXT:    ret double [[TMP6]]2079;2080; GFX906-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2081; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2082; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82083; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]2084; GFX906:       atomicrmw.start:2085; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2086; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2087; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642088; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642089; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2090; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12091; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02092; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2093; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2094; GFX906:       atomicrmw.end:2095; GFX906-NEXT:    ret double [[TMP6]]2096;2097; GFX908-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2098; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2099; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82100; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]2101; GFX908:       atomicrmw.start:2102; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2103; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2104; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642105; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642106; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2107; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12108; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02109; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2110; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2111; GFX908:       atomicrmw.end:2112; GFX908-NEXT:    ret double [[TMP6]]2113;2114; GFX90A-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2115; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2116; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2117; GFX90A-NEXT:    ret double [[RES]]2118;2119; GFX942-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2120; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2121; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2122; GFX942-NEXT:    ret double [[RES]]2123;2124; GFX10-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2125; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2126; GFX10-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2127; GFX10-NEXT:    ret double [[RES]]2128;2129; GFX11-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2130; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2131; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82132; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2133; GFX11:       atomicrmw.start:2134; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2135; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2136; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642137; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642138; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2139; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12140; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02141; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2142; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2143; GFX11:       atomicrmw.end:2144; GFX11-NEXT:    ret double [[TMP6]]2145;2146; GFX12-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2147; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2148; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82149; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2150; GFX12:       atomicrmw.start:2151; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2152; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2153; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642154; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642155; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2156; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12157; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02158; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2159; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2160; GFX12:       atomicrmw.end:2161; GFX12-NEXT:    ret double [[TMP6]]2162;2163  %res = atomicrmw fmax ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !02164  ret double %res2165}2166 2167define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(ptr addrspace(1) %ptr, double %value) {2168; GFX803-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(2169; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2170; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82171; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]2172; GFX803:       atomicrmw.start:2173; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2174; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2175; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642176; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642177; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82178; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12179; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02180; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2181; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2182; GFX803:       atomicrmw.end:2183; GFX803-NEXT:    ret double [[TMP6]]2184;2185; GFX906-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(2186; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2187; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82188; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]2189; GFX906:       atomicrmw.start:2190; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2191; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2192; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642193; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642194; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82195; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12196; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02197; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2198; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2199; GFX906:       atomicrmw.end:2200; GFX906-NEXT:    ret double [[TMP6]]2201;2202; GFX908-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(2203; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2204; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82205; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]2206; GFX908:       atomicrmw.start:2207; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2208; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2209; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642210; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642211; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82212; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12213; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02214; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2215; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2216; GFX908:       atomicrmw.end:2217; GFX908-NEXT:    ret double [[TMP6]]2218;2219; GFX90A-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(2220; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2221; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82222; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]2223; GFX90A:       atomicrmw.start:2224; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2225; GFX90A-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2226; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642227; GFX90A-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642228; GFX90A-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82229; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12230; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02231; GFX90A-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2232; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2233; GFX90A:       atomicrmw.end:2234; GFX90A-NEXT:    ret double [[TMP6]]2235;2236; GFX942-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(2237; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2238; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.ignore.denormal.mode [[META0]]2239; GFX942-NEXT:    ret double [[RES]]2240;2241; GFX10-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(2242; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2243; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82244; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]2245; GFX10:       atomicrmw.start:2246; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2247; GFX10-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2248; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642249; GFX10-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642250; GFX10-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82251; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12252; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02253; GFX10-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2254; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2255; GFX10:       atomicrmw.end:2256; GFX10-NEXT:    ret double [[TMP6]]2257;2258; GFX11-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(2259; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2260; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82261; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2262; GFX11:       atomicrmw.start:2263; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2264; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2265; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642266; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642267; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82268; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12269; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02270; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2271; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2272; GFX11:       atomicrmw.end:2273; GFX11-NEXT:    ret double [[TMP6]]2274;2275; GFX12-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode(2276; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2277; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82278; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2279; GFX12:       atomicrmw.start:2280; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2281; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2282; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642283; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642284; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82285; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12286; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02287; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2288; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2289; GFX12:       atomicrmw.end:2290; GFX12-NEXT:    ret double [[TMP6]]2291;2292  %res = atomicrmw fmax ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.ignore.denormal.mode !02293  ret double %res2294}2295 2296define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {2297; GFX803-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(2298; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2299; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82300; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]2301; GFX803:       atomicrmw.start:2302; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2303; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2304; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642305; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642306; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2307; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12308; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02309; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2310; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2311; GFX803:       atomicrmw.end:2312; GFX803-NEXT:    ret double [[TMP6]]2313;2314; GFX906-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(2315; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2316; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82317; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]2318; GFX906:       atomicrmw.start:2319; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2320; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2321; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642322; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642323; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2324; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12325; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02326; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2327; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2328; GFX906:       atomicrmw.end:2329; GFX906-NEXT:    ret double [[TMP6]]2330;2331; GFX908-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(2332; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2333; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82334; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]2335; GFX908:       atomicrmw.start:2336; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2337; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2338; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642339; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642340; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2341; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12342; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02343; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2344; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2345; GFX908:       atomicrmw.end:2346; GFX908-NEXT:    ret double [[TMP6]]2347;2348; GFX90A-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(2349; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2350; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]2351; GFX90A-NEXT:    ret double [[RES]]2352;2353; GFX942-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(2354; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2355; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]2356; GFX942-NEXT:    ret double [[RES]]2357;2358; GFX10-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(2359; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2360; GFX10-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]2361; GFX10-NEXT:    ret double [[RES]]2362;2363; GFX11-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(2364; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2365; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82366; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2367; GFX11:       atomicrmw.start:2368; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2369; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2370; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642371; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642372; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2373; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12374; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02375; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2376; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2377; GFX11:       atomicrmw.end:2378; GFX11-NEXT:    ret double [[TMP6]]2379;2380; GFX12-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(2381; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2382; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82383; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2384; GFX12:       atomicrmw.start:2385; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2386; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2387; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642388; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642389; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2390; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12391; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02392; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2393; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2394; GFX12:       atomicrmw.end:2395; GFX12-NEXT:    ret double [[TMP6]]2396;2397  %res = atomicrmw fmax ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !02398  ret double %res2399}2400 2401define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {2402; GFX803-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(2403; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2404; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82405; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]2406; GFX803:       atomicrmw.start:2407; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2408; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2409; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642410; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642411; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2412; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12413; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02414; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2415; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2416; GFX803:       atomicrmw.end:2417; GFX803-NEXT:    ret double [[TMP6]]2418;2419; GFX906-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(2420; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2421; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82422; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]2423; GFX906:       atomicrmw.start:2424; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2425; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2426; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642427; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642428; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2429; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12430; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02431; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2432; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2433; GFX906:       atomicrmw.end:2434; GFX906-NEXT:    ret double [[TMP6]]2435;2436; GFX908-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(2437; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2438; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82439; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]2440; GFX908:       atomicrmw.start:2441; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2442; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2443; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642444; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642445; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2446; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12447; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02448; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2449; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2450; GFX908:       atomicrmw.end:2451; GFX908-NEXT:    ret double [[TMP6]]2452;2453; GFX90A-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(2454; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2455; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82456; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]2457; GFX90A:       atomicrmw.start:2458; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2459; GFX90A-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2460; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642461; GFX90A-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642462; GFX90A-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2463; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12464; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02465; GFX90A-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2466; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2467; GFX90A:       atomicrmw.end:2468; GFX90A-NEXT:    ret double [[TMP6]]2469;2470; GFX942-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(2471; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2472; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]2473; GFX942-NEXT:    ret double [[RES]]2474;2475; GFX10-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(2476; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2477; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82478; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]2479; GFX10:       atomicrmw.start:2480; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2481; GFX10-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2482; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642483; GFX10-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642484; GFX10-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2485; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12486; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02487; GFX10-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2488; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2489; GFX10:       atomicrmw.end:2490; GFX10-NEXT:    ret double [[TMP6]]2491;2492; GFX11-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(2493; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2494; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82495; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2496; GFX11:       atomicrmw.start:2497; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2498; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2499; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642500; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642501; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2502; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12503; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02504; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2505; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2506; GFX11:       atomicrmw.end:2507; GFX11-NEXT:    ret double [[TMP6]]2508;2509; GFX12-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(2510; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2511; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82512; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2513; GFX12:       atomicrmw.start:2514; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2515; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2516; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642517; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642518; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2519; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12520; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02521; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2522; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2523; GFX12:       atomicrmw.end:2524; GFX12-NEXT:    ret double [[TMP6]]2525;2526  %res = atomicrmw fmax ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !02527  ret double %res2528}2529 2530define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {2531; GFX803-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2532; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2533; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82534; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]2535; GFX803:       atomicrmw.start:2536; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2537; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2538; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642539; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642540; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2541; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12542; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02543; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2544; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2545; GFX803:       atomicrmw.end:2546; GFX803-NEXT:    ret double [[TMP6]]2547;2548; GFX906-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2549; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2550; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82551; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]2552; GFX906:       atomicrmw.start:2553; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2554; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2555; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642556; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642557; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2558; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12559; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02560; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2561; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2562; GFX906:       atomicrmw.end:2563; GFX906-NEXT:    ret double [[TMP6]]2564;2565; GFX908-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2566; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2567; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82568; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]2569; GFX908:       atomicrmw.start:2570; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2571; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2572; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642573; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642574; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2575; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12576; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02577; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2578; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2579; GFX908:       atomicrmw.end:2580; GFX908-NEXT:    ret double [[TMP6]]2581;2582; GFX90A-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2583; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2584; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]2585; GFX90A-NEXT:    ret double [[RES]]2586;2587; GFX942-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2588; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2589; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]2590; GFX942-NEXT:    ret double [[RES]]2591;2592; GFX10-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2593; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2594; GFX10-NEXT:    [[RES:%.*]] = atomicrmw fmax ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]2595; GFX10-NEXT:    ret double [[RES]]2596;2597; GFX11-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2598; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2599; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82600; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2601; GFX11:       atomicrmw.start:2602; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2603; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2604; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642605; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642606; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2607; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12608; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02609; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2610; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2611; GFX11:       atomicrmw.end:2612; GFX11-NEXT:    ret double [[TMP6]]2613;2614; GFX12-LABEL: define double @test_atomicrmw_fmax_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(2615; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2616; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82617; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2618; GFX12:       atomicrmw.start:2619; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2620; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[LOADED]], double [[VALUE]])2621; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642622; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642623; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]2624; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12625; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02626; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2627; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2628; GFX12:       atomicrmw.end:2629; GFX12-NEXT:    ret double [[TMP6]]2630;2631  %res = atomicrmw fmax ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !02632  ret double %res2633}2634 2635;---------------------------------------------------------------------2636; atomicrmw fmin2637;---------------------------------------------------------------------2638 2639define double @test_atomicrmw_fmin_f64_global_agent(ptr addrspace(1) %ptr, double %value) {2640; GFX803-LABEL: define double @test_atomicrmw_fmin_f64_global_agent(2641; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2642; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82643; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]2644; GFX803:       atomicrmw.start:2645; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2646; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2647; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642648; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642649; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82650; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12651; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02652; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2653; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2654; GFX803:       atomicrmw.end:2655; GFX803-NEXT:    ret double [[TMP6]]2656;2657; GFX906-LABEL: define double @test_atomicrmw_fmin_f64_global_agent(2658; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2659; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82660; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]2661; GFX906:       atomicrmw.start:2662; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2663; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2664; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642665; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642666; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82667; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12668; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02669; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2670; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2671; GFX906:       atomicrmw.end:2672; GFX906-NEXT:    ret double [[TMP6]]2673;2674; GFX908-LABEL: define double @test_atomicrmw_fmin_f64_global_agent(2675; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2676; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82677; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]2678; GFX908:       atomicrmw.start:2679; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2680; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2681; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642682; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642683; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82684; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12685; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02686; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2687; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2688; GFX908:       atomicrmw.end:2689; GFX908-NEXT:    ret double [[TMP6]]2690;2691; GFX90A-LABEL: define double @test_atomicrmw_fmin_f64_global_agent(2692; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2693; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82694; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]2695; GFX90A:       atomicrmw.start:2696; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2697; GFX90A-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2698; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642699; GFX90A-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642700; GFX90A-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82701; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12702; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02703; GFX90A-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2704; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2705; GFX90A:       atomicrmw.end:2706; GFX90A-NEXT:    ret double [[TMP6]]2707;2708; GFX942-LABEL: define double @test_atomicrmw_fmin_f64_global_agent(2709; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2710; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 82711; GFX942-NEXT:    ret double [[RES]]2712;2713; GFX10-LABEL: define double @test_atomicrmw_fmin_f64_global_agent(2714; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2715; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82716; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]2717; GFX10:       atomicrmw.start:2718; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2719; GFX10-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2720; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642721; GFX10-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642722; GFX10-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82723; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12724; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02725; GFX10-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2726; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2727; GFX10:       atomicrmw.end:2728; GFX10-NEXT:    ret double [[TMP6]]2729;2730; GFX11-LABEL: define double @test_atomicrmw_fmin_f64_global_agent(2731; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2732; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82733; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2734; GFX11:       atomicrmw.start:2735; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2736; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2737; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642738; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642739; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82740; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12741; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02742; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2743; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2744; GFX11:       atomicrmw.end:2745; GFX11-NEXT:    ret double [[TMP6]]2746;2747; GFX12-LABEL: define double @test_atomicrmw_fmin_f64_global_agent(2748; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2749; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82750; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2751; GFX12:       atomicrmw.start:2752; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2753; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2754; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642755; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642756; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 82757; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12758; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02759; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2760; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2761; GFX12:       atomicrmw.end:2762; GFX12-NEXT:    ret double [[TMP6]]2763;2764  %res = atomicrmw fmin ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst2765  ret double %res2766}2767 2768define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {2769; GFX803-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(2770; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2771; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82772; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]2773; GFX803:       atomicrmw.start:2774; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2775; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2776; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642777; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642778; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2779; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12780; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02781; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2782; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2783; GFX803:       atomicrmw.end:2784; GFX803-NEXT:    ret double [[TMP6]]2785;2786; GFX906-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(2787; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2788; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82789; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]2790; GFX906:       atomicrmw.start:2791; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2792; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2793; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642794; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642795; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2796; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12797; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02798; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2799; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2800; GFX906:       atomicrmw.end:2801; GFX906-NEXT:    ret double [[TMP6]]2802;2803; GFX908-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(2804; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2805; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82806; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]2807; GFX908:       atomicrmw.start:2808; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2809; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2810; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642811; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642812; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2813; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12814; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02815; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2816; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2817; GFX908:       atomicrmw.end:2818; GFX908-NEXT:    ret double [[TMP6]]2819;2820; GFX90A-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(2821; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2822; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2823; GFX90A-NEXT:    ret double [[RES]]2824;2825; GFX942-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(2826; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2827; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2828; GFX942-NEXT:    ret double [[RES]]2829;2830; GFX10-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(2831; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2832; GFX10-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2833; GFX10-NEXT:    ret double [[RES]]2834;2835; GFX11-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(2836; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2837; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82838; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2839; GFX11:       atomicrmw.start:2840; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2841; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2842; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642843; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642844; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2845; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12846; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02847; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2848; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2849; GFX11:       atomicrmw.end:2850; GFX11-NEXT:    ret double [[TMP6]]2851;2852; GFX12-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory(2853; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2854; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82855; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2856; GFX12:       atomicrmw.start:2857; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2858; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2859; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642860; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642861; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]2862; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12863; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02864; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2865; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2866; GFX12:       atomicrmw.end:2867; GFX12-NEXT:    ret double [[TMP6]]2868;2869  %res = atomicrmw fmin ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02870  ret double %res2871}2872 2873define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {2874; GFX803-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(2875; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2876; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82877; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]2878; GFX803:       atomicrmw.start:2879; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2880; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2881; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642882; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642883; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2884; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12885; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02886; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2887; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2888; GFX803:       atomicrmw.end:2889; GFX803-NEXT:    ret double [[TMP6]]2890;2891; GFX906-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(2892; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2893; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82894; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]2895; GFX906:       atomicrmw.start:2896; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2897; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2898; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642899; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642900; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2901; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12902; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02903; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2904; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2905; GFX906:       atomicrmw.end:2906; GFX906-NEXT:    ret double [[TMP6]]2907;2908; GFX908-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(2909; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2910; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82911; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]2912; GFX908:       atomicrmw.start:2913; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2914; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2915; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642916; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642917; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2918; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12919; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02920; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2921; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2922; GFX908:       atomicrmw.end:2923; GFX908-NEXT:    ret double [[TMP6]]2924;2925; GFX90A-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(2926; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2927; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82928; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]2929; GFX90A:       atomicrmw.start:2930; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[RES:%.*]], [[ATOMICRMW_START]] ]2931; GFX90A-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2932; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642933; GFX90A-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642934; GFX90A-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2935; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12936; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02937; GFX90A-NEXT:    [[RES]] = bitcast i64 [[NEWLOADED]] to double2938; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2939; GFX90A:       atomicrmw.end:2940; GFX90A-NEXT:    ret double [[RES]]2941;2942; GFX942-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(2943; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2944; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2945; GFX942-NEXT:    ret double [[RES]]2946;2947; GFX10-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(2948; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2949; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82950; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]2951; GFX10:       atomicrmw.start:2952; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[RES:%.*]], [[ATOMICRMW_START]] ]2953; GFX10-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2954; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642955; GFX10-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642956; GFX10-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2957; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12958; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02959; GFX10-NEXT:    [[RES]] = bitcast i64 [[NEWLOADED]] to double2960; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2961; GFX10:       atomicrmw.end:2962; GFX10-NEXT:    ret double [[RES]]2963;2964; GFX11-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(2965; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2966; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82967; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]2968; GFX11:       atomicrmw.start:2969; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2970; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2971; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642972; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642973; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2974; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12975; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02976; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2977; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2978; GFX11:       atomicrmw.end:2979; GFX11-NEXT:    ret double [[TMP6]]2980;2981; GFX12-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_remote_memory(2982; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {2983; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 82984; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]2985; GFX12:       atomicrmw.start:2986; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]2987; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])2988; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i642989; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i642990; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]2991; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 12992; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 02993; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double2994; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]2995; GFX12:       atomicrmw.end:2996; GFX12-NEXT:    ret double [[TMP6]]2997;2998  %res = atomicrmw fmin ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.remote.memory !02999  ret double %res3000}3001 3002define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {3003; GFX803-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3004; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3005; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83006; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]3007; GFX803:       atomicrmw.start:3008; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3009; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3010; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643011; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643012; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3013; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13014; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03015; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3016; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3017; GFX803:       atomicrmw.end:3018; GFX803-NEXT:    ret double [[TMP6]]3019;3020; GFX906-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3021; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3022; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83023; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]3024; GFX906:       atomicrmw.start:3025; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3026; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3027; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643028; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643029; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3030; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13031; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03032; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3033; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3034; GFX906:       atomicrmw.end:3035; GFX906-NEXT:    ret double [[TMP6]]3036;3037; GFX908-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3038; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3039; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83040; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]3041; GFX908:       atomicrmw.start:3042; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3043; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3044; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643045; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643046; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3047; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13048; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03049; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3050; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3051; GFX908:       atomicrmw.end:3052; GFX908-NEXT:    ret double [[TMP6]]3053;3054; GFX90A-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3055; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3056; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3057; GFX90A-NEXT:    ret double [[RES]]3058;3059; GFX942-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3060; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3061; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3062; GFX942-NEXT:    ret double [[RES]]3063;3064; GFX10-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3065; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3066; GFX10-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3067; GFX10-NEXT:    ret double [[RES]]3068;3069; GFX11-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3070; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3071; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83072; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]3073; GFX11:       atomicrmw.start:3074; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3075; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3076; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643077; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643078; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3079; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13080; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03081; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3082; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3083; GFX11:       atomicrmw.end:3084; GFX11-NEXT:    ret double [[TMP6]]3085;3086; GFX12-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3087; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3088; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83089; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]3090; GFX12:       atomicrmw.start:3091; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3092; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3093; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643094; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643095; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3096; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13097; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03098; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3099; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3100; GFX12:       atomicrmw.end:3101; GFX12-NEXT:    ret double [[TMP6]]3102;3103  %res = atomicrmw fmin ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !03104  ret double %res3105}3106 3107define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(ptr addrspace(1) %ptr, double %value) {3108; GFX803-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(3109; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3110; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83111; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]3112; GFX803:       atomicrmw.start:3113; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3114; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3115; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643116; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643117; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 83118; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13119; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03120; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3121; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3122; GFX803:       atomicrmw.end:3123; GFX803-NEXT:    ret double [[TMP6]]3124;3125; GFX906-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(3126; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3127; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83128; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]3129; GFX906:       atomicrmw.start:3130; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3131; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3132; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643133; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643134; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 83135; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13136; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03137; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3138; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3139; GFX906:       atomicrmw.end:3140; GFX906-NEXT:    ret double [[TMP6]]3141;3142; GFX908-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(3143; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3144; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83145; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]3146; GFX908:       atomicrmw.start:3147; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3148; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3149; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643150; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643151; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 83152; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13153; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03154; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3155; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3156; GFX908:       atomicrmw.end:3157; GFX908-NEXT:    ret double [[TMP6]]3158;3159; GFX90A-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(3160; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3161; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83162; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]3163; GFX90A:       atomicrmw.start:3164; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3165; GFX90A-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3166; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643167; GFX90A-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643168; GFX90A-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 83169; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13170; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03171; GFX90A-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3172; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3173; GFX90A:       atomicrmw.end:3174; GFX90A-NEXT:    ret double [[TMP6]]3175;3176; GFX942-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(3177; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3178; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.ignore.denormal.mode [[META0]]3179; GFX942-NEXT:    ret double [[RES]]3180;3181; GFX10-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(3182; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3183; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83184; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]3185; GFX10:       atomicrmw.start:3186; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3187; GFX10-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3188; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643189; GFX10-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643190; GFX10-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 83191; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13192; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03193; GFX10-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3194; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3195; GFX10:       atomicrmw.end:3196; GFX10-NEXT:    ret double [[TMP6]]3197;3198; GFX11-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(3199; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3200; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83201; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]3202; GFX11:       atomicrmw.start:3203; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3204; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3205; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643206; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643207; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 83208; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13209; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03210; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3211; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3212; GFX11:       atomicrmw.end:3213; GFX11-NEXT:    ret double [[TMP6]]3214;3215; GFX12-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode(3216; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3217; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83218; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]3219; GFX12:       atomicrmw.start:3220; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3221; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3222; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643223; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643224; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 83225; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13226; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03227; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3228; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3229; GFX12:       atomicrmw.end:3230; GFX12-NEXT:    ret double [[TMP6]]3231;3232  %res = atomicrmw fmin ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.ignore.denormal.mode !03233  ret double %res3234}3235 3236define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(ptr addrspace(1) %ptr, double %value) {3237; GFX803-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(3238; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3239; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83240; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]3241; GFX803:       atomicrmw.start:3242; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3243; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3244; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643245; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643246; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]3247; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13248; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03249; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3250; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3251; GFX803:       atomicrmw.end:3252; GFX803-NEXT:    ret double [[TMP6]]3253;3254; GFX906-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(3255; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3256; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83257; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]3258; GFX906:       atomicrmw.start:3259; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3260; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3261; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643262; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643263; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]3264; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13265; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03266; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3267; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3268; GFX906:       atomicrmw.end:3269; GFX906-NEXT:    ret double [[TMP6]]3270;3271; GFX908-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(3272; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3273; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83274; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]3275; GFX908:       atomicrmw.start:3276; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3277; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3278; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643279; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643280; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]3281; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13282; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03283; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3284; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3285; GFX908:       atomicrmw.end:3286; GFX908-NEXT:    ret double [[TMP6]]3287;3288; GFX90A-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(3289; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3290; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]3291; GFX90A-NEXT:    ret double [[RES]]3292;3293; GFX942-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(3294; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3295; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]3296; GFX942-NEXT:    ret double [[RES]]3297;3298; GFX10-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(3299; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3300; GFX10-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]3301; GFX10-NEXT:    ret double [[RES]]3302;3303; GFX11-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(3304; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3305; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83306; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]3307; GFX11:       atomicrmw.start:3308; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3309; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3310; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643311; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643312; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]3313; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13314; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03315; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3316; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3317; GFX11:       atomicrmw.end:3318; GFX11-NEXT:    ret double [[TMP6]]3319;3320; GFX12-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory(3321; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3322; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83323; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]3324; GFX12:       atomicrmw.start:3325; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3326; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3327; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643328; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643329; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]]3330; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13331; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03332; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3333; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3334; GFX12:       atomicrmw.end:3335; GFX12-NEXT:    ret double [[TMP6]]3336;3337  %res = atomicrmw fmin ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !03338  ret double %res3339}3340 3341define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {3342; GFX803-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(3343; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3344; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83345; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]3346; GFX803:       atomicrmw.start:3347; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3348; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3349; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643350; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643351; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]3352; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13353; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03354; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3355; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3356; GFX803:       atomicrmw.end:3357; GFX803-NEXT:    ret double [[TMP6]]3358;3359; GFX906-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(3360; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3361; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83362; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]3363; GFX906:       atomicrmw.start:3364; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3365; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3366; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643367; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643368; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]3369; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13370; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03371; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3372; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3373; GFX906:       atomicrmw.end:3374; GFX906-NEXT:    ret double [[TMP6]]3375;3376; GFX908-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(3377; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3378; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83379; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]3380; GFX908:       atomicrmw.start:3381; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3382; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3383; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643384; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643385; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]3386; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13387; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03388; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3389; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3390; GFX908:       atomicrmw.end:3391; GFX908-NEXT:    ret double [[TMP6]]3392;3393; GFX90A-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(3394; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3395; GFX90A-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83396; GFX90A-NEXT:    br label [[ATOMICRMW_START:%.*]]3397; GFX90A:       atomicrmw.start:3398; GFX90A-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3399; GFX90A-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3400; GFX90A-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643401; GFX90A-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643402; GFX90A-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]3403; GFX90A-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13404; GFX90A-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03405; GFX90A-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3406; GFX90A-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3407; GFX90A:       atomicrmw.end:3408; GFX90A-NEXT:    ret double [[TMP6]]3409;3410; GFX942-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(3411; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3412; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]3413; GFX942-NEXT:    ret double [[RES]]3414;3415; GFX10-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(3416; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3417; GFX10-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83418; GFX10-NEXT:    br label [[ATOMICRMW_START:%.*]]3419; GFX10:       atomicrmw.start:3420; GFX10-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3421; GFX10-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3422; GFX10-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643423; GFX10-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643424; GFX10-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]3425; GFX10-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13426; GFX10-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03427; GFX10-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3428; GFX10-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3429; GFX10:       atomicrmw.end:3430; GFX10-NEXT:    ret double [[TMP6]]3431;3432; GFX11-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(3433; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3434; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83435; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]3436; GFX11:       atomicrmw.start:3437; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3438; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3439; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643440; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643441; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]3442; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13443; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03444; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3445; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3446; GFX11:       atomicrmw.end:3447; GFX11-NEXT:    ret double [[TMP6]]3448;3449; GFX12-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_remote_memory(3450; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3451; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83452; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]3453; GFX12:       atomicrmw.start:3454; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3455; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3456; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643457; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643458; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.remote.memory [[META0]]3459; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13460; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03461; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3462; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3463; GFX12:       atomicrmw.end:3464; GFX12-NEXT:    ret double [[TMP6]]3465;3466  %res = atomicrmw fmin ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !03467  ret double %res3468}3469 3470define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(1) %ptr, double %value) {3471; GFX803-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3472; GFX803-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3473; GFX803-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83474; GFX803-NEXT:    br label [[ATOMICRMW_START:%.*]]3475; GFX803:       atomicrmw.start:3476; GFX803-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3477; GFX803-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3478; GFX803-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643479; GFX803-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643480; GFX803-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3481; GFX803-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13482; GFX803-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03483; GFX803-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3484; GFX803-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3485; GFX803:       atomicrmw.end:3486; GFX803-NEXT:    ret double [[TMP6]]3487;3488; GFX906-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3489; GFX906-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3490; GFX906-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83491; GFX906-NEXT:    br label [[ATOMICRMW_START:%.*]]3492; GFX906:       atomicrmw.start:3493; GFX906-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3494; GFX906-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3495; GFX906-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643496; GFX906-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643497; GFX906-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3498; GFX906-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13499; GFX906-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03500; GFX906-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3501; GFX906-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3502; GFX906:       atomicrmw.end:3503; GFX906-NEXT:    ret double [[TMP6]]3504;3505; GFX908-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3506; GFX908-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3507; GFX908-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83508; GFX908-NEXT:    br label [[ATOMICRMW_START:%.*]]3509; GFX908:       atomicrmw.start:3510; GFX908-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3511; GFX908-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3512; GFX908-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643513; GFX908-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643514; GFX908-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3515; GFX908-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13516; GFX908-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03517; GFX908-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3518; GFX908-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3519; GFX908:       atomicrmw.end:3520; GFX908-NEXT:    ret double [[TMP6]]3521;3522; GFX90A-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3523; GFX90A-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3524; GFX90A-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]3525; GFX90A-NEXT:    ret double [[RES]]3526;3527; GFX942-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3528; GFX942-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3529; GFX942-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]3530; GFX942-NEXT:    ret double [[RES]]3531;3532; GFX10-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3533; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3534; GFX10-NEXT:    [[RES:%.*]] = atomicrmw fmin ptr addrspace(1) [[PTR]], double [[VALUE]] syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]3535; GFX10-NEXT:    ret double [[RES]]3536;3537; GFX11-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3538; GFX11-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3539; GFX11-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83540; GFX11-NEXT:    br label [[ATOMICRMW_START:%.*]]3541; GFX11:       atomicrmw.start:3542; GFX11-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3543; GFX11-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3544; GFX11-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643545; GFX11-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643546; GFX11-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3547; GFX11-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13548; GFX11-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03549; GFX11-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3550; GFX11-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3551; GFX11:       atomicrmw.end:3552; GFX11-NEXT:    ret double [[TMP6]]3553;3554; GFX12-LABEL: define double @test_atomicrmw_fmin_f64_global_agent__amdgpu_ignore_denormal_mode__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(3555; GFX12-SAME: ptr addrspace(1) [[PTR:%.*]], double [[VALUE:%.*]]) #[[ATTR0]] {3556; GFX12-NEXT:    [[TMP1:%.*]] = load double, ptr addrspace(1) [[PTR]], align 83557; GFX12-NEXT:    br label [[ATOMICRMW_START:%.*]]3558; GFX12:       atomicrmw.start:3559; GFX12-NEXT:    [[LOADED:%.*]] = phi double [ [[TMP1]], [[TMP0:%.*]] ], [ [[TMP6:%.*]], [[ATOMICRMW_START]] ]3560; GFX12-NEXT:    [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[LOADED]], double [[VALUE]])3561; GFX12-NEXT:    [[TMP3:%.*]] = bitcast double [[TMP2]] to i643562; GFX12-NEXT:    [[TMP4:%.*]] = bitcast double [[LOADED]] to i643563; GFX12-NEXT:    [[TMP5:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 [[TMP4]], i64 [[TMP3]] syncscope("agent") seq_cst seq_cst, align 8, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.no.remote.memory [[META0]]3564; GFX12-NEXT:    [[SUCCESS:%.*]] = extractvalue { i64, i1 } [[TMP5]], 13565; GFX12-NEXT:    [[NEWLOADED:%.*]] = extractvalue { i64, i1 } [[TMP5]], 03566; GFX12-NEXT:    [[TMP6]] = bitcast i64 [[NEWLOADED]] to double3567; GFX12-NEXT:    br i1 [[SUCCESS]], label [[ATOMICRMW_END:%.*]], label [[ATOMICRMW_START]]3568; GFX12:       atomicrmw.end:3569; GFX12-NEXT:    ret double [[TMP6]]3570;3571  %res = atomicrmw fmin ptr addrspace(1) %ptr, double %value syncscope("agent") seq_cst, align 8, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !03572  ret double %res3573}3574 3575attributes #0 = { "denormal-fp-mode"="preserve-sign,preserve-sign" }3576attributes #1 = { "denormal-fp-mode"="dynamic,dynamic" }3577 3578!0 = !{}3579;.3580; GFX803: [[META0]] = !{}3581;.3582; GFX906: [[META0]] = !{}3583;.3584; GFX908: [[META0]] = !{}3585;.3586; GFX90A: [[META0]] = !{}3587;.3588; GFX942: [[META0]] = !{}3589;.3590; GFX10: [[META0]] = !{}3591;.3592; GFX11: [[META0]] = !{}3593;.3594; GFX12: [[META0]] = !{}3595;.3596