2824 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64F3; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64D4 5define float @float_fadd_acquire(ptr %p) nounwind {6; LA64F-LABEL: float_fadd_acquire:7; LA64F: # %bb.0:8; LA64F-NEXT: fld.s $fa0, $a0, 09; LA64F-NEXT: lu12i.w $a1, 26009610; LA64F-NEXT: movgr2fr.w $fa1, $a111; LA64F-NEXT: .p2align 4, , 1612; LA64F-NEXT: .LBB0_1: # %atomicrmw.start13; LA64F-NEXT: # =>This Loop Header: Depth=114; LA64F-NEXT: # Child Loop BB0_3 Depth 215; LA64F-NEXT: fadd.s $fa2, $fa0, $fa116; LA64F-NEXT: movfr2gr.s $a1, $fa217; LA64F-NEXT: movfr2gr.s $a2, $fa018; LA64F-NEXT: .LBB0_3: # %atomicrmw.start19; LA64F-NEXT: # Parent Loop BB0_1 Depth=120; LA64F-NEXT: # => This Inner Loop Header: Depth=221; LA64F-NEXT: ll.w $a3, $a0, 022; LA64F-NEXT: bne $a3, $a2, .LBB0_523; LA64F-NEXT: # %bb.4: # %atomicrmw.start24; LA64F-NEXT: # in Loop: Header=BB0_3 Depth=225; LA64F-NEXT: move $a4, $a126; LA64F-NEXT: sc.w $a4, $a0, 027; LA64F-NEXT: beq $a4, $zero, .LBB0_328; LA64F-NEXT: b .LBB0_629; LA64F-NEXT: .LBB0_5: # %atomicrmw.start30; LA64F-NEXT: # in Loop: Header=BB0_1 Depth=131; LA64F-NEXT: dbar 2032; LA64F-NEXT: .LBB0_6: # %atomicrmw.start33; LA64F-NEXT: # in Loop: Header=BB0_1 Depth=134; LA64F-NEXT: movgr2fr.w $fa0, $a335; LA64F-NEXT: bne $a3, $a2, .LBB0_136; LA64F-NEXT: # %bb.2: # %atomicrmw.end37; LA64F-NEXT: ret38;39; LA64D-LABEL: float_fadd_acquire:40; LA64D: # %bb.0:41; LA64D-NEXT: fld.s $fa0, $a0, 042; LA64D-NEXT: vldi $vr1, -116843; LA64D-NEXT: .p2align 4, , 1644; LA64D-NEXT: .LBB0_1: # %atomicrmw.start45; LA64D-NEXT: # =>This Loop Header: Depth=146; LA64D-NEXT: # Child Loop BB0_3 Depth 247; LA64D-NEXT: fadd.s $fa2, $fa0, $fa148; LA64D-NEXT: movfr2gr.s $a1, $fa249; LA64D-NEXT: movfr2gr.s $a2, $fa050; LA64D-NEXT: .LBB0_3: # %atomicrmw.start51; LA64D-NEXT: # Parent Loop BB0_1 Depth=152; LA64D-NEXT: # => This Inner Loop Header: Depth=253; LA64D-NEXT: ll.w $a3, $a0, 054; LA64D-NEXT: bne $a3, $a2, .LBB0_555; LA64D-NEXT: # %bb.4: # %atomicrmw.start56; LA64D-NEXT: # in Loop: Header=BB0_3 Depth=257; LA64D-NEXT: move $a4, $a158; LA64D-NEXT: sc.w $a4, $a0, 059; LA64D-NEXT: beq $a4, $zero, .LBB0_360; LA64D-NEXT: b .LBB0_661; LA64D-NEXT: .LBB0_5: # %atomicrmw.start62; LA64D-NEXT: # in Loop: Header=BB0_1 Depth=163; LA64D-NEXT: dbar 2064; LA64D-NEXT: .LBB0_6: # %atomicrmw.start65; LA64D-NEXT: # in Loop: Header=BB0_1 Depth=166; LA64D-NEXT: movgr2fr.w $fa0, $a367; LA64D-NEXT: bne $a3, $a2, .LBB0_168; LA64D-NEXT: # %bb.2: # %atomicrmw.end69; LA64D-NEXT: ret70 %v = atomicrmw fadd ptr %p, float 1.0 acquire, align 471 ret float %v72}73 74define float @float_fsub_acquire(ptr %p) nounwind {75; LA64F-LABEL: float_fsub_acquire:76; LA64F: # %bb.0:77; LA64F-NEXT: fld.s $fa0, $a0, 078; LA64F-NEXT: lu12i.w $a1, -26419279; LA64F-NEXT: movgr2fr.w $fa1, $a180; LA64F-NEXT: .p2align 4, , 1681; LA64F-NEXT: .LBB1_1: # %atomicrmw.start82; LA64F-NEXT: # =>This Loop Header: Depth=183; LA64F-NEXT: # Child Loop BB1_3 Depth 284; LA64F-NEXT: fadd.s $fa2, $fa0, $fa185; LA64F-NEXT: movfr2gr.s $a1, $fa286; LA64F-NEXT: movfr2gr.s $a2, $fa087; LA64F-NEXT: .LBB1_3: # %atomicrmw.start88; LA64F-NEXT: # Parent Loop BB1_1 Depth=189; LA64F-NEXT: # => This Inner Loop Header: Depth=290; LA64F-NEXT: ll.w $a3, $a0, 091; LA64F-NEXT: bne $a3, $a2, .LBB1_592; LA64F-NEXT: # %bb.4: # %atomicrmw.start93; LA64F-NEXT: # in Loop: Header=BB1_3 Depth=294; LA64F-NEXT: move $a4, $a195; LA64F-NEXT: sc.w $a4, $a0, 096; LA64F-NEXT: beq $a4, $zero, .LBB1_397; LA64F-NEXT: b .LBB1_698; LA64F-NEXT: .LBB1_5: # %atomicrmw.start99; LA64F-NEXT: # in Loop: Header=BB1_1 Depth=1100; LA64F-NEXT: dbar 20101; LA64F-NEXT: .LBB1_6: # %atomicrmw.start102; LA64F-NEXT: # in Loop: Header=BB1_1 Depth=1103; LA64F-NEXT: movgr2fr.w $fa0, $a3104; LA64F-NEXT: bne $a3, $a2, .LBB1_1105; LA64F-NEXT: # %bb.2: # %atomicrmw.end106; LA64F-NEXT: ret107;108; LA64D-LABEL: float_fsub_acquire:109; LA64D: # %bb.0:110; LA64D-NEXT: fld.s $fa0, $a0, 0111; LA64D-NEXT: vldi $vr1, -1040112; LA64D-NEXT: .p2align 4, , 16113; LA64D-NEXT: .LBB1_1: # %atomicrmw.start114; LA64D-NEXT: # =>This Loop Header: Depth=1115; LA64D-NEXT: # Child Loop BB1_3 Depth 2116; LA64D-NEXT: fadd.s $fa2, $fa0, $fa1117; LA64D-NEXT: movfr2gr.s $a1, $fa2118; LA64D-NEXT: movfr2gr.s $a2, $fa0119; LA64D-NEXT: .LBB1_3: # %atomicrmw.start120; LA64D-NEXT: # Parent Loop BB1_1 Depth=1121; LA64D-NEXT: # => This Inner Loop Header: Depth=2122; LA64D-NEXT: ll.w $a3, $a0, 0123; LA64D-NEXT: bne $a3, $a2, .LBB1_5124; LA64D-NEXT: # %bb.4: # %atomicrmw.start125; LA64D-NEXT: # in Loop: Header=BB1_3 Depth=2126; LA64D-NEXT: move $a4, $a1127; LA64D-NEXT: sc.w $a4, $a0, 0128; LA64D-NEXT: beq $a4, $zero, .LBB1_3129; LA64D-NEXT: b .LBB1_6130; LA64D-NEXT: .LBB1_5: # %atomicrmw.start131; LA64D-NEXT: # in Loop: Header=BB1_1 Depth=1132; LA64D-NEXT: dbar 20133; LA64D-NEXT: .LBB1_6: # %atomicrmw.start134; LA64D-NEXT: # in Loop: Header=BB1_1 Depth=1135; LA64D-NEXT: movgr2fr.w $fa0, $a3136; LA64D-NEXT: bne $a3, $a2, .LBB1_1137; LA64D-NEXT: # %bb.2: # %atomicrmw.end138; LA64D-NEXT: ret139 %v = atomicrmw fsub ptr %p, float 1.0 acquire, align 4140 ret float %v141}142 143define float @float_fmin_acquire(ptr %p) nounwind {144; LA64F-LABEL: float_fmin_acquire:145; LA64F: # %bb.0:146; LA64F-NEXT: fld.s $fa0, $a0, 0147; LA64F-NEXT: lu12i.w $a1, 260096148; LA64F-NEXT: movgr2fr.w $fa1, $a1149; LA64F-NEXT: .p2align 4, , 16150; LA64F-NEXT: .LBB2_1: # %atomicrmw.start151; LA64F-NEXT: # =>This Loop Header: Depth=1152; LA64F-NEXT: # Child Loop BB2_3 Depth 2153; LA64F-NEXT: fmin.s $fa2, $fa0, $fa1154; LA64F-NEXT: movfr2gr.s $a1, $fa2155; LA64F-NEXT: movfr2gr.s $a2, $fa0156; LA64F-NEXT: .LBB2_3: # %atomicrmw.start157; LA64F-NEXT: # Parent Loop BB2_1 Depth=1158; LA64F-NEXT: # => This Inner Loop Header: Depth=2159; LA64F-NEXT: ll.w $a3, $a0, 0160; LA64F-NEXT: bne $a3, $a2, .LBB2_5161; LA64F-NEXT: # %bb.4: # %atomicrmw.start162; LA64F-NEXT: # in Loop: Header=BB2_3 Depth=2163; LA64F-NEXT: move $a4, $a1164; LA64F-NEXT: sc.w $a4, $a0, 0165; LA64F-NEXT: beq $a4, $zero, .LBB2_3166; LA64F-NEXT: b .LBB2_6167; LA64F-NEXT: .LBB2_5: # %atomicrmw.start168; LA64F-NEXT: # in Loop: Header=BB2_1 Depth=1169; LA64F-NEXT: dbar 20170; LA64F-NEXT: .LBB2_6: # %atomicrmw.start171; LA64F-NEXT: # in Loop: Header=BB2_1 Depth=1172; LA64F-NEXT: movgr2fr.w $fa0, $a3173; LA64F-NEXT: bne $a3, $a2, .LBB2_1174; LA64F-NEXT: # %bb.2: # %atomicrmw.end175; LA64F-NEXT: ret176;177; LA64D-LABEL: float_fmin_acquire:178; LA64D: # %bb.0:179; LA64D-NEXT: fld.s $fa0, $a0, 0180; LA64D-NEXT: vldi $vr1, -1168181; LA64D-NEXT: .p2align 4, , 16182; LA64D-NEXT: .LBB2_1: # %atomicrmw.start183; LA64D-NEXT: # =>This Loop Header: Depth=1184; LA64D-NEXT: # Child Loop BB2_3 Depth 2185; LA64D-NEXT: fmin.s $fa2, $fa0, $fa1186; LA64D-NEXT: movfr2gr.s $a1, $fa2187; LA64D-NEXT: movfr2gr.s $a2, $fa0188; LA64D-NEXT: .LBB2_3: # %atomicrmw.start189; LA64D-NEXT: # Parent Loop BB2_1 Depth=1190; LA64D-NEXT: # => This Inner Loop Header: Depth=2191; LA64D-NEXT: ll.w $a3, $a0, 0192; LA64D-NEXT: bne $a3, $a2, .LBB2_5193; LA64D-NEXT: # %bb.4: # %atomicrmw.start194; LA64D-NEXT: # in Loop: Header=BB2_3 Depth=2195; LA64D-NEXT: move $a4, $a1196; LA64D-NEXT: sc.w $a4, $a0, 0197; LA64D-NEXT: beq $a4, $zero, .LBB2_3198; LA64D-NEXT: b .LBB2_6199; LA64D-NEXT: .LBB2_5: # %atomicrmw.start200; LA64D-NEXT: # in Loop: Header=BB2_1 Depth=1201; LA64D-NEXT: dbar 20202; LA64D-NEXT: .LBB2_6: # %atomicrmw.start203; LA64D-NEXT: # in Loop: Header=BB2_1 Depth=1204; LA64D-NEXT: movgr2fr.w $fa0, $a3205; LA64D-NEXT: bne $a3, $a2, .LBB2_1206; LA64D-NEXT: # %bb.2: # %atomicrmw.end207; LA64D-NEXT: ret208 %v = atomicrmw fmin ptr %p, float 1.0 acquire, align 4209 ret float %v210}211 212define float @float_fmax_acquire(ptr %p) nounwind {213; LA64F-LABEL: float_fmax_acquire:214; LA64F: # %bb.0:215; LA64F-NEXT: fld.s $fa0, $a0, 0216; LA64F-NEXT: lu12i.w $a1, 260096217; LA64F-NEXT: movgr2fr.w $fa1, $a1218; LA64F-NEXT: .p2align 4, , 16219; LA64F-NEXT: .LBB3_1: # %atomicrmw.start220; LA64F-NEXT: # =>This Loop Header: Depth=1221; LA64F-NEXT: # Child Loop BB3_3 Depth 2222; LA64F-NEXT: fmax.s $fa2, $fa0, $fa1223; LA64F-NEXT: movfr2gr.s $a1, $fa2224; LA64F-NEXT: movfr2gr.s $a2, $fa0225; LA64F-NEXT: .LBB3_3: # %atomicrmw.start226; LA64F-NEXT: # Parent Loop BB3_1 Depth=1227; LA64F-NEXT: # => This Inner Loop Header: Depth=2228; LA64F-NEXT: ll.w $a3, $a0, 0229; LA64F-NEXT: bne $a3, $a2, .LBB3_5230; LA64F-NEXT: # %bb.4: # %atomicrmw.start231; LA64F-NEXT: # in Loop: Header=BB3_3 Depth=2232; LA64F-NEXT: move $a4, $a1233; LA64F-NEXT: sc.w $a4, $a0, 0234; LA64F-NEXT: beq $a4, $zero, .LBB3_3235; LA64F-NEXT: b .LBB3_6236; LA64F-NEXT: .LBB3_5: # %atomicrmw.start237; LA64F-NEXT: # in Loop: Header=BB3_1 Depth=1238; LA64F-NEXT: dbar 20239; LA64F-NEXT: .LBB3_6: # %atomicrmw.start240; LA64F-NEXT: # in Loop: Header=BB3_1 Depth=1241; LA64F-NEXT: movgr2fr.w $fa0, $a3242; LA64F-NEXT: bne $a3, $a2, .LBB3_1243; LA64F-NEXT: # %bb.2: # %atomicrmw.end244; LA64F-NEXT: ret245;246; LA64D-LABEL: float_fmax_acquire:247; LA64D: # %bb.0:248; LA64D-NEXT: fld.s $fa0, $a0, 0249; LA64D-NEXT: vldi $vr1, -1168250; LA64D-NEXT: .p2align 4, , 16251; LA64D-NEXT: .LBB3_1: # %atomicrmw.start252; LA64D-NEXT: # =>This Loop Header: Depth=1253; LA64D-NEXT: # Child Loop BB3_3 Depth 2254; LA64D-NEXT: fmax.s $fa2, $fa0, $fa1255; LA64D-NEXT: movfr2gr.s $a1, $fa2256; LA64D-NEXT: movfr2gr.s $a2, $fa0257; LA64D-NEXT: .LBB3_3: # %atomicrmw.start258; LA64D-NEXT: # Parent Loop BB3_1 Depth=1259; LA64D-NEXT: # => This Inner Loop Header: Depth=2260; LA64D-NEXT: ll.w $a3, $a0, 0261; LA64D-NEXT: bne $a3, $a2, .LBB3_5262; LA64D-NEXT: # %bb.4: # %atomicrmw.start263; LA64D-NEXT: # in Loop: Header=BB3_3 Depth=2264; LA64D-NEXT: move $a4, $a1265; LA64D-NEXT: sc.w $a4, $a0, 0266; LA64D-NEXT: beq $a4, $zero, .LBB3_3267; LA64D-NEXT: b .LBB3_6268; LA64D-NEXT: .LBB3_5: # %atomicrmw.start269; LA64D-NEXT: # in Loop: Header=BB3_1 Depth=1270; LA64D-NEXT: dbar 20271; LA64D-NEXT: .LBB3_6: # %atomicrmw.start272; LA64D-NEXT: # in Loop: Header=BB3_1 Depth=1273; LA64D-NEXT: movgr2fr.w $fa0, $a3274; LA64D-NEXT: bne $a3, $a2, .LBB3_1275; LA64D-NEXT: # %bb.2: # %atomicrmw.end276; LA64D-NEXT: ret277 %v = atomicrmw fmax ptr %p, float 1.0 acquire, align 4278 ret float %v279}280 281define double @double_fadd_acquire(ptr %p) nounwind {282; LA64F-LABEL: double_fadd_acquire:283; LA64F: # %bb.0:284; LA64F-NEXT: addi.d $sp, $sp, -48285; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill286; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill287; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill288; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill289; LA64F-NEXT: move $fp, $a0290; LA64F-NEXT: ld.d $s1, $a0, 0291; LA64F-NEXT: lu52i.d $s0, $zero, 1023292; LA64F-NEXT: .p2align 4, , 16293; LA64F-NEXT: .LBB4_1: # %atomicrmw.start294; LA64F-NEXT: # =>This Inner Loop Header: Depth=1295; LA64F-NEXT: move $a0, $s1296; LA64F-NEXT: move $a1, $s0297; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)298; LA64F-NEXT: jirl $ra, $ra, 0299; LA64F-NEXT: st.d $s1, $sp, 8300; LA64F-NEXT: st.d $a0, $sp, 0301; LA64F-NEXT: ori $a0, $zero, 8302; LA64F-NEXT: addi.d $a2, $sp, 8303; LA64F-NEXT: addi.d $a3, $sp, 0304; LA64F-NEXT: ori $a4, $zero, 2305; LA64F-NEXT: ori $a5, $zero, 2306; LA64F-NEXT: move $a1, $fp307; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)308; LA64F-NEXT: jirl $ra, $ra, 0309; LA64F-NEXT: ld.d $s1, $sp, 8310; LA64F-NEXT: beqz $a0, .LBB4_1311; LA64F-NEXT: # %bb.2: # %atomicrmw.end312; LA64F-NEXT: move $a0, $s1313; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload314; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload315; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload316; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload317; LA64F-NEXT: addi.d $sp, $sp, 48318; LA64F-NEXT: ret319;320; LA64D-LABEL: double_fadd_acquire:321; LA64D: # %bb.0:322; LA64D-NEXT: addi.d $sp, $sp, -32323; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill324; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill325; LA64D-NEXT: move $fp, $a0326; LA64D-NEXT: fld.d $fa0, $a0, 0327; LA64D-NEXT: .p2align 4, , 16328; LA64D-NEXT: .LBB4_1: # %atomicrmw.start329; LA64D-NEXT: # =>This Inner Loop Header: Depth=1330; LA64D-NEXT: vldi $vr1, -912331; LA64D-NEXT: fadd.d $fa1, $fa0, $fa1332; LA64D-NEXT: fst.d $fa0, $sp, 8333; LA64D-NEXT: fst.d $fa1, $sp, 0334; LA64D-NEXT: ori $a0, $zero, 8335; LA64D-NEXT: addi.d $a2, $sp, 8336; LA64D-NEXT: addi.d $a3, $sp, 0337; LA64D-NEXT: ori $a4, $zero, 2338; LA64D-NEXT: ori $a5, $zero, 2339; LA64D-NEXT: move $a1, $fp340; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)341; LA64D-NEXT: jirl $ra, $ra, 0342; LA64D-NEXT: fld.d $fa0, $sp, 8343; LA64D-NEXT: beqz $a0, .LBB4_1344; LA64D-NEXT: # %bb.2: # %atomicrmw.end345; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload346; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload347; LA64D-NEXT: addi.d $sp, $sp, 32348; LA64D-NEXT: ret349 %v = atomicrmw fadd ptr %p, double 1.0 acquire, align 4350 ret double %v351}352 353define double @double_fsub_acquire(ptr %p) nounwind {354; LA64F-LABEL: double_fsub_acquire:355; LA64F: # %bb.0:356; LA64F-NEXT: addi.d $sp, $sp, -48357; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill358; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill359; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill360; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill361; LA64F-NEXT: move $fp, $a0362; LA64F-NEXT: ld.d $s1, $a0, 0363; LA64F-NEXT: lu52i.d $s0, $zero, -1025364; LA64F-NEXT: .p2align 4, , 16365; LA64F-NEXT: .LBB5_1: # %atomicrmw.start366; LA64F-NEXT: # =>This Inner Loop Header: Depth=1367; LA64F-NEXT: move $a0, $s1368; LA64F-NEXT: move $a1, $s0369; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)370; LA64F-NEXT: jirl $ra, $ra, 0371; LA64F-NEXT: st.d $s1, $sp, 8372; LA64F-NEXT: st.d $a0, $sp, 0373; LA64F-NEXT: ori $a0, $zero, 8374; LA64F-NEXT: addi.d $a2, $sp, 8375; LA64F-NEXT: addi.d $a3, $sp, 0376; LA64F-NEXT: ori $a4, $zero, 2377; LA64F-NEXT: ori $a5, $zero, 2378; LA64F-NEXT: move $a1, $fp379; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)380; LA64F-NEXT: jirl $ra, $ra, 0381; LA64F-NEXT: ld.d $s1, $sp, 8382; LA64F-NEXT: beqz $a0, .LBB5_1383; LA64F-NEXT: # %bb.2: # %atomicrmw.end384; LA64F-NEXT: move $a0, $s1385; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload386; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload387; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload388; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload389; LA64F-NEXT: addi.d $sp, $sp, 48390; LA64F-NEXT: ret391;392; LA64D-LABEL: double_fsub_acquire:393; LA64D: # %bb.0:394; LA64D-NEXT: addi.d $sp, $sp, -32395; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill396; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill397; LA64D-NEXT: move $fp, $a0398; LA64D-NEXT: fld.d $fa0, $a0, 0399; LA64D-NEXT: .p2align 4, , 16400; LA64D-NEXT: .LBB5_1: # %atomicrmw.start401; LA64D-NEXT: # =>This Inner Loop Header: Depth=1402; LA64D-NEXT: vldi $vr1, -784403; LA64D-NEXT: fadd.d $fa1, $fa0, $fa1404; LA64D-NEXT: fst.d $fa0, $sp, 8405; LA64D-NEXT: fst.d $fa1, $sp, 0406; LA64D-NEXT: ori $a0, $zero, 8407; LA64D-NEXT: addi.d $a2, $sp, 8408; LA64D-NEXT: addi.d $a3, $sp, 0409; LA64D-NEXT: ori $a4, $zero, 2410; LA64D-NEXT: ori $a5, $zero, 2411; LA64D-NEXT: move $a1, $fp412; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)413; LA64D-NEXT: jirl $ra, $ra, 0414; LA64D-NEXT: fld.d $fa0, $sp, 8415; LA64D-NEXT: beqz $a0, .LBB5_1416; LA64D-NEXT: # %bb.2: # %atomicrmw.end417; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload418; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload419; LA64D-NEXT: addi.d $sp, $sp, 32420; LA64D-NEXT: ret421 %v = atomicrmw fsub ptr %p, double 1.0 acquire, align 4422 ret double %v423}424 425define double @double_fmin_acquire(ptr %p) nounwind {426; LA64F-LABEL: double_fmin_acquire:427; LA64F: # %bb.0:428; LA64F-NEXT: addi.d $sp, $sp, -48429; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill430; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill431; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill432; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill433; LA64F-NEXT: move $fp, $a0434; LA64F-NEXT: ld.d $s1, $a0, 0435; LA64F-NEXT: lu52i.d $s0, $zero, 1023436; LA64F-NEXT: .p2align 4, , 16437; LA64F-NEXT: .LBB6_1: # %atomicrmw.start438; LA64F-NEXT: # =>This Inner Loop Header: Depth=1439; LA64F-NEXT: move $a0, $s1440; LA64F-NEXT: move $a1, $s0441; LA64F-NEXT: pcaddu18i $ra, %call36(fmin)442; LA64F-NEXT: jirl $ra, $ra, 0443; LA64F-NEXT: st.d $s1, $sp, 8444; LA64F-NEXT: st.d $a0, $sp, 0445; LA64F-NEXT: ori $a0, $zero, 8446; LA64F-NEXT: addi.d $a2, $sp, 8447; LA64F-NEXT: addi.d $a3, $sp, 0448; LA64F-NEXT: ori $a4, $zero, 2449; LA64F-NEXT: ori $a5, $zero, 2450; LA64F-NEXT: move $a1, $fp451; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)452; LA64F-NEXT: jirl $ra, $ra, 0453; LA64F-NEXT: ld.d $s1, $sp, 8454; LA64F-NEXT: beqz $a0, .LBB6_1455; LA64F-NEXT: # %bb.2: # %atomicrmw.end456; LA64F-NEXT: move $a0, $s1457; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload458; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload459; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload460; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload461; LA64F-NEXT: addi.d $sp, $sp, 48462; LA64F-NEXT: ret463;464; LA64D-LABEL: double_fmin_acquire:465; LA64D: # %bb.0:466; LA64D-NEXT: addi.d $sp, $sp, -32467; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill468; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill469; LA64D-NEXT: move $fp, $a0470; LA64D-NEXT: fld.d $fa0, $a0, 0471; LA64D-NEXT: .p2align 4, , 16472; LA64D-NEXT: .LBB6_1: # %atomicrmw.start473; LA64D-NEXT: # =>This Inner Loop Header: Depth=1474; LA64D-NEXT: vldi $vr1, -912475; LA64D-NEXT: fmin.d $fa1, $fa0, $fa1476; LA64D-NEXT: fst.d $fa0, $sp, 8477; LA64D-NEXT: fst.d $fa1, $sp, 0478; LA64D-NEXT: ori $a0, $zero, 8479; LA64D-NEXT: addi.d $a2, $sp, 8480; LA64D-NEXT: addi.d $a3, $sp, 0481; LA64D-NEXT: ori $a4, $zero, 2482; LA64D-NEXT: ori $a5, $zero, 2483; LA64D-NEXT: move $a1, $fp484; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)485; LA64D-NEXT: jirl $ra, $ra, 0486; LA64D-NEXT: fld.d $fa0, $sp, 8487; LA64D-NEXT: beqz $a0, .LBB6_1488; LA64D-NEXT: # %bb.2: # %atomicrmw.end489; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload490; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload491; LA64D-NEXT: addi.d $sp, $sp, 32492; LA64D-NEXT: ret493 %v = atomicrmw fmin ptr %p, double 1.0 acquire, align 4494 ret double %v495}496 497define double @double_fmax_acquire(ptr %p) nounwind {498; LA64F-LABEL: double_fmax_acquire:499; LA64F: # %bb.0:500; LA64F-NEXT: addi.d $sp, $sp, -48501; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill502; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill503; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill504; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill505; LA64F-NEXT: move $fp, $a0506; LA64F-NEXT: ld.d $s1, $a0, 0507; LA64F-NEXT: lu52i.d $s0, $zero, 1023508; LA64F-NEXT: .p2align 4, , 16509; LA64F-NEXT: .LBB7_1: # %atomicrmw.start510; LA64F-NEXT: # =>This Inner Loop Header: Depth=1511; LA64F-NEXT: move $a0, $s1512; LA64F-NEXT: move $a1, $s0513; LA64F-NEXT: pcaddu18i $ra, %call36(fmax)514; LA64F-NEXT: jirl $ra, $ra, 0515; LA64F-NEXT: st.d $s1, $sp, 8516; LA64F-NEXT: st.d $a0, $sp, 0517; LA64F-NEXT: ori $a0, $zero, 8518; LA64F-NEXT: addi.d $a2, $sp, 8519; LA64F-NEXT: addi.d $a3, $sp, 0520; LA64F-NEXT: ori $a4, $zero, 2521; LA64F-NEXT: ori $a5, $zero, 2522; LA64F-NEXT: move $a1, $fp523; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)524; LA64F-NEXT: jirl $ra, $ra, 0525; LA64F-NEXT: ld.d $s1, $sp, 8526; LA64F-NEXT: beqz $a0, .LBB7_1527; LA64F-NEXT: # %bb.2: # %atomicrmw.end528; LA64F-NEXT: move $a0, $s1529; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload530; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload531; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload532; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload533; LA64F-NEXT: addi.d $sp, $sp, 48534; LA64F-NEXT: ret535;536; LA64D-LABEL: double_fmax_acquire:537; LA64D: # %bb.0:538; LA64D-NEXT: addi.d $sp, $sp, -32539; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill540; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill541; LA64D-NEXT: move $fp, $a0542; LA64D-NEXT: fld.d $fa0, $a0, 0543; LA64D-NEXT: .p2align 4, , 16544; LA64D-NEXT: .LBB7_1: # %atomicrmw.start545; LA64D-NEXT: # =>This Inner Loop Header: Depth=1546; LA64D-NEXT: vldi $vr1, -912547; LA64D-NEXT: fmax.d $fa1, $fa0, $fa1548; LA64D-NEXT: fst.d $fa0, $sp, 8549; LA64D-NEXT: fst.d $fa1, $sp, 0550; LA64D-NEXT: ori $a0, $zero, 8551; LA64D-NEXT: addi.d $a2, $sp, 8552; LA64D-NEXT: addi.d $a3, $sp, 0553; LA64D-NEXT: ori $a4, $zero, 2554; LA64D-NEXT: ori $a5, $zero, 2555; LA64D-NEXT: move $a1, $fp556; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)557; LA64D-NEXT: jirl $ra, $ra, 0558; LA64D-NEXT: fld.d $fa0, $sp, 8559; LA64D-NEXT: beqz $a0, .LBB7_1560; LA64D-NEXT: # %bb.2: # %atomicrmw.end561; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload562; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload563; LA64D-NEXT: addi.d $sp, $sp, 32564; LA64D-NEXT: ret565 %v = atomicrmw fmax ptr %p, double 1.0 acquire, align 4566 ret double %v567}568 569define float @float_fadd_release(ptr %p) nounwind {570; LA64F-LABEL: float_fadd_release:571; LA64F: # %bb.0:572; LA64F-NEXT: fld.s $fa0, $a0, 0573; LA64F-NEXT: lu12i.w $a1, 260096574; LA64F-NEXT: movgr2fr.w $fa1, $a1575; LA64F-NEXT: .p2align 4, , 16576; LA64F-NEXT: .LBB8_1: # %atomicrmw.start577; LA64F-NEXT: # =>This Loop Header: Depth=1578; LA64F-NEXT: # Child Loop BB8_3 Depth 2579; LA64F-NEXT: fadd.s $fa2, $fa0, $fa1580; LA64F-NEXT: movfr2gr.s $a1, $fa2581; LA64F-NEXT: movfr2gr.s $a2, $fa0582; LA64F-NEXT: .LBB8_3: # %atomicrmw.start583; LA64F-NEXT: # Parent Loop BB8_1 Depth=1584; LA64F-NEXT: # => This Inner Loop Header: Depth=2585; LA64F-NEXT: ll.w $a3, $a0, 0586; LA64F-NEXT: bne $a3, $a2, .LBB8_5587; LA64F-NEXT: # %bb.4: # %atomicrmw.start588; LA64F-NEXT: # in Loop: Header=BB8_3 Depth=2589; LA64F-NEXT: move $a4, $a1590; LA64F-NEXT: sc.w $a4, $a0, 0591; LA64F-NEXT: beq $a4, $zero, .LBB8_3592; LA64F-NEXT: b .LBB8_6593; LA64F-NEXT: .LBB8_5: # %atomicrmw.start594; LA64F-NEXT: # in Loop: Header=BB8_1 Depth=1595; LA64F-NEXT: dbar 1792596; LA64F-NEXT: .LBB8_6: # %atomicrmw.start597; LA64F-NEXT: # in Loop: Header=BB8_1 Depth=1598; LA64F-NEXT: movgr2fr.w $fa0, $a3599; LA64F-NEXT: bne $a3, $a2, .LBB8_1600; LA64F-NEXT: # %bb.2: # %atomicrmw.end601; LA64F-NEXT: ret602;603; LA64D-LABEL: float_fadd_release:604; LA64D: # %bb.0:605; LA64D-NEXT: fld.s $fa0, $a0, 0606; LA64D-NEXT: vldi $vr1, -1168607; LA64D-NEXT: .p2align 4, , 16608; LA64D-NEXT: .LBB8_1: # %atomicrmw.start609; LA64D-NEXT: # =>This Loop Header: Depth=1610; LA64D-NEXT: # Child Loop BB8_3 Depth 2611; LA64D-NEXT: fadd.s $fa2, $fa0, $fa1612; LA64D-NEXT: movfr2gr.s $a1, $fa2613; LA64D-NEXT: movfr2gr.s $a2, $fa0614; LA64D-NEXT: .LBB8_3: # %atomicrmw.start615; LA64D-NEXT: # Parent Loop BB8_1 Depth=1616; LA64D-NEXT: # => This Inner Loop Header: Depth=2617; LA64D-NEXT: ll.w $a3, $a0, 0618; LA64D-NEXT: bne $a3, $a2, .LBB8_5619; LA64D-NEXT: # %bb.4: # %atomicrmw.start620; LA64D-NEXT: # in Loop: Header=BB8_3 Depth=2621; LA64D-NEXT: move $a4, $a1622; LA64D-NEXT: sc.w $a4, $a0, 0623; LA64D-NEXT: beq $a4, $zero, .LBB8_3624; LA64D-NEXT: b .LBB8_6625; LA64D-NEXT: .LBB8_5: # %atomicrmw.start626; LA64D-NEXT: # in Loop: Header=BB8_1 Depth=1627; LA64D-NEXT: dbar 1792628; LA64D-NEXT: .LBB8_6: # %atomicrmw.start629; LA64D-NEXT: # in Loop: Header=BB8_1 Depth=1630; LA64D-NEXT: movgr2fr.w $fa0, $a3631; LA64D-NEXT: bne $a3, $a2, .LBB8_1632; LA64D-NEXT: # %bb.2: # %atomicrmw.end633; LA64D-NEXT: ret634 %v = atomicrmw fadd ptr %p, float 1.0 release, align 4635 ret float %v636}637 638define float @float_fsub_release(ptr %p) nounwind {639; LA64F-LABEL: float_fsub_release:640; LA64F: # %bb.0:641; LA64F-NEXT: fld.s $fa0, $a0, 0642; LA64F-NEXT: lu12i.w $a1, -264192643; LA64F-NEXT: movgr2fr.w $fa1, $a1644; LA64F-NEXT: .p2align 4, , 16645; LA64F-NEXT: .LBB9_1: # %atomicrmw.start646; LA64F-NEXT: # =>This Loop Header: Depth=1647; LA64F-NEXT: # Child Loop BB9_3 Depth 2648; LA64F-NEXT: fadd.s $fa2, $fa0, $fa1649; LA64F-NEXT: movfr2gr.s $a1, $fa2650; LA64F-NEXT: movfr2gr.s $a2, $fa0651; LA64F-NEXT: .LBB9_3: # %atomicrmw.start652; LA64F-NEXT: # Parent Loop BB9_1 Depth=1653; LA64F-NEXT: # => This Inner Loop Header: Depth=2654; LA64F-NEXT: ll.w $a3, $a0, 0655; LA64F-NEXT: bne $a3, $a2, .LBB9_5656; LA64F-NEXT: # %bb.4: # %atomicrmw.start657; LA64F-NEXT: # in Loop: Header=BB9_3 Depth=2658; LA64F-NEXT: move $a4, $a1659; LA64F-NEXT: sc.w $a4, $a0, 0660; LA64F-NEXT: beq $a4, $zero, .LBB9_3661; LA64F-NEXT: b .LBB9_6662; LA64F-NEXT: .LBB9_5: # %atomicrmw.start663; LA64F-NEXT: # in Loop: Header=BB9_1 Depth=1664; LA64F-NEXT: dbar 1792665; LA64F-NEXT: .LBB9_6: # %atomicrmw.start666; LA64F-NEXT: # in Loop: Header=BB9_1 Depth=1667; LA64F-NEXT: movgr2fr.w $fa0, $a3668; LA64F-NEXT: bne $a3, $a2, .LBB9_1669; LA64F-NEXT: # %bb.2: # %atomicrmw.end670; LA64F-NEXT: ret671;672; LA64D-LABEL: float_fsub_release:673; LA64D: # %bb.0:674; LA64D-NEXT: fld.s $fa0, $a0, 0675; LA64D-NEXT: vldi $vr1, -1040676; LA64D-NEXT: .p2align 4, , 16677; LA64D-NEXT: .LBB9_1: # %atomicrmw.start678; LA64D-NEXT: # =>This Loop Header: Depth=1679; LA64D-NEXT: # Child Loop BB9_3 Depth 2680; LA64D-NEXT: fadd.s $fa2, $fa0, $fa1681; LA64D-NEXT: movfr2gr.s $a1, $fa2682; LA64D-NEXT: movfr2gr.s $a2, $fa0683; LA64D-NEXT: .LBB9_3: # %atomicrmw.start684; LA64D-NEXT: # Parent Loop BB9_1 Depth=1685; LA64D-NEXT: # => This Inner Loop Header: Depth=2686; LA64D-NEXT: ll.w $a3, $a0, 0687; LA64D-NEXT: bne $a3, $a2, .LBB9_5688; LA64D-NEXT: # %bb.4: # %atomicrmw.start689; LA64D-NEXT: # in Loop: Header=BB9_3 Depth=2690; LA64D-NEXT: move $a4, $a1691; LA64D-NEXT: sc.w $a4, $a0, 0692; LA64D-NEXT: beq $a4, $zero, .LBB9_3693; LA64D-NEXT: b .LBB9_6694; LA64D-NEXT: .LBB9_5: # %atomicrmw.start695; LA64D-NEXT: # in Loop: Header=BB9_1 Depth=1696; LA64D-NEXT: dbar 1792697; LA64D-NEXT: .LBB9_6: # %atomicrmw.start698; LA64D-NEXT: # in Loop: Header=BB9_1 Depth=1699; LA64D-NEXT: movgr2fr.w $fa0, $a3700; LA64D-NEXT: bne $a3, $a2, .LBB9_1701; LA64D-NEXT: # %bb.2: # %atomicrmw.end702; LA64D-NEXT: ret703 %v = atomicrmw fsub ptr %p, float 1.0 release, align 4704 ret float %v705}706 707define float @float_fmin_release(ptr %p) nounwind {708; LA64F-LABEL: float_fmin_release:709; LA64F: # %bb.0:710; LA64F-NEXT: fld.s $fa0, $a0, 0711; LA64F-NEXT: lu12i.w $a1, 260096712; LA64F-NEXT: movgr2fr.w $fa1, $a1713; LA64F-NEXT: .p2align 4, , 16714; LA64F-NEXT: .LBB10_1: # %atomicrmw.start715; LA64F-NEXT: # =>This Loop Header: Depth=1716; LA64F-NEXT: # Child Loop BB10_3 Depth 2717; LA64F-NEXT: fmin.s $fa2, $fa0, $fa1718; LA64F-NEXT: movfr2gr.s $a1, $fa2719; LA64F-NEXT: movfr2gr.s $a2, $fa0720; LA64F-NEXT: .LBB10_3: # %atomicrmw.start721; LA64F-NEXT: # Parent Loop BB10_1 Depth=1722; LA64F-NEXT: # => This Inner Loop Header: Depth=2723; LA64F-NEXT: ll.w $a3, $a0, 0724; LA64F-NEXT: bne $a3, $a2, .LBB10_5725; LA64F-NEXT: # %bb.4: # %atomicrmw.start726; LA64F-NEXT: # in Loop: Header=BB10_3 Depth=2727; LA64F-NEXT: move $a4, $a1728; LA64F-NEXT: sc.w $a4, $a0, 0729; LA64F-NEXT: beq $a4, $zero, .LBB10_3730; LA64F-NEXT: b .LBB10_6731; LA64F-NEXT: .LBB10_5: # %atomicrmw.start732; LA64F-NEXT: # in Loop: Header=BB10_1 Depth=1733; LA64F-NEXT: dbar 1792734; LA64F-NEXT: .LBB10_6: # %atomicrmw.start735; LA64F-NEXT: # in Loop: Header=BB10_1 Depth=1736; LA64F-NEXT: movgr2fr.w $fa0, $a3737; LA64F-NEXT: bne $a3, $a2, .LBB10_1738; LA64F-NEXT: # %bb.2: # %atomicrmw.end739; LA64F-NEXT: ret740;741; LA64D-LABEL: float_fmin_release:742; LA64D: # %bb.0:743; LA64D-NEXT: fld.s $fa0, $a0, 0744; LA64D-NEXT: vldi $vr1, -1168745; LA64D-NEXT: .p2align 4, , 16746; LA64D-NEXT: .LBB10_1: # %atomicrmw.start747; LA64D-NEXT: # =>This Loop Header: Depth=1748; LA64D-NEXT: # Child Loop BB10_3 Depth 2749; LA64D-NEXT: fmin.s $fa2, $fa0, $fa1750; LA64D-NEXT: movfr2gr.s $a1, $fa2751; LA64D-NEXT: movfr2gr.s $a2, $fa0752; LA64D-NEXT: .LBB10_3: # %atomicrmw.start753; LA64D-NEXT: # Parent Loop BB10_1 Depth=1754; LA64D-NEXT: # => This Inner Loop Header: Depth=2755; LA64D-NEXT: ll.w $a3, $a0, 0756; LA64D-NEXT: bne $a3, $a2, .LBB10_5757; LA64D-NEXT: # %bb.4: # %atomicrmw.start758; LA64D-NEXT: # in Loop: Header=BB10_3 Depth=2759; LA64D-NEXT: move $a4, $a1760; LA64D-NEXT: sc.w $a4, $a0, 0761; LA64D-NEXT: beq $a4, $zero, .LBB10_3762; LA64D-NEXT: b .LBB10_6763; LA64D-NEXT: .LBB10_5: # %atomicrmw.start764; LA64D-NEXT: # in Loop: Header=BB10_1 Depth=1765; LA64D-NEXT: dbar 1792766; LA64D-NEXT: .LBB10_6: # %atomicrmw.start767; LA64D-NEXT: # in Loop: Header=BB10_1 Depth=1768; LA64D-NEXT: movgr2fr.w $fa0, $a3769; LA64D-NEXT: bne $a3, $a2, .LBB10_1770; LA64D-NEXT: # %bb.2: # %atomicrmw.end771; LA64D-NEXT: ret772 %v = atomicrmw fmin ptr %p, float 1.0 release, align 4773 ret float %v774}775 776define float @float_fmax_release(ptr %p) nounwind {777; LA64F-LABEL: float_fmax_release:778; LA64F: # %bb.0:779; LA64F-NEXT: fld.s $fa0, $a0, 0780; LA64F-NEXT: lu12i.w $a1, 260096781; LA64F-NEXT: movgr2fr.w $fa1, $a1782; LA64F-NEXT: .p2align 4, , 16783; LA64F-NEXT: .LBB11_1: # %atomicrmw.start784; LA64F-NEXT: # =>This Loop Header: Depth=1785; LA64F-NEXT: # Child Loop BB11_3 Depth 2786; LA64F-NEXT: fmax.s $fa2, $fa0, $fa1787; LA64F-NEXT: movfr2gr.s $a1, $fa2788; LA64F-NEXT: movfr2gr.s $a2, $fa0789; LA64F-NEXT: .LBB11_3: # %atomicrmw.start790; LA64F-NEXT: # Parent Loop BB11_1 Depth=1791; LA64F-NEXT: # => This Inner Loop Header: Depth=2792; LA64F-NEXT: ll.w $a3, $a0, 0793; LA64F-NEXT: bne $a3, $a2, .LBB11_5794; LA64F-NEXT: # %bb.4: # %atomicrmw.start795; LA64F-NEXT: # in Loop: Header=BB11_3 Depth=2796; LA64F-NEXT: move $a4, $a1797; LA64F-NEXT: sc.w $a4, $a0, 0798; LA64F-NEXT: beq $a4, $zero, .LBB11_3799; LA64F-NEXT: b .LBB11_6800; LA64F-NEXT: .LBB11_5: # %atomicrmw.start801; LA64F-NEXT: # in Loop: Header=BB11_1 Depth=1802; LA64F-NEXT: dbar 1792803; LA64F-NEXT: .LBB11_6: # %atomicrmw.start804; LA64F-NEXT: # in Loop: Header=BB11_1 Depth=1805; LA64F-NEXT: movgr2fr.w $fa0, $a3806; LA64F-NEXT: bne $a3, $a2, .LBB11_1807; LA64F-NEXT: # %bb.2: # %atomicrmw.end808; LA64F-NEXT: ret809;810; LA64D-LABEL: float_fmax_release:811; LA64D: # %bb.0:812; LA64D-NEXT: fld.s $fa0, $a0, 0813; LA64D-NEXT: vldi $vr1, -1168814; LA64D-NEXT: .p2align 4, , 16815; LA64D-NEXT: .LBB11_1: # %atomicrmw.start816; LA64D-NEXT: # =>This Loop Header: Depth=1817; LA64D-NEXT: # Child Loop BB11_3 Depth 2818; LA64D-NEXT: fmax.s $fa2, $fa0, $fa1819; LA64D-NEXT: movfr2gr.s $a1, $fa2820; LA64D-NEXT: movfr2gr.s $a2, $fa0821; LA64D-NEXT: .LBB11_3: # %atomicrmw.start822; LA64D-NEXT: # Parent Loop BB11_1 Depth=1823; LA64D-NEXT: # => This Inner Loop Header: Depth=2824; LA64D-NEXT: ll.w $a3, $a0, 0825; LA64D-NEXT: bne $a3, $a2, .LBB11_5826; LA64D-NEXT: # %bb.4: # %atomicrmw.start827; LA64D-NEXT: # in Loop: Header=BB11_3 Depth=2828; LA64D-NEXT: move $a4, $a1829; LA64D-NEXT: sc.w $a4, $a0, 0830; LA64D-NEXT: beq $a4, $zero, .LBB11_3831; LA64D-NEXT: b .LBB11_6832; LA64D-NEXT: .LBB11_5: # %atomicrmw.start833; LA64D-NEXT: # in Loop: Header=BB11_1 Depth=1834; LA64D-NEXT: dbar 1792835; LA64D-NEXT: .LBB11_6: # %atomicrmw.start836; LA64D-NEXT: # in Loop: Header=BB11_1 Depth=1837; LA64D-NEXT: movgr2fr.w $fa0, $a3838; LA64D-NEXT: bne $a3, $a2, .LBB11_1839; LA64D-NEXT: # %bb.2: # %atomicrmw.end840; LA64D-NEXT: ret841 %v = atomicrmw fmax ptr %p, float 1.0 release, align 4842 ret float %v843}844 845define double @double_fadd_release(ptr %p) nounwind {846; LA64F-LABEL: double_fadd_release:847; LA64F: # %bb.0:848; LA64F-NEXT: addi.d $sp, $sp, -48849; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill850; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill851; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill852; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill853; LA64F-NEXT: move $fp, $a0854; LA64F-NEXT: ld.d $s1, $a0, 0855; LA64F-NEXT: lu52i.d $s0, $zero, 1023856; LA64F-NEXT: .p2align 4, , 16857; LA64F-NEXT: .LBB12_1: # %atomicrmw.start858; LA64F-NEXT: # =>This Inner Loop Header: Depth=1859; LA64F-NEXT: move $a0, $s1860; LA64F-NEXT: move $a1, $s0861; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)862; LA64F-NEXT: jirl $ra, $ra, 0863; LA64F-NEXT: st.d $s1, $sp, 8864; LA64F-NEXT: st.d $a0, $sp, 0865; LA64F-NEXT: ori $a0, $zero, 8866; LA64F-NEXT: addi.d $a2, $sp, 8867; LA64F-NEXT: addi.d $a3, $sp, 0868; LA64F-NEXT: ori $a4, $zero, 3869; LA64F-NEXT: move $a1, $fp870; LA64F-NEXT: move $a5, $zero871; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)872; LA64F-NEXT: jirl $ra, $ra, 0873; LA64F-NEXT: ld.d $s1, $sp, 8874; LA64F-NEXT: beqz $a0, .LBB12_1875; LA64F-NEXT: # %bb.2: # %atomicrmw.end876; LA64F-NEXT: move $a0, $s1877; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload878; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload879; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload880; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload881; LA64F-NEXT: addi.d $sp, $sp, 48882; LA64F-NEXT: ret883;884; LA64D-LABEL: double_fadd_release:885; LA64D: # %bb.0:886; LA64D-NEXT: addi.d $sp, $sp, -32887; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill888; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill889; LA64D-NEXT: move $fp, $a0890; LA64D-NEXT: fld.d $fa0, $a0, 0891; LA64D-NEXT: .p2align 4, , 16892; LA64D-NEXT: .LBB12_1: # %atomicrmw.start893; LA64D-NEXT: # =>This Inner Loop Header: Depth=1894; LA64D-NEXT: vldi $vr1, -912895; LA64D-NEXT: fadd.d $fa1, $fa0, $fa1896; LA64D-NEXT: fst.d $fa0, $sp, 8897; LA64D-NEXT: fst.d $fa1, $sp, 0898; LA64D-NEXT: ori $a0, $zero, 8899; LA64D-NEXT: addi.d $a2, $sp, 8900; LA64D-NEXT: addi.d $a3, $sp, 0901; LA64D-NEXT: ori $a4, $zero, 3902; LA64D-NEXT: move $a1, $fp903; LA64D-NEXT: move $a5, $zero904; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)905; LA64D-NEXT: jirl $ra, $ra, 0906; LA64D-NEXT: fld.d $fa0, $sp, 8907; LA64D-NEXT: beqz $a0, .LBB12_1908; LA64D-NEXT: # %bb.2: # %atomicrmw.end909; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload910; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload911; LA64D-NEXT: addi.d $sp, $sp, 32912; LA64D-NEXT: ret913 %v = atomicrmw fadd ptr %p, double 1.0 release, align 4914 ret double %v915}916 917define double @double_fsub_release(ptr %p) nounwind {918; LA64F-LABEL: double_fsub_release:919; LA64F: # %bb.0:920; LA64F-NEXT: addi.d $sp, $sp, -48921; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill922; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill923; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill924; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill925; LA64F-NEXT: move $fp, $a0926; LA64F-NEXT: ld.d $s1, $a0, 0927; LA64F-NEXT: lu52i.d $s0, $zero, -1025928; LA64F-NEXT: .p2align 4, , 16929; LA64F-NEXT: .LBB13_1: # %atomicrmw.start930; LA64F-NEXT: # =>This Inner Loop Header: Depth=1931; LA64F-NEXT: move $a0, $s1932; LA64F-NEXT: move $a1, $s0933; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)934; LA64F-NEXT: jirl $ra, $ra, 0935; LA64F-NEXT: st.d $s1, $sp, 8936; LA64F-NEXT: st.d $a0, $sp, 0937; LA64F-NEXT: ori $a0, $zero, 8938; LA64F-NEXT: addi.d $a2, $sp, 8939; LA64F-NEXT: addi.d $a3, $sp, 0940; LA64F-NEXT: ori $a4, $zero, 3941; LA64F-NEXT: move $a1, $fp942; LA64F-NEXT: move $a5, $zero943; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)944; LA64F-NEXT: jirl $ra, $ra, 0945; LA64F-NEXT: ld.d $s1, $sp, 8946; LA64F-NEXT: beqz $a0, .LBB13_1947; LA64F-NEXT: # %bb.2: # %atomicrmw.end948; LA64F-NEXT: move $a0, $s1949; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload950; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload951; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload952; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload953; LA64F-NEXT: addi.d $sp, $sp, 48954; LA64F-NEXT: ret955;956; LA64D-LABEL: double_fsub_release:957; LA64D: # %bb.0:958; LA64D-NEXT: addi.d $sp, $sp, -32959; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill960; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill961; LA64D-NEXT: move $fp, $a0962; LA64D-NEXT: fld.d $fa0, $a0, 0963; LA64D-NEXT: .p2align 4, , 16964; LA64D-NEXT: .LBB13_1: # %atomicrmw.start965; LA64D-NEXT: # =>This Inner Loop Header: Depth=1966; LA64D-NEXT: vldi $vr1, -784967; LA64D-NEXT: fadd.d $fa1, $fa0, $fa1968; LA64D-NEXT: fst.d $fa0, $sp, 8969; LA64D-NEXT: fst.d $fa1, $sp, 0970; LA64D-NEXT: ori $a0, $zero, 8971; LA64D-NEXT: addi.d $a2, $sp, 8972; LA64D-NEXT: addi.d $a3, $sp, 0973; LA64D-NEXT: ori $a4, $zero, 3974; LA64D-NEXT: move $a1, $fp975; LA64D-NEXT: move $a5, $zero976; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)977; LA64D-NEXT: jirl $ra, $ra, 0978; LA64D-NEXT: fld.d $fa0, $sp, 8979; LA64D-NEXT: beqz $a0, .LBB13_1980; LA64D-NEXT: # %bb.2: # %atomicrmw.end981; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload982; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload983; LA64D-NEXT: addi.d $sp, $sp, 32984; LA64D-NEXT: ret985 %v = atomicrmw fsub ptr %p, double 1.0 release, align 4986 ret double %v987}988 989define double @double_fmin_release(ptr %p) nounwind {990; LA64F-LABEL: double_fmin_release:991; LA64F: # %bb.0:992; LA64F-NEXT: addi.d $sp, $sp, -48993; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill994; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill995; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill996; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill997; LA64F-NEXT: move $fp, $a0998; LA64F-NEXT: ld.d $s1, $a0, 0999; LA64F-NEXT: lu52i.d $s0, $zero, 10231000; LA64F-NEXT: .p2align 4, , 161001; LA64F-NEXT: .LBB14_1: # %atomicrmw.start1002; LA64F-NEXT: # =>This Inner Loop Header: Depth=11003; LA64F-NEXT: move $a0, $s11004; LA64F-NEXT: move $a1, $s01005; LA64F-NEXT: pcaddu18i $ra, %call36(fmin)1006; LA64F-NEXT: jirl $ra, $ra, 01007; LA64F-NEXT: st.d $s1, $sp, 81008; LA64F-NEXT: st.d $a0, $sp, 01009; LA64F-NEXT: ori $a0, $zero, 81010; LA64F-NEXT: addi.d $a2, $sp, 81011; LA64F-NEXT: addi.d $a3, $sp, 01012; LA64F-NEXT: ori $a4, $zero, 31013; LA64F-NEXT: move $a1, $fp1014; LA64F-NEXT: move $a5, $zero1015; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1016; LA64F-NEXT: jirl $ra, $ra, 01017; LA64F-NEXT: ld.d $s1, $sp, 81018; LA64F-NEXT: beqz $a0, .LBB14_11019; LA64F-NEXT: # %bb.2: # %atomicrmw.end1020; LA64F-NEXT: move $a0, $s11021; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload1022; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload1023; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload1024; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload1025; LA64F-NEXT: addi.d $sp, $sp, 481026; LA64F-NEXT: ret1027;1028; LA64D-LABEL: double_fmin_release:1029; LA64D: # %bb.0:1030; LA64D-NEXT: addi.d $sp, $sp, -321031; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill1032; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill1033; LA64D-NEXT: move $fp, $a01034; LA64D-NEXT: fld.d $fa0, $a0, 01035; LA64D-NEXT: .p2align 4, , 161036; LA64D-NEXT: .LBB14_1: # %atomicrmw.start1037; LA64D-NEXT: # =>This Inner Loop Header: Depth=11038; LA64D-NEXT: vldi $vr1, -9121039; LA64D-NEXT: fmin.d $fa1, $fa0, $fa11040; LA64D-NEXT: fst.d $fa0, $sp, 81041; LA64D-NEXT: fst.d $fa1, $sp, 01042; LA64D-NEXT: ori $a0, $zero, 81043; LA64D-NEXT: addi.d $a2, $sp, 81044; LA64D-NEXT: addi.d $a3, $sp, 01045; LA64D-NEXT: ori $a4, $zero, 31046; LA64D-NEXT: move $a1, $fp1047; LA64D-NEXT: move $a5, $zero1048; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1049; LA64D-NEXT: jirl $ra, $ra, 01050; LA64D-NEXT: fld.d $fa0, $sp, 81051; LA64D-NEXT: beqz $a0, .LBB14_11052; LA64D-NEXT: # %bb.2: # %atomicrmw.end1053; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload1054; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload1055; LA64D-NEXT: addi.d $sp, $sp, 321056; LA64D-NEXT: ret1057 %v = atomicrmw fmin ptr %p, double 1.0 release, align 41058 ret double %v1059}1060 1061define double @double_fmax_release(ptr %p) nounwind {1062; LA64F-LABEL: double_fmax_release:1063; LA64F: # %bb.0:1064; LA64F-NEXT: addi.d $sp, $sp, -481065; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill1066; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill1067; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill1068; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill1069; LA64F-NEXT: move $fp, $a01070; LA64F-NEXT: ld.d $s1, $a0, 01071; LA64F-NEXT: lu52i.d $s0, $zero, 10231072; LA64F-NEXT: .p2align 4, , 161073; LA64F-NEXT: .LBB15_1: # %atomicrmw.start1074; LA64F-NEXT: # =>This Inner Loop Header: Depth=11075; LA64F-NEXT: move $a0, $s11076; LA64F-NEXT: move $a1, $s01077; LA64F-NEXT: pcaddu18i $ra, %call36(fmax)1078; LA64F-NEXT: jirl $ra, $ra, 01079; LA64F-NEXT: st.d $s1, $sp, 81080; LA64F-NEXT: st.d $a0, $sp, 01081; LA64F-NEXT: ori $a0, $zero, 81082; LA64F-NEXT: addi.d $a2, $sp, 81083; LA64F-NEXT: addi.d $a3, $sp, 01084; LA64F-NEXT: ori $a4, $zero, 31085; LA64F-NEXT: move $a1, $fp1086; LA64F-NEXT: move $a5, $zero1087; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1088; LA64F-NEXT: jirl $ra, $ra, 01089; LA64F-NEXT: ld.d $s1, $sp, 81090; LA64F-NEXT: beqz $a0, .LBB15_11091; LA64F-NEXT: # %bb.2: # %atomicrmw.end1092; LA64F-NEXT: move $a0, $s11093; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload1094; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload1095; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload1096; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload1097; LA64F-NEXT: addi.d $sp, $sp, 481098; LA64F-NEXT: ret1099;1100; LA64D-LABEL: double_fmax_release:1101; LA64D: # %bb.0:1102; LA64D-NEXT: addi.d $sp, $sp, -321103; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill1104; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill1105; LA64D-NEXT: move $fp, $a01106; LA64D-NEXT: fld.d $fa0, $a0, 01107; LA64D-NEXT: .p2align 4, , 161108; LA64D-NEXT: .LBB15_1: # %atomicrmw.start1109; LA64D-NEXT: # =>This Inner Loop Header: Depth=11110; LA64D-NEXT: vldi $vr1, -9121111; LA64D-NEXT: fmax.d $fa1, $fa0, $fa11112; LA64D-NEXT: fst.d $fa0, $sp, 81113; LA64D-NEXT: fst.d $fa1, $sp, 01114; LA64D-NEXT: ori $a0, $zero, 81115; LA64D-NEXT: addi.d $a2, $sp, 81116; LA64D-NEXT: addi.d $a3, $sp, 01117; LA64D-NEXT: ori $a4, $zero, 31118; LA64D-NEXT: move $a1, $fp1119; LA64D-NEXT: move $a5, $zero1120; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1121; LA64D-NEXT: jirl $ra, $ra, 01122; LA64D-NEXT: fld.d $fa0, $sp, 81123; LA64D-NEXT: beqz $a0, .LBB15_11124; LA64D-NEXT: # %bb.2: # %atomicrmw.end1125; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload1126; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload1127; LA64D-NEXT: addi.d $sp, $sp, 321128; LA64D-NEXT: ret1129 %v = atomicrmw fmax ptr %p, double 1.0 release, align 41130 ret double %v1131}1132 1133define float @float_fadd_acq_rel(ptr %p) nounwind {1134; LA64F-LABEL: float_fadd_acq_rel:1135; LA64F: # %bb.0:1136; LA64F-NEXT: fld.s $fa0, $a0, 01137; LA64F-NEXT: lu12i.w $a1, 2600961138; LA64F-NEXT: movgr2fr.w $fa1, $a11139; LA64F-NEXT: .p2align 4, , 161140; LA64F-NEXT: .LBB16_1: # %atomicrmw.start1141; LA64F-NEXT: # =>This Loop Header: Depth=11142; LA64F-NEXT: # Child Loop BB16_3 Depth 21143; LA64F-NEXT: fadd.s $fa2, $fa0, $fa11144; LA64F-NEXT: movfr2gr.s $a1, $fa21145; LA64F-NEXT: movfr2gr.s $a2, $fa01146; LA64F-NEXT: .LBB16_3: # %atomicrmw.start1147; LA64F-NEXT: # Parent Loop BB16_1 Depth=11148; LA64F-NEXT: # => This Inner Loop Header: Depth=21149; LA64F-NEXT: ll.w $a3, $a0, 01150; LA64F-NEXT: bne $a3, $a2, .LBB16_51151; LA64F-NEXT: # %bb.4: # %atomicrmw.start1152; LA64F-NEXT: # in Loop: Header=BB16_3 Depth=21153; LA64F-NEXT: move $a4, $a11154; LA64F-NEXT: sc.w $a4, $a0, 01155; LA64F-NEXT: beq $a4, $zero, .LBB16_31156; LA64F-NEXT: b .LBB16_61157; LA64F-NEXT: .LBB16_5: # %atomicrmw.start1158; LA64F-NEXT: # in Loop: Header=BB16_1 Depth=11159; LA64F-NEXT: dbar 201160; LA64F-NEXT: .LBB16_6: # %atomicrmw.start1161; LA64F-NEXT: # in Loop: Header=BB16_1 Depth=11162; LA64F-NEXT: movgr2fr.w $fa0, $a31163; LA64F-NEXT: bne $a3, $a2, .LBB16_11164; LA64F-NEXT: # %bb.2: # %atomicrmw.end1165; LA64F-NEXT: ret1166;1167; LA64D-LABEL: float_fadd_acq_rel:1168; LA64D: # %bb.0:1169; LA64D-NEXT: fld.s $fa0, $a0, 01170; LA64D-NEXT: vldi $vr1, -11681171; LA64D-NEXT: .p2align 4, , 161172; LA64D-NEXT: .LBB16_1: # %atomicrmw.start1173; LA64D-NEXT: # =>This Loop Header: Depth=11174; LA64D-NEXT: # Child Loop BB16_3 Depth 21175; LA64D-NEXT: fadd.s $fa2, $fa0, $fa11176; LA64D-NEXT: movfr2gr.s $a1, $fa21177; LA64D-NEXT: movfr2gr.s $a2, $fa01178; LA64D-NEXT: .LBB16_3: # %atomicrmw.start1179; LA64D-NEXT: # Parent Loop BB16_1 Depth=11180; LA64D-NEXT: # => This Inner Loop Header: Depth=21181; LA64D-NEXT: ll.w $a3, $a0, 01182; LA64D-NEXT: bne $a3, $a2, .LBB16_51183; LA64D-NEXT: # %bb.4: # %atomicrmw.start1184; LA64D-NEXT: # in Loop: Header=BB16_3 Depth=21185; LA64D-NEXT: move $a4, $a11186; LA64D-NEXT: sc.w $a4, $a0, 01187; LA64D-NEXT: beq $a4, $zero, .LBB16_31188; LA64D-NEXT: b .LBB16_61189; LA64D-NEXT: .LBB16_5: # %atomicrmw.start1190; LA64D-NEXT: # in Loop: Header=BB16_1 Depth=11191; LA64D-NEXT: dbar 201192; LA64D-NEXT: .LBB16_6: # %atomicrmw.start1193; LA64D-NEXT: # in Loop: Header=BB16_1 Depth=11194; LA64D-NEXT: movgr2fr.w $fa0, $a31195; LA64D-NEXT: bne $a3, $a2, .LBB16_11196; LA64D-NEXT: # %bb.2: # %atomicrmw.end1197; LA64D-NEXT: ret1198 %v = atomicrmw fadd ptr %p, float 1.0 acq_rel, align 41199 ret float %v1200}1201 1202define float @float_fsub_acq_rel(ptr %p) nounwind {1203; LA64F-LABEL: float_fsub_acq_rel:1204; LA64F: # %bb.0:1205; LA64F-NEXT: fld.s $fa0, $a0, 01206; LA64F-NEXT: lu12i.w $a1, -2641921207; LA64F-NEXT: movgr2fr.w $fa1, $a11208; LA64F-NEXT: .p2align 4, , 161209; LA64F-NEXT: .LBB17_1: # %atomicrmw.start1210; LA64F-NEXT: # =>This Loop Header: Depth=11211; LA64F-NEXT: # Child Loop BB17_3 Depth 21212; LA64F-NEXT: fadd.s $fa2, $fa0, $fa11213; LA64F-NEXT: movfr2gr.s $a1, $fa21214; LA64F-NEXT: movfr2gr.s $a2, $fa01215; LA64F-NEXT: .LBB17_3: # %atomicrmw.start1216; LA64F-NEXT: # Parent Loop BB17_1 Depth=11217; LA64F-NEXT: # => This Inner Loop Header: Depth=21218; LA64F-NEXT: ll.w $a3, $a0, 01219; LA64F-NEXT: bne $a3, $a2, .LBB17_51220; LA64F-NEXT: # %bb.4: # %atomicrmw.start1221; LA64F-NEXT: # in Loop: Header=BB17_3 Depth=21222; LA64F-NEXT: move $a4, $a11223; LA64F-NEXT: sc.w $a4, $a0, 01224; LA64F-NEXT: beq $a4, $zero, .LBB17_31225; LA64F-NEXT: b .LBB17_61226; LA64F-NEXT: .LBB17_5: # %atomicrmw.start1227; LA64F-NEXT: # in Loop: Header=BB17_1 Depth=11228; LA64F-NEXT: dbar 201229; LA64F-NEXT: .LBB17_6: # %atomicrmw.start1230; LA64F-NEXT: # in Loop: Header=BB17_1 Depth=11231; LA64F-NEXT: movgr2fr.w $fa0, $a31232; LA64F-NEXT: bne $a3, $a2, .LBB17_11233; LA64F-NEXT: # %bb.2: # %atomicrmw.end1234; LA64F-NEXT: ret1235;1236; LA64D-LABEL: float_fsub_acq_rel:1237; LA64D: # %bb.0:1238; LA64D-NEXT: fld.s $fa0, $a0, 01239; LA64D-NEXT: vldi $vr1, -10401240; LA64D-NEXT: .p2align 4, , 161241; LA64D-NEXT: .LBB17_1: # %atomicrmw.start1242; LA64D-NEXT: # =>This Loop Header: Depth=11243; LA64D-NEXT: # Child Loop BB17_3 Depth 21244; LA64D-NEXT: fadd.s $fa2, $fa0, $fa11245; LA64D-NEXT: movfr2gr.s $a1, $fa21246; LA64D-NEXT: movfr2gr.s $a2, $fa01247; LA64D-NEXT: .LBB17_3: # %atomicrmw.start1248; LA64D-NEXT: # Parent Loop BB17_1 Depth=11249; LA64D-NEXT: # => This Inner Loop Header: Depth=21250; LA64D-NEXT: ll.w $a3, $a0, 01251; LA64D-NEXT: bne $a3, $a2, .LBB17_51252; LA64D-NEXT: # %bb.4: # %atomicrmw.start1253; LA64D-NEXT: # in Loop: Header=BB17_3 Depth=21254; LA64D-NEXT: move $a4, $a11255; LA64D-NEXT: sc.w $a4, $a0, 01256; LA64D-NEXT: beq $a4, $zero, .LBB17_31257; LA64D-NEXT: b .LBB17_61258; LA64D-NEXT: .LBB17_5: # %atomicrmw.start1259; LA64D-NEXT: # in Loop: Header=BB17_1 Depth=11260; LA64D-NEXT: dbar 201261; LA64D-NEXT: .LBB17_6: # %atomicrmw.start1262; LA64D-NEXT: # in Loop: Header=BB17_1 Depth=11263; LA64D-NEXT: movgr2fr.w $fa0, $a31264; LA64D-NEXT: bne $a3, $a2, .LBB17_11265; LA64D-NEXT: # %bb.2: # %atomicrmw.end1266; LA64D-NEXT: ret1267 %v = atomicrmw fsub ptr %p, float 1.0 acq_rel, align 41268 ret float %v1269}1270 1271define float @float_fmin_acq_rel(ptr %p) nounwind {1272; LA64F-LABEL: float_fmin_acq_rel:1273; LA64F: # %bb.0:1274; LA64F-NEXT: fld.s $fa0, $a0, 01275; LA64F-NEXT: lu12i.w $a1, 2600961276; LA64F-NEXT: movgr2fr.w $fa1, $a11277; LA64F-NEXT: .p2align 4, , 161278; LA64F-NEXT: .LBB18_1: # %atomicrmw.start1279; LA64F-NEXT: # =>This Loop Header: Depth=11280; LA64F-NEXT: # Child Loop BB18_3 Depth 21281; LA64F-NEXT: fmin.s $fa2, $fa0, $fa11282; LA64F-NEXT: movfr2gr.s $a1, $fa21283; LA64F-NEXT: movfr2gr.s $a2, $fa01284; LA64F-NEXT: .LBB18_3: # %atomicrmw.start1285; LA64F-NEXT: # Parent Loop BB18_1 Depth=11286; LA64F-NEXT: # => This Inner Loop Header: Depth=21287; LA64F-NEXT: ll.w $a3, $a0, 01288; LA64F-NEXT: bne $a3, $a2, .LBB18_51289; LA64F-NEXT: # %bb.4: # %atomicrmw.start1290; LA64F-NEXT: # in Loop: Header=BB18_3 Depth=21291; LA64F-NEXT: move $a4, $a11292; LA64F-NEXT: sc.w $a4, $a0, 01293; LA64F-NEXT: beq $a4, $zero, .LBB18_31294; LA64F-NEXT: b .LBB18_61295; LA64F-NEXT: .LBB18_5: # %atomicrmw.start1296; LA64F-NEXT: # in Loop: Header=BB18_1 Depth=11297; LA64F-NEXT: dbar 201298; LA64F-NEXT: .LBB18_6: # %atomicrmw.start1299; LA64F-NEXT: # in Loop: Header=BB18_1 Depth=11300; LA64F-NEXT: movgr2fr.w $fa0, $a31301; LA64F-NEXT: bne $a3, $a2, .LBB18_11302; LA64F-NEXT: # %bb.2: # %atomicrmw.end1303; LA64F-NEXT: ret1304;1305; LA64D-LABEL: float_fmin_acq_rel:1306; LA64D: # %bb.0:1307; LA64D-NEXT: fld.s $fa0, $a0, 01308; LA64D-NEXT: vldi $vr1, -11681309; LA64D-NEXT: .p2align 4, , 161310; LA64D-NEXT: .LBB18_1: # %atomicrmw.start1311; LA64D-NEXT: # =>This Loop Header: Depth=11312; LA64D-NEXT: # Child Loop BB18_3 Depth 21313; LA64D-NEXT: fmin.s $fa2, $fa0, $fa11314; LA64D-NEXT: movfr2gr.s $a1, $fa21315; LA64D-NEXT: movfr2gr.s $a2, $fa01316; LA64D-NEXT: .LBB18_3: # %atomicrmw.start1317; LA64D-NEXT: # Parent Loop BB18_1 Depth=11318; LA64D-NEXT: # => This Inner Loop Header: Depth=21319; LA64D-NEXT: ll.w $a3, $a0, 01320; LA64D-NEXT: bne $a3, $a2, .LBB18_51321; LA64D-NEXT: # %bb.4: # %atomicrmw.start1322; LA64D-NEXT: # in Loop: Header=BB18_3 Depth=21323; LA64D-NEXT: move $a4, $a11324; LA64D-NEXT: sc.w $a4, $a0, 01325; LA64D-NEXT: beq $a4, $zero, .LBB18_31326; LA64D-NEXT: b .LBB18_61327; LA64D-NEXT: .LBB18_5: # %atomicrmw.start1328; LA64D-NEXT: # in Loop: Header=BB18_1 Depth=11329; LA64D-NEXT: dbar 201330; LA64D-NEXT: .LBB18_6: # %atomicrmw.start1331; LA64D-NEXT: # in Loop: Header=BB18_1 Depth=11332; LA64D-NEXT: movgr2fr.w $fa0, $a31333; LA64D-NEXT: bne $a3, $a2, .LBB18_11334; LA64D-NEXT: # %bb.2: # %atomicrmw.end1335; LA64D-NEXT: ret1336 %v = atomicrmw fmin ptr %p, float 1.0 acq_rel, align 41337 ret float %v1338}1339 1340define float @float_fmax_acq_rel(ptr %p) nounwind {1341; LA64F-LABEL: float_fmax_acq_rel:1342; LA64F: # %bb.0:1343; LA64F-NEXT: fld.s $fa0, $a0, 01344; LA64F-NEXT: lu12i.w $a1, 2600961345; LA64F-NEXT: movgr2fr.w $fa1, $a11346; LA64F-NEXT: .p2align 4, , 161347; LA64F-NEXT: .LBB19_1: # %atomicrmw.start1348; LA64F-NEXT: # =>This Loop Header: Depth=11349; LA64F-NEXT: # Child Loop BB19_3 Depth 21350; LA64F-NEXT: fmax.s $fa2, $fa0, $fa11351; LA64F-NEXT: movfr2gr.s $a1, $fa21352; LA64F-NEXT: movfr2gr.s $a2, $fa01353; LA64F-NEXT: .LBB19_3: # %atomicrmw.start1354; LA64F-NEXT: # Parent Loop BB19_1 Depth=11355; LA64F-NEXT: # => This Inner Loop Header: Depth=21356; LA64F-NEXT: ll.w $a3, $a0, 01357; LA64F-NEXT: bne $a3, $a2, .LBB19_51358; LA64F-NEXT: # %bb.4: # %atomicrmw.start1359; LA64F-NEXT: # in Loop: Header=BB19_3 Depth=21360; LA64F-NEXT: move $a4, $a11361; LA64F-NEXT: sc.w $a4, $a0, 01362; LA64F-NEXT: beq $a4, $zero, .LBB19_31363; LA64F-NEXT: b .LBB19_61364; LA64F-NEXT: .LBB19_5: # %atomicrmw.start1365; LA64F-NEXT: # in Loop: Header=BB19_1 Depth=11366; LA64F-NEXT: dbar 201367; LA64F-NEXT: .LBB19_6: # %atomicrmw.start1368; LA64F-NEXT: # in Loop: Header=BB19_1 Depth=11369; LA64F-NEXT: movgr2fr.w $fa0, $a31370; LA64F-NEXT: bne $a3, $a2, .LBB19_11371; LA64F-NEXT: # %bb.2: # %atomicrmw.end1372; LA64F-NEXT: ret1373;1374; LA64D-LABEL: float_fmax_acq_rel:1375; LA64D: # %bb.0:1376; LA64D-NEXT: fld.s $fa0, $a0, 01377; LA64D-NEXT: vldi $vr1, -11681378; LA64D-NEXT: .p2align 4, , 161379; LA64D-NEXT: .LBB19_1: # %atomicrmw.start1380; LA64D-NEXT: # =>This Loop Header: Depth=11381; LA64D-NEXT: # Child Loop BB19_3 Depth 21382; LA64D-NEXT: fmax.s $fa2, $fa0, $fa11383; LA64D-NEXT: movfr2gr.s $a1, $fa21384; LA64D-NEXT: movfr2gr.s $a2, $fa01385; LA64D-NEXT: .LBB19_3: # %atomicrmw.start1386; LA64D-NEXT: # Parent Loop BB19_1 Depth=11387; LA64D-NEXT: # => This Inner Loop Header: Depth=21388; LA64D-NEXT: ll.w $a3, $a0, 01389; LA64D-NEXT: bne $a3, $a2, .LBB19_51390; LA64D-NEXT: # %bb.4: # %atomicrmw.start1391; LA64D-NEXT: # in Loop: Header=BB19_3 Depth=21392; LA64D-NEXT: move $a4, $a11393; LA64D-NEXT: sc.w $a4, $a0, 01394; LA64D-NEXT: beq $a4, $zero, .LBB19_31395; LA64D-NEXT: b .LBB19_61396; LA64D-NEXT: .LBB19_5: # %atomicrmw.start1397; LA64D-NEXT: # in Loop: Header=BB19_1 Depth=11398; LA64D-NEXT: dbar 201399; LA64D-NEXT: .LBB19_6: # %atomicrmw.start1400; LA64D-NEXT: # in Loop: Header=BB19_1 Depth=11401; LA64D-NEXT: movgr2fr.w $fa0, $a31402; LA64D-NEXT: bne $a3, $a2, .LBB19_11403; LA64D-NEXT: # %bb.2: # %atomicrmw.end1404; LA64D-NEXT: ret1405 %v = atomicrmw fmax ptr %p, float 1.0 acq_rel, align 41406 ret float %v1407}1408 1409define double @double_fadd_acq_rel(ptr %p) nounwind {1410; LA64F-LABEL: double_fadd_acq_rel:1411; LA64F: # %bb.0:1412; LA64F-NEXT: addi.d $sp, $sp, -481413; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill1414; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill1415; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill1416; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill1417; LA64F-NEXT: move $fp, $a01418; LA64F-NEXT: ld.d $s1, $a0, 01419; LA64F-NEXT: lu52i.d $s0, $zero, 10231420; LA64F-NEXT: .p2align 4, , 161421; LA64F-NEXT: .LBB20_1: # %atomicrmw.start1422; LA64F-NEXT: # =>This Inner Loop Header: Depth=11423; LA64F-NEXT: move $a0, $s11424; LA64F-NEXT: move $a1, $s01425; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)1426; LA64F-NEXT: jirl $ra, $ra, 01427; LA64F-NEXT: st.d $s1, $sp, 81428; LA64F-NEXT: st.d $a0, $sp, 01429; LA64F-NEXT: ori $a0, $zero, 81430; LA64F-NEXT: addi.d $a2, $sp, 81431; LA64F-NEXT: addi.d $a3, $sp, 01432; LA64F-NEXT: ori $a4, $zero, 41433; LA64F-NEXT: ori $a5, $zero, 21434; LA64F-NEXT: move $a1, $fp1435; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1436; LA64F-NEXT: jirl $ra, $ra, 01437; LA64F-NEXT: ld.d $s1, $sp, 81438; LA64F-NEXT: beqz $a0, .LBB20_11439; LA64F-NEXT: # %bb.2: # %atomicrmw.end1440; LA64F-NEXT: move $a0, $s11441; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload1442; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload1443; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload1444; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload1445; LA64F-NEXT: addi.d $sp, $sp, 481446; LA64F-NEXT: ret1447;1448; LA64D-LABEL: double_fadd_acq_rel:1449; LA64D: # %bb.0:1450; LA64D-NEXT: addi.d $sp, $sp, -321451; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill1452; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill1453; LA64D-NEXT: move $fp, $a01454; LA64D-NEXT: fld.d $fa0, $a0, 01455; LA64D-NEXT: .p2align 4, , 161456; LA64D-NEXT: .LBB20_1: # %atomicrmw.start1457; LA64D-NEXT: # =>This Inner Loop Header: Depth=11458; LA64D-NEXT: vldi $vr1, -9121459; LA64D-NEXT: fadd.d $fa1, $fa0, $fa11460; LA64D-NEXT: fst.d $fa0, $sp, 81461; LA64D-NEXT: fst.d $fa1, $sp, 01462; LA64D-NEXT: ori $a0, $zero, 81463; LA64D-NEXT: addi.d $a2, $sp, 81464; LA64D-NEXT: addi.d $a3, $sp, 01465; LA64D-NEXT: ori $a4, $zero, 41466; LA64D-NEXT: ori $a5, $zero, 21467; LA64D-NEXT: move $a1, $fp1468; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1469; LA64D-NEXT: jirl $ra, $ra, 01470; LA64D-NEXT: fld.d $fa0, $sp, 81471; LA64D-NEXT: beqz $a0, .LBB20_11472; LA64D-NEXT: # %bb.2: # %atomicrmw.end1473; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload1474; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload1475; LA64D-NEXT: addi.d $sp, $sp, 321476; LA64D-NEXT: ret1477 %v = atomicrmw fadd ptr %p, double 1.0 acq_rel, align 41478 ret double %v1479}1480 1481define double @double_fsub_acq_rel(ptr %p) nounwind {1482; LA64F-LABEL: double_fsub_acq_rel:1483; LA64F: # %bb.0:1484; LA64F-NEXT: addi.d $sp, $sp, -481485; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill1486; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill1487; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill1488; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill1489; LA64F-NEXT: move $fp, $a01490; LA64F-NEXT: ld.d $s1, $a0, 01491; LA64F-NEXT: lu52i.d $s0, $zero, -10251492; LA64F-NEXT: .p2align 4, , 161493; LA64F-NEXT: .LBB21_1: # %atomicrmw.start1494; LA64F-NEXT: # =>This Inner Loop Header: Depth=11495; LA64F-NEXT: move $a0, $s11496; LA64F-NEXT: move $a1, $s01497; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)1498; LA64F-NEXT: jirl $ra, $ra, 01499; LA64F-NEXT: st.d $s1, $sp, 81500; LA64F-NEXT: st.d $a0, $sp, 01501; LA64F-NEXT: ori $a0, $zero, 81502; LA64F-NEXT: addi.d $a2, $sp, 81503; LA64F-NEXT: addi.d $a3, $sp, 01504; LA64F-NEXT: ori $a4, $zero, 41505; LA64F-NEXT: ori $a5, $zero, 21506; LA64F-NEXT: move $a1, $fp1507; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1508; LA64F-NEXT: jirl $ra, $ra, 01509; LA64F-NEXT: ld.d $s1, $sp, 81510; LA64F-NEXT: beqz $a0, .LBB21_11511; LA64F-NEXT: # %bb.2: # %atomicrmw.end1512; LA64F-NEXT: move $a0, $s11513; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload1514; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload1515; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload1516; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload1517; LA64F-NEXT: addi.d $sp, $sp, 481518; LA64F-NEXT: ret1519;1520; LA64D-LABEL: double_fsub_acq_rel:1521; LA64D: # %bb.0:1522; LA64D-NEXT: addi.d $sp, $sp, -321523; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill1524; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill1525; LA64D-NEXT: move $fp, $a01526; LA64D-NEXT: fld.d $fa0, $a0, 01527; LA64D-NEXT: .p2align 4, , 161528; LA64D-NEXT: .LBB21_1: # %atomicrmw.start1529; LA64D-NEXT: # =>This Inner Loop Header: Depth=11530; LA64D-NEXT: vldi $vr1, -7841531; LA64D-NEXT: fadd.d $fa1, $fa0, $fa11532; LA64D-NEXT: fst.d $fa0, $sp, 81533; LA64D-NEXT: fst.d $fa1, $sp, 01534; LA64D-NEXT: ori $a0, $zero, 81535; LA64D-NEXT: addi.d $a2, $sp, 81536; LA64D-NEXT: addi.d $a3, $sp, 01537; LA64D-NEXT: ori $a4, $zero, 41538; LA64D-NEXT: ori $a5, $zero, 21539; LA64D-NEXT: move $a1, $fp1540; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1541; LA64D-NEXT: jirl $ra, $ra, 01542; LA64D-NEXT: fld.d $fa0, $sp, 81543; LA64D-NEXT: beqz $a0, .LBB21_11544; LA64D-NEXT: # %bb.2: # %atomicrmw.end1545; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload1546; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload1547; LA64D-NEXT: addi.d $sp, $sp, 321548; LA64D-NEXT: ret1549 %v = atomicrmw fsub ptr %p, double 1.0 acq_rel, align 41550 ret double %v1551}1552 1553define double @double_fmin_acq_rel(ptr %p) nounwind {1554; LA64F-LABEL: double_fmin_acq_rel:1555; LA64F: # %bb.0:1556; LA64F-NEXT: addi.d $sp, $sp, -481557; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill1558; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill1559; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill1560; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill1561; LA64F-NEXT: move $fp, $a01562; LA64F-NEXT: ld.d $s1, $a0, 01563; LA64F-NEXT: lu52i.d $s0, $zero, 10231564; LA64F-NEXT: .p2align 4, , 161565; LA64F-NEXT: .LBB22_1: # %atomicrmw.start1566; LA64F-NEXT: # =>This Inner Loop Header: Depth=11567; LA64F-NEXT: move $a0, $s11568; LA64F-NEXT: move $a1, $s01569; LA64F-NEXT: pcaddu18i $ra, %call36(fmin)1570; LA64F-NEXT: jirl $ra, $ra, 01571; LA64F-NEXT: st.d $s1, $sp, 81572; LA64F-NEXT: st.d $a0, $sp, 01573; LA64F-NEXT: ori $a0, $zero, 81574; LA64F-NEXT: addi.d $a2, $sp, 81575; LA64F-NEXT: addi.d $a3, $sp, 01576; LA64F-NEXT: ori $a4, $zero, 41577; LA64F-NEXT: ori $a5, $zero, 21578; LA64F-NEXT: move $a1, $fp1579; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1580; LA64F-NEXT: jirl $ra, $ra, 01581; LA64F-NEXT: ld.d $s1, $sp, 81582; LA64F-NEXT: beqz $a0, .LBB22_11583; LA64F-NEXT: # %bb.2: # %atomicrmw.end1584; LA64F-NEXT: move $a0, $s11585; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload1586; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload1587; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload1588; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload1589; LA64F-NEXT: addi.d $sp, $sp, 481590; LA64F-NEXT: ret1591;1592; LA64D-LABEL: double_fmin_acq_rel:1593; LA64D: # %bb.0:1594; LA64D-NEXT: addi.d $sp, $sp, -321595; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill1596; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill1597; LA64D-NEXT: move $fp, $a01598; LA64D-NEXT: fld.d $fa0, $a0, 01599; LA64D-NEXT: .p2align 4, , 161600; LA64D-NEXT: .LBB22_1: # %atomicrmw.start1601; LA64D-NEXT: # =>This Inner Loop Header: Depth=11602; LA64D-NEXT: vldi $vr1, -9121603; LA64D-NEXT: fmin.d $fa1, $fa0, $fa11604; LA64D-NEXT: fst.d $fa0, $sp, 81605; LA64D-NEXT: fst.d $fa1, $sp, 01606; LA64D-NEXT: ori $a0, $zero, 81607; LA64D-NEXT: addi.d $a2, $sp, 81608; LA64D-NEXT: addi.d $a3, $sp, 01609; LA64D-NEXT: ori $a4, $zero, 41610; LA64D-NEXT: ori $a5, $zero, 21611; LA64D-NEXT: move $a1, $fp1612; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1613; LA64D-NEXT: jirl $ra, $ra, 01614; LA64D-NEXT: fld.d $fa0, $sp, 81615; LA64D-NEXT: beqz $a0, .LBB22_11616; LA64D-NEXT: # %bb.2: # %atomicrmw.end1617; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload1618; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload1619; LA64D-NEXT: addi.d $sp, $sp, 321620; LA64D-NEXT: ret1621 %v = atomicrmw fmin ptr %p, double 1.0 acq_rel, align 41622 ret double %v1623}1624 1625define double @double_fmax_acq_rel(ptr %p) nounwind {1626; LA64F-LABEL: double_fmax_acq_rel:1627; LA64F: # %bb.0:1628; LA64F-NEXT: addi.d $sp, $sp, -481629; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill1630; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill1631; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill1632; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill1633; LA64F-NEXT: move $fp, $a01634; LA64F-NEXT: ld.d $s1, $a0, 01635; LA64F-NEXT: lu52i.d $s0, $zero, 10231636; LA64F-NEXT: .p2align 4, , 161637; LA64F-NEXT: .LBB23_1: # %atomicrmw.start1638; LA64F-NEXT: # =>This Inner Loop Header: Depth=11639; LA64F-NEXT: move $a0, $s11640; LA64F-NEXT: move $a1, $s01641; LA64F-NEXT: pcaddu18i $ra, %call36(fmax)1642; LA64F-NEXT: jirl $ra, $ra, 01643; LA64F-NEXT: st.d $s1, $sp, 81644; LA64F-NEXT: st.d $a0, $sp, 01645; LA64F-NEXT: ori $a0, $zero, 81646; LA64F-NEXT: addi.d $a2, $sp, 81647; LA64F-NEXT: addi.d $a3, $sp, 01648; LA64F-NEXT: ori $a4, $zero, 41649; LA64F-NEXT: ori $a5, $zero, 21650; LA64F-NEXT: move $a1, $fp1651; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1652; LA64F-NEXT: jirl $ra, $ra, 01653; LA64F-NEXT: ld.d $s1, $sp, 81654; LA64F-NEXT: beqz $a0, .LBB23_11655; LA64F-NEXT: # %bb.2: # %atomicrmw.end1656; LA64F-NEXT: move $a0, $s11657; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload1658; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload1659; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload1660; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload1661; LA64F-NEXT: addi.d $sp, $sp, 481662; LA64F-NEXT: ret1663;1664; LA64D-LABEL: double_fmax_acq_rel:1665; LA64D: # %bb.0:1666; LA64D-NEXT: addi.d $sp, $sp, -321667; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill1668; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill1669; LA64D-NEXT: move $fp, $a01670; LA64D-NEXT: fld.d $fa0, $a0, 01671; LA64D-NEXT: .p2align 4, , 161672; LA64D-NEXT: .LBB23_1: # %atomicrmw.start1673; LA64D-NEXT: # =>This Inner Loop Header: Depth=11674; LA64D-NEXT: vldi $vr1, -9121675; LA64D-NEXT: fmax.d $fa1, $fa0, $fa11676; LA64D-NEXT: fst.d $fa0, $sp, 81677; LA64D-NEXT: fst.d $fa1, $sp, 01678; LA64D-NEXT: ori $a0, $zero, 81679; LA64D-NEXT: addi.d $a2, $sp, 81680; LA64D-NEXT: addi.d $a3, $sp, 01681; LA64D-NEXT: ori $a4, $zero, 41682; LA64D-NEXT: ori $a5, $zero, 21683; LA64D-NEXT: move $a1, $fp1684; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)1685; LA64D-NEXT: jirl $ra, $ra, 01686; LA64D-NEXT: fld.d $fa0, $sp, 81687; LA64D-NEXT: beqz $a0, .LBB23_11688; LA64D-NEXT: # %bb.2: # %atomicrmw.end1689; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload1690; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload1691; LA64D-NEXT: addi.d $sp, $sp, 321692; LA64D-NEXT: ret1693 %v = atomicrmw fmax ptr %p, double 1.0 acq_rel, align 41694 ret double %v1695}1696 1697define float @float_fadd_seq_cst(ptr %p) nounwind {1698; LA64F-LABEL: float_fadd_seq_cst:1699; LA64F: # %bb.0:1700; LA64F-NEXT: fld.s $fa0, $a0, 01701; LA64F-NEXT: lu12i.w $a1, 2600961702; LA64F-NEXT: movgr2fr.w $fa1, $a11703; LA64F-NEXT: .p2align 4, , 161704; LA64F-NEXT: .LBB24_1: # %atomicrmw.start1705; LA64F-NEXT: # =>This Loop Header: Depth=11706; LA64F-NEXT: # Child Loop BB24_3 Depth 21707; LA64F-NEXT: fadd.s $fa2, $fa0, $fa11708; LA64F-NEXT: movfr2gr.s $a1, $fa21709; LA64F-NEXT: movfr2gr.s $a2, $fa01710; LA64F-NEXT: .LBB24_3: # %atomicrmw.start1711; LA64F-NEXT: # Parent Loop BB24_1 Depth=11712; LA64F-NEXT: # => This Inner Loop Header: Depth=21713; LA64F-NEXT: ll.w $a3, $a0, 01714; LA64F-NEXT: bne $a3, $a2, .LBB24_51715; LA64F-NEXT: # %bb.4: # %atomicrmw.start1716; LA64F-NEXT: # in Loop: Header=BB24_3 Depth=21717; LA64F-NEXT: move $a4, $a11718; LA64F-NEXT: sc.w $a4, $a0, 01719; LA64F-NEXT: beq $a4, $zero, .LBB24_31720; LA64F-NEXT: b .LBB24_61721; LA64F-NEXT: .LBB24_5: # %atomicrmw.start1722; LA64F-NEXT: # in Loop: Header=BB24_1 Depth=11723; LA64F-NEXT: dbar 201724; LA64F-NEXT: .LBB24_6: # %atomicrmw.start1725; LA64F-NEXT: # in Loop: Header=BB24_1 Depth=11726; LA64F-NEXT: movgr2fr.w $fa0, $a31727; LA64F-NEXT: bne $a3, $a2, .LBB24_11728; LA64F-NEXT: # %bb.2: # %atomicrmw.end1729; LA64F-NEXT: ret1730;1731; LA64D-LABEL: float_fadd_seq_cst:1732; LA64D: # %bb.0:1733; LA64D-NEXT: fld.s $fa0, $a0, 01734; LA64D-NEXT: vldi $vr1, -11681735; LA64D-NEXT: .p2align 4, , 161736; LA64D-NEXT: .LBB24_1: # %atomicrmw.start1737; LA64D-NEXT: # =>This Loop Header: Depth=11738; LA64D-NEXT: # Child Loop BB24_3 Depth 21739; LA64D-NEXT: fadd.s $fa2, $fa0, $fa11740; LA64D-NEXT: movfr2gr.s $a1, $fa21741; LA64D-NEXT: movfr2gr.s $a2, $fa01742; LA64D-NEXT: .LBB24_3: # %atomicrmw.start1743; LA64D-NEXT: # Parent Loop BB24_1 Depth=11744; LA64D-NEXT: # => This Inner Loop Header: Depth=21745; LA64D-NEXT: ll.w $a3, $a0, 01746; LA64D-NEXT: bne $a3, $a2, .LBB24_51747; LA64D-NEXT: # %bb.4: # %atomicrmw.start1748; LA64D-NEXT: # in Loop: Header=BB24_3 Depth=21749; LA64D-NEXT: move $a4, $a11750; LA64D-NEXT: sc.w $a4, $a0, 01751; LA64D-NEXT: beq $a4, $zero, .LBB24_31752; LA64D-NEXT: b .LBB24_61753; LA64D-NEXT: .LBB24_5: # %atomicrmw.start1754; LA64D-NEXT: # in Loop: Header=BB24_1 Depth=11755; LA64D-NEXT: dbar 201756; LA64D-NEXT: .LBB24_6: # %atomicrmw.start1757; LA64D-NEXT: # in Loop: Header=BB24_1 Depth=11758; LA64D-NEXT: movgr2fr.w $fa0, $a31759; LA64D-NEXT: bne $a3, $a2, .LBB24_11760; LA64D-NEXT: # %bb.2: # %atomicrmw.end1761; LA64D-NEXT: ret1762 %v = atomicrmw fadd ptr %p, float 1.0 seq_cst, align 41763 ret float %v1764}1765 1766define float @float_fsub_seq_cst(ptr %p) nounwind {1767; LA64F-LABEL: float_fsub_seq_cst:1768; LA64F: # %bb.0:1769; LA64F-NEXT: fld.s $fa0, $a0, 01770; LA64F-NEXT: lu12i.w $a1, -2641921771; LA64F-NEXT: movgr2fr.w $fa1, $a11772; LA64F-NEXT: .p2align 4, , 161773; LA64F-NEXT: .LBB25_1: # %atomicrmw.start1774; LA64F-NEXT: # =>This Loop Header: Depth=11775; LA64F-NEXT: # Child Loop BB25_3 Depth 21776; LA64F-NEXT: fadd.s $fa2, $fa0, $fa11777; LA64F-NEXT: movfr2gr.s $a1, $fa21778; LA64F-NEXT: movfr2gr.s $a2, $fa01779; LA64F-NEXT: .LBB25_3: # %atomicrmw.start1780; LA64F-NEXT: # Parent Loop BB25_1 Depth=11781; LA64F-NEXT: # => This Inner Loop Header: Depth=21782; LA64F-NEXT: ll.w $a3, $a0, 01783; LA64F-NEXT: bne $a3, $a2, .LBB25_51784; LA64F-NEXT: # %bb.4: # %atomicrmw.start1785; LA64F-NEXT: # in Loop: Header=BB25_3 Depth=21786; LA64F-NEXT: move $a4, $a11787; LA64F-NEXT: sc.w $a4, $a0, 01788; LA64F-NEXT: beq $a4, $zero, .LBB25_31789; LA64F-NEXT: b .LBB25_61790; LA64F-NEXT: .LBB25_5: # %atomicrmw.start1791; LA64F-NEXT: # in Loop: Header=BB25_1 Depth=11792; LA64F-NEXT: dbar 201793; LA64F-NEXT: .LBB25_6: # %atomicrmw.start1794; LA64F-NEXT: # in Loop: Header=BB25_1 Depth=11795; LA64F-NEXT: movgr2fr.w $fa0, $a31796; LA64F-NEXT: bne $a3, $a2, .LBB25_11797; LA64F-NEXT: # %bb.2: # %atomicrmw.end1798; LA64F-NEXT: ret1799;1800; LA64D-LABEL: float_fsub_seq_cst:1801; LA64D: # %bb.0:1802; LA64D-NEXT: fld.s $fa0, $a0, 01803; LA64D-NEXT: vldi $vr1, -10401804; LA64D-NEXT: .p2align 4, , 161805; LA64D-NEXT: .LBB25_1: # %atomicrmw.start1806; LA64D-NEXT: # =>This Loop Header: Depth=11807; LA64D-NEXT: # Child Loop BB25_3 Depth 21808; LA64D-NEXT: fadd.s $fa2, $fa0, $fa11809; LA64D-NEXT: movfr2gr.s $a1, $fa21810; LA64D-NEXT: movfr2gr.s $a2, $fa01811; LA64D-NEXT: .LBB25_3: # %atomicrmw.start1812; LA64D-NEXT: # Parent Loop BB25_1 Depth=11813; LA64D-NEXT: # => This Inner Loop Header: Depth=21814; LA64D-NEXT: ll.w $a3, $a0, 01815; LA64D-NEXT: bne $a3, $a2, .LBB25_51816; LA64D-NEXT: # %bb.4: # %atomicrmw.start1817; LA64D-NEXT: # in Loop: Header=BB25_3 Depth=21818; LA64D-NEXT: move $a4, $a11819; LA64D-NEXT: sc.w $a4, $a0, 01820; LA64D-NEXT: beq $a4, $zero, .LBB25_31821; LA64D-NEXT: b .LBB25_61822; LA64D-NEXT: .LBB25_5: # %atomicrmw.start1823; LA64D-NEXT: # in Loop: Header=BB25_1 Depth=11824; LA64D-NEXT: dbar 201825; LA64D-NEXT: .LBB25_6: # %atomicrmw.start1826; LA64D-NEXT: # in Loop: Header=BB25_1 Depth=11827; LA64D-NEXT: movgr2fr.w $fa0, $a31828; LA64D-NEXT: bne $a3, $a2, .LBB25_11829; LA64D-NEXT: # %bb.2: # %atomicrmw.end1830; LA64D-NEXT: ret1831 %v = atomicrmw fsub ptr %p, float 1.0 seq_cst, align 41832 ret float %v1833}1834 1835define float @float_fmin_seq_cst(ptr %p) nounwind {1836; LA64F-LABEL: float_fmin_seq_cst:1837; LA64F: # %bb.0:1838; LA64F-NEXT: fld.s $fa0, $a0, 01839; LA64F-NEXT: lu12i.w $a1, 2600961840; LA64F-NEXT: movgr2fr.w $fa1, $a11841; LA64F-NEXT: .p2align 4, , 161842; LA64F-NEXT: .LBB26_1: # %atomicrmw.start1843; LA64F-NEXT: # =>This Loop Header: Depth=11844; LA64F-NEXT: # Child Loop BB26_3 Depth 21845; LA64F-NEXT: fmin.s $fa2, $fa0, $fa11846; LA64F-NEXT: movfr2gr.s $a1, $fa21847; LA64F-NEXT: movfr2gr.s $a2, $fa01848; LA64F-NEXT: .LBB26_3: # %atomicrmw.start1849; LA64F-NEXT: # Parent Loop BB26_1 Depth=11850; LA64F-NEXT: # => This Inner Loop Header: Depth=21851; LA64F-NEXT: ll.w $a3, $a0, 01852; LA64F-NEXT: bne $a3, $a2, .LBB26_51853; LA64F-NEXT: # %bb.4: # %atomicrmw.start1854; LA64F-NEXT: # in Loop: Header=BB26_3 Depth=21855; LA64F-NEXT: move $a4, $a11856; LA64F-NEXT: sc.w $a4, $a0, 01857; LA64F-NEXT: beq $a4, $zero, .LBB26_31858; LA64F-NEXT: b .LBB26_61859; LA64F-NEXT: .LBB26_5: # %atomicrmw.start1860; LA64F-NEXT: # in Loop: Header=BB26_1 Depth=11861; LA64F-NEXT: dbar 201862; LA64F-NEXT: .LBB26_6: # %atomicrmw.start1863; LA64F-NEXT: # in Loop: Header=BB26_1 Depth=11864; LA64F-NEXT: movgr2fr.w $fa0, $a31865; LA64F-NEXT: bne $a3, $a2, .LBB26_11866; LA64F-NEXT: # %bb.2: # %atomicrmw.end1867; LA64F-NEXT: ret1868;1869; LA64D-LABEL: float_fmin_seq_cst:1870; LA64D: # %bb.0:1871; LA64D-NEXT: fld.s $fa0, $a0, 01872; LA64D-NEXT: vldi $vr1, -11681873; LA64D-NEXT: .p2align 4, , 161874; LA64D-NEXT: .LBB26_1: # %atomicrmw.start1875; LA64D-NEXT: # =>This Loop Header: Depth=11876; LA64D-NEXT: # Child Loop BB26_3 Depth 21877; LA64D-NEXT: fmin.s $fa2, $fa0, $fa11878; LA64D-NEXT: movfr2gr.s $a1, $fa21879; LA64D-NEXT: movfr2gr.s $a2, $fa01880; LA64D-NEXT: .LBB26_3: # %atomicrmw.start1881; LA64D-NEXT: # Parent Loop BB26_1 Depth=11882; LA64D-NEXT: # => This Inner Loop Header: Depth=21883; LA64D-NEXT: ll.w $a3, $a0, 01884; LA64D-NEXT: bne $a3, $a2, .LBB26_51885; LA64D-NEXT: # %bb.4: # %atomicrmw.start1886; LA64D-NEXT: # in Loop: Header=BB26_3 Depth=21887; LA64D-NEXT: move $a4, $a11888; LA64D-NEXT: sc.w $a4, $a0, 01889; LA64D-NEXT: beq $a4, $zero, .LBB26_31890; LA64D-NEXT: b .LBB26_61891; LA64D-NEXT: .LBB26_5: # %atomicrmw.start1892; LA64D-NEXT: # in Loop: Header=BB26_1 Depth=11893; LA64D-NEXT: dbar 201894; LA64D-NEXT: .LBB26_6: # %atomicrmw.start1895; LA64D-NEXT: # in Loop: Header=BB26_1 Depth=11896; LA64D-NEXT: movgr2fr.w $fa0, $a31897; LA64D-NEXT: bne $a3, $a2, .LBB26_11898; LA64D-NEXT: # %bb.2: # %atomicrmw.end1899; LA64D-NEXT: ret1900 %v = atomicrmw fmin ptr %p, float 1.0 seq_cst, align 41901 ret float %v1902}1903 1904define float @float_fmax_seq_cst(ptr %p) nounwind {1905; LA64F-LABEL: float_fmax_seq_cst:1906; LA64F: # %bb.0:1907; LA64F-NEXT: fld.s $fa0, $a0, 01908; LA64F-NEXT: lu12i.w $a1, 2600961909; LA64F-NEXT: movgr2fr.w $fa1, $a11910; LA64F-NEXT: .p2align 4, , 161911; LA64F-NEXT: .LBB27_1: # %atomicrmw.start1912; LA64F-NEXT: # =>This Loop Header: Depth=11913; LA64F-NEXT: # Child Loop BB27_3 Depth 21914; LA64F-NEXT: fmax.s $fa2, $fa0, $fa11915; LA64F-NEXT: movfr2gr.s $a1, $fa21916; LA64F-NEXT: movfr2gr.s $a2, $fa01917; LA64F-NEXT: .LBB27_3: # %atomicrmw.start1918; LA64F-NEXT: # Parent Loop BB27_1 Depth=11919; LA64F-NEXT: # => This Inner Loop Header: Depth=21920; LA64F-NEXT: ll.w $a3, $a0, 01921; LA64F-NEXT: bne $a3, $a2, .LBB27_51922; LA64F-NEXT: # %bb.4: # %atomicrmw.start1923; LA64F-NEXT: # in Loop: Header=BB27_3 Depth=21924; LA64F-NEXT: move $a4, $a11925; LA64F-NEXT: sc.w $a4, $a0, 01926; LA64F-NEXT: beq $a4, $zero, .LBB27_31927; LA64F-NEXT: b .LBB27_61928; LA64F-NEXT: .LBB27_5: # %atomicrmw.start1929; LA64F-NEXT: # in Loop: Header=BB27_1 Depth=11930; LA64F-NEXT: dbar 201931; LA64F-NEXT: .LBB27_6: # %atomicrmw.start1932; LA64F-NEXT: # in Loop: Header=BB27_1 Depth=11933; LA64F-NEXT: movgr2fr.w $fa0, $a31934; LA64F-NEXT: bne $a3, $a2, .LBB27_11935; LA64F-NEXT: # %bb.2: # %atomicrmw.end1936; LA64F-NEXT: ret1937;1938; LA64D-LABEL: float_fmax_seq_cst:1939; LA64D: # %bb.0:1940; LA64D-NEXT: fld.s $fa0, $a0, 01941; LA64D-NEXT: vldi $vr1, -11681942; LA64D-NEXT: .p2align 4, , 161943; LA64D-NEXT: .LBB27_1: # %atomicrmw.start1944; LA64D-NEXT: # =>This Loop Header: Depth=11945; LA64D-NEXT: # Child Loop BB27_3 Depth 21946; LA64D-NEXT: fmax.s $fa2, $fa0, $fa11947; LA64D-NEXT: movfr2gr.s $a1, $fa21948; LA64D-NEXT: movfr2gr.s $a2, $fa01949; LA64D-NEXT: .LBB27_3: # %atomicrmw.start1950; LA64D-NEXT: # Parent Loop BB27_1 Depth=11951; LA64D-NEXT: # => This Inner Loop Header: Depth=21952; LA64D-NEXT: ll.w $a3, $a0, 01953; LA64D-NEXT: bne $a3, $a2, .LBB27_51954; LA64D-NEXT: # %bb.4: # %atomicrmw.start1955; LA64D-NEXT: # in Loop: Header=BB27_3 Depth=21956; LA64D-NEXT: move $a4, $a11957; LA64D-NEXT: sc.w $a4, $a0, 01958; LA64D-NEXT: beq $a4, $zero, .LBB27_31959; LA64D-NEXT: b .LBB27_61960; LA64D-NEXT: .LBB27_5: # %atomicrmw.start1961; LA64D-NEXT: # in Loop: Header=BB27_1 Depth=11962; LA64D-NEXT: dbar 201963; LA64D-NEXT: .LBB27_6: # %atomicrmw.start1964; LA64D-NEXT: # in Loop: Header=BB27_1 Depth=11965; LA64D-NEXT: movgr2fr.w $fa0, $a31966; LA64D-NEXT: bne $a3, $a2, .LBB27_11967; LA64D-NEXT: # %bb.2: # %atomicrmw.end1968; LA64D-NEXT: ret1969 %v = atomicrmw fmax ptr %p, float 1.0 seq_cst, align 41970 ret float %v1971}1972 1973define double @double_fadd_seq_cst(ptr %p) nounwind {1974; LA64F-LABEL: double_fadd_seq_cst:1975; LA64F: # %bb.0:1976; LA64F-NEXT: addi.d $sp, $sp, -481977; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill1978; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill1979; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill1980; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill1981; LA64F-NEXT: move $fp, $a01982; LA64F-NEXT: ld.d $s1, $a0, 01983; LA64F-NEXT: lu52i.d $s0, $zero, 10231984; LA64F-NEXT: .p2align 4, , 161985; LA64F-NEXT: .LBB28_1: # %atomicrmw.start1986; LA64F-NEXT: # =>This Inner Loop Header: Depth=11987; LA64F-NEXT: move $a0, $s11988; LA64F-NEXT: move $a1, $s01989; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)1990; LA64F-NEXT: jirl $ra, $ra, 01991; LA64F-NEXT: st.d $s1, $sp, 81992; LA64F-NEXT: st.d $a0, $sp, 01993; LA64F-NEXT: ori $a0, $zero, 81994; LA64F-NEXT: addi.d $a2, $sp, 81995; LA64F-NEXT: addi.d $a3, $sp, 01996; LA64F-NEXT: ori $a4, $zero, 51997; LA64F-NEXT: ori $a5, $zero, 51998; LA64F-NEXT: move $a1, $fp1999; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2000; LA64F-NEXT: jirl $ra, $ra, 02001; LA64F-NEXT: ld.d $s1, $sp, 82002; LA64F-NEXT: beqz $a0, .LBB28_12003; LA64F-NEXT: # %bb.2: # %atomicrmw.end2004; LA64F-NEXT: move $a0, $s12005; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload2006; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload2007; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload2008; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload2009; LA64F-NEXT: addi.d $sp, $sp, 482010; LA64F-NEXT: ret2011;2012; LA64D-LABEL: double_fadd_seq_cst:2013; LA64D: # %bb.0:2014; LA64D-NEXT: addi.d $sp, $sp, -322015; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill2016; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill2017; LA64D-NEXT: move $fp, $a02018; LA64D-NEXT: fld.d $fa0, $a0, 02019; LA64D-NEXT: .p2align 4, , 162020; LA64D-NEXT: .LBB28_1: # %atomicrmw.start2021; LA64D-NEXT: # =>This Inner Loop Header: Depth=12022; LA64D-NEXT: vldi $vr1, -9122023; LA64D-NEXT: fadd.d $fa1, $fa0, $fa12024; LA64D-NEXT: fst.d $fa0, $sp, 82025; LA64D-NEXT: fst.d $fa1, $sp, 02026; LA64D-NEXT: ori $a0, $zero, 82027; LA64D-NEXT: addi.d $a2, $sp, 82028; LA64D-NEXT: addi.d $a3, $sp, 02029; LA64D-NEXT: ori $a4, $zero, 52030; LA64D-NEXT: ori $a5, $zero, 52031; LA64D-NEXT: move $a1, $fp2032; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2033; LA64D-NEXT: jirl $ra, $ra, 02034; LA64D-NEXT: fld.d $fa0, $sp, 82035; LA64D-NEXT: beqz $a0, .LBB28_12036; LA64D-NEXT: # %bb.2: # %atomicrmw.end2037; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload2038; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload2039; LA64D-NEXT: addi.d $sp, $sp, 322040; LA64D-NEXT: ret2041 %v = atomicrmw fadd ptr %p, double 1.0 seq_cst, align 42042 ret double %v2043}2044 2045define double @double_fsub_seq_cst(ptr %p) nounwind {2046; LA64F-LABEL: double_fsub_seq_cst:2047; LA64F: # %bb.0:2048; LA64F-NEXT: addi.d $sp, $sp, -482049; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill2050; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill2051; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill2052; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill2053; LA64F-NEXT: move $fp, $a02054; LA64F-NEXT: ld.d $s1, $a0, 02055; LA64F-NEXT: lu52i.d $s0, $zero, -10252056; LA64F-NEXT: .p2align 4, , 162057; LA64F-NEXT: .LBB29_1: # %atomicrmw.start2058; LA64F-NEXT: # =>This Inner Loop Header: Depth=12059; LA64F-NEXT: move $a0, $s12060; LA64F-NEXT: move $a1, $s02061; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)2062; LA64F-NEXT: jirl $ra, $ra, 02063; LA64F-NEXT: st.d $s1, $sp, 82064; LA64F-NEXT: st.d $a0, $sp, 02065; LA64F-NEXT: ori $a0, $zero, 82066; LA64F-NEXT: addi.d $a2, $sp, 82067; LA64F-NEXT: addi.d $a3, $sp, 02068; LA64F-NEXT: ori $a4, $zero, 52069; LA64F-NEXT: ori $a5, $zero, 52070; LA64F-NEXT: move $a1, $fp2071; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2072; LA64F-NEXT: jirl $ra, $ra, 02073; LA64F-NEXT: ld.d $s1, $sp, 82074; LA64F-NEXT: beqz $a0, .LBB29_12075; LA64F-NEXT: # %bb.2: # %atomicrmw.end2076; LA64F-NEXT: move $a0, $s12077; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload2078; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload2079; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload2080; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload2081; LA64F-NEXT: addi.d $sp, $sp, 482082; LA64F-NEXT: ret2083;2084; LA64D-LABEL: double_fsub_seq_cst:2085; LA64D: # %bb.0:2086; LA64D-NEXT: addi.d $sp, $sp, -322087; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill2088; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill2089; LA64D-NEXT: move $fp, $a02090; LA64D-NEXT: fld.d $fa0, $a0, 02091; LA64D-NEXT: .p2align 4, , 162092; LA64D-NEXT: .LBB29_1: # %atomicrmw.start2093; LA64D-NEXT: # =>This Inner Loop Header: Depth=12094; LA64D-NEXT: vldi $vr1, -7842095; LA64D-NEXT: fadd.d $fa1, $fa0, $fa12096; LA64D-NEXT: fst.d $fa0, $sp, 82097; LA64D-NEXT: fst.d $fa1, $sp, 02098; LA64D-NEXT: ori $a0, $zero, 82099; LA64D-NEXT: addi.d $a2, $sp, 82100; LA64D-NEXT: addi.d $a3, $sp, 02101; LA64D-NEXT: ori $a4, $zero, 52102; LA64D-NEXT: ori $a5, $zero, 52103; LA64D-NEXT: move $a1, $fp2104; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2105; LA64D-NEXT: jirl $ra, $ra, 02106; LA64D-NEXT: fld.d $fa0, $sp, 82107; LA64D-NEXT: beqz $a0, .LBB29_12108; LA64D-NEXT: # %bb.2: # %atomicrmw.end2109; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload2110; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload2111; LA64D-NEXT: addi.d $sp, $sp, 322112; LA64D-NEXT: ret2113 %v = atomicrmw fsub ptr %p, double 1.0 seq_cst, align 42114 ret double %v2115}2116 2117define double @double_fmin_seq_cst(ptr %p) nounwind {2118; LA64F-LABEL: double_fmin_seq_cst:2119; LA64F: # %bb.0:2120; LA64F-NEXT: addi.d $sp, $sp, -482121; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill2122; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill2123; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill2124; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill2125; LA64F-NEXT: move $fp, $a02126; LA64F-NEXT: ld.d $s1, $a0, 02127; LA64F-NEXT: lu52i.d $s0, $zero, 10232128; LA64F-NEXT: .p2align 4, , 162129; LA64F-NEXT: .LBB30_1: # %atomicrmw.start2130; LA64F-NEXT: # =>This Inner Loop Header: Depth=12131; LA64F-NEXT: move $a0, $s12132; LA64F-NEXT: move $a1, $s02133; LA64F-NEXT: pcaddu18i $ra, %call36(fmin)2134; LA64F-NEXT: jirl $ra, $ra, 02135; LA64F-NEXT: st.d $s1, $sp, 82136; LA64F-NEXT: st.d $a0, $sp, 02137; LA64F-NEXT: ori $a0, $zero, 82138; LA64F-NEXT: addi.d $a2, $sp, 82139; LA64F-NEXT: addi.d $a3, $sp, 02140; LA64F-NEXT: ori $a4, $zero, 52141; LA64F-NEXT: ori $a5, $zero, 52142; LA64F-NEXT: move $a1, $fp2143; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2144; LA64F-NEXT: jirl $ra, $ra, 02145; LA64F-NEXT: ld.d $s1, $sp, 82146; LA64F-NEXT: beqz $a0, .LBB30_12147; LA64F-NEXT: # %bb.2: # %atomicrmw.end2148; LA64F-NEXT: move $a0, $s12149; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload2150; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload2151; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload2152; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload2153; LA64F-NEXT: addi.d $sp, $sp, 482154; LA64F-NEXT: ret2155;2156; LA64D-LABEL: double_fmin_seq_cst:2157; LA64D: # %bb.0:2158; LA64D-NEXT: addi.d $sp, $sp, -322159; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill2160; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill2161; LA64D-NEXT: move $fp, $a02162; LA64D-NEXT: fld.d $fa0, $a0, 02163; LA64D-NEXT: .p2align 4, , 162164; LA64D-NEXT: .LBB30_1: # %atomicrmw.start2165; LA64D-NEXT: # =>This Inner Loop Header: Depth=12166; LA64D-NEXT: vldi $vr1, -9122167; LA64D-NEXT: fmin.d $fa1, $fa0, $fa12168; LA64D-NEXT: fst.d $fa0, $sp, 82169; LA64D-NEXT: fst.d $fa1, $sp, 02170; LA64D-NEXT: ori $a0, $zero, 82171; LA64D-NEXT: addi.d $a2, $sp, 82172; LA64D-NEXT: addi.d $a3, $sp, 02173; LA64D-NEXT: ori $a4, $zero, 52174; LA64D-NEXT: ori $a5, $zero, 52175; LA64D-NEXT: move $a1, $fp2176; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2177; LA64D-NEXT: jirl $ra, $ra, 02178; LA64D-NEXT: fld.d $fa0, $sp, 82179; LA64D-NEXT: beqz $a0, .LBB30_12180; LA64D-NEXT: # %bb.2: # %atomicrmw.end2181; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload2182; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload2183; LA64D-NEXT: addi.d $sp, $sp, 322184; LA64D-NEXT: ret2185 %v = atomicrmw fmin ptr %p, double 1.0 seq_cst, align 42186 ret double %v2187}2188 2189define double @double_fmax_seq_cst(ptr %p) nounwind {2190; LA64F-LABEL: double_fmax_seq_cst:2191; LA64F: # %bb.0:2192; LA64F-NEXT: addi.d $sp, $sp, -482193; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill2194; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill2195; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill2196; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill2197; LA64F-NEXT: move $fp, $a02198; LA64F-NEXT: ld.d $s1, $a0, 02199; LA64F-NEXT: lu52i.d $s0, $zero, 10232200; LA64F-NEXT: .p2align 4, , 162201; LA64F-NEXT: .LBB31_1: # %atomicrmw.start2202; LA64F-NEXT: # =>This Inner Loop Header: Depth=12203; LA64F-NEXT: move $a0, $s12204; LA64F-NEXT: move $a1, $s02205; LA64F-NEXT: pcaddu18i $ra, %call36(fmax)2206; LA64F-NEXT: jirl $ra, $ra, 02207; LA64F-NEXT: st.d $s1, $sp, 82208; LA64F-NEXT: st.d $a0, $sp, 02209; LA64F-NEXT: ori $a0, $zero, 82210; LA64F-NEXT: addi.d $a2, $sp, 82211; LA64F-NEXT: addi.d $a3, $sp, 02212; LA64F-NEXT: ori $a4, $zero, 52213; LA64F-NEXT: ori $a5, $zero, 52214; LA64F-NEXT: move $a1, $fp2215; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2216; LA64F-NEXT: jirl $ra, $ra, 02217; LA64F-NEXT: ld.d $s1, $sp, 82218; LA64F-NEXT: beqz $a0, .LBB31_12219; LA64F-NEXT: # %bb.2: # %atomicrmw.end2220; LA64F-NEXT: move $a0, $s12221; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload2222; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload2223; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload2224; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload2225; LA64F-NEXT: addi.d $sp, $sp, 482226; LA64F-NEXT: ret2227;2228; LA64D-LABEL: double_fmax_seq_cst:2229; LA64D: # %bb.0:2230; LA64D-NEXT: addi.d $sp, $sp, -322231; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill2232; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill2233; LA64D-NEXT: move $fp, $a02234; LA64D-NEXT: fld.d $fa0, $a0, 02235; LA64D-NEXT: .p2align 4, , 162236; LA64D-NEXT: .LBB31_1: # %atomicrmw.start2237; LA64D-NEXT: # =>This Inner Loop Header: Depth=12238; LA64D-NEXT: vldi $vr1, -9122239; LA64D-NEXT: fmax.d $fa1, $fa0, $fa12240; LA64D-NEXT: fst.d $fa0, $sp, 82241; LA64D-NEXT: fst.d $fa1, $sp, 02242; LA64D-NEXT: ori $a0, $zero, 82243; LA64D-NEXT: addi.d $a2, $sp, 82244; LA64D-NEXT: addi.d $a3, $sp, 02245; LA64D-NEXT: ori $a4, $zero, 52246; LA64D-NEXT: ori $a5, $zero, 52247; LA64D-NEXT: move $a1, $fp2248; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2249; LA64D-NEXT: jirl $ra, $ra, 02250; LA64D-NEXT: fld.d $fa0, $sp, 82251; LA64D-NEXT: beqz $a0, .LBB31_12252; LA64D-NEXT: # %bb.2: # %atomicrmw.end2253; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload2254; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload2255; LA64D-NEXT: addi.d $sp, $sp, 322256; LA64D-NEXT: ret2257 %v = atomicrmw fmax ptr %p, double 1.0 seq_cst, align 42258 ret double %v2259}2260 2261define float @float_fadd_monotonic(ptr %p) nounwind {2262; LA64F-LABEL: float_fadd_monotonic:2263; LA64F: # %bb.0:2264; LA64F-NEXT: fld.s $fa0, $a0, 02265; LA64F-NEXT: lu12i.w $a1, 2600962266; LA64F-NEXT: movgr2fr.w $fa1, $a12267; LA64F-NEXT: .p2align 4, , 162268; LA64F-NEXT: .LBB32_1: # %atomicrmw.start2269; LA64F-NEXT: # =>This Loop Header: Depth=12270; LA64F-NEXT: # Child Loop BB32_3 Depth 22271; LA64F-NEXT: fadd.s $fa2, $fa0, $fa12272; LA64F-NEXT: movfr2gr.s $a1, $fa22273; LA64F-NEXT: movfr2gr.s $a2, $fa02274; LA64F-NEXT: .LBB32_3: # %atomicrmw.start2275; LA64F-NEXT: # Parent Loop BB32_1 Depth=12276; LA64F-NEXT: # => This Inner Loop Header: Depth=22277; LA64F-NEXT: ll.w $a3, $a0, 02278; LA64F-NEXT: bne $a3, $a2, .LBB32_52279; LA64F-NEXT: # %bb.4: # %atomicrmw.start2280; LA64F-NEXT: # in Loop: Header=BB32_3 Depth=22281; LA64F-NEXT: move $a4, $a12282; LA64F-NEXT: sc.w $a4, $a0, 02283; LA64F-NEXT: beq $a4, $zero, .LBB32_32284; LA64F-NEXT: b .LBB32_62285; LA64F-NEXT: .LBB32_5: # %atomicrmw.start2286; LA64F-NEXT: # in Loop: Header=BB32_1 Depth=12287; LA64F-NEXT: dbar 17922288; LA64F-NEXT: .LBB32_6: # %atomicrmw.start2289; LA64F-NEXT: # in Loop: Header=BB32_1 Depth=12290; LA64F-NEXT: movgr2fr.w $fa0, $a32291; LA64F-NEXT: bne $a3, $a2, .LBB32_12292; LA64F-NEXT: # %bb.2: # %atomicrmw.end2293; LA64F-NEXT: ret2294;2295; LA64D-LABEL: float_fadd_monotonic:2296; LA64D: # %bb.0:2297; LA64D-NEXT: fld.s $fa0, $a0, 02298; LA64D-NEXT: vldi $vr1, -11682299; LA64D-NEXT: .p2align 4, , 162300; LA64D-NEXT: .LBB32_1: # %atomicrmw.start2301; LA64D-NEXT: # =>This Loop Header: Depth=12302; LA64D-NEXT: # Child Loop BB32_3 Depth 22303; LA64D-NEXT: fadd.s $fa2, $fa0, $fa12304; LA64D-NEXT: movfr2gr.s $a1, $fa22305; LA64D-NEXT: movfr2gr.s $a2, $fa02306; LA64D-NEXT: .LBB32_3: # %atomicrmw.start2307; LA64D-NEXT: # Parent Loop BB32_1 Depth=12308; LA64D-NEXT: # => This Inner Loop Header: Depth=22309; LA64D-NEXT: ll.w $a3, $a0, 02310; LA64D-NEXT: bne $a3, $a2, .LBB32_52311; LA64D-NEXT: # %bb.4: # %atomicrmw.start2312; LA64D-NEXT: # in Loop: Header=BB32_3 Depth=22313; LA64D-NEXT: move $a4, $a12314; LA64D-NEXT: sc.w $a4, $a0, 02315; LA64D-NEXT: beq $a4, $zero, .LBB32_32316; LA64D-NEXT: b .LBB32_62317; LA64D-NEXT: .LBB32_5: # %atomicrmw.start2318; LA64D-NEXT: # in Loop: Header=BB32_1 Depth=12319; LA64D-NEXT: dbar 17922320; LA64D-NEXT: .LBB32_6: # %atomicrmw.start2321; LA64D-NEXT: # in Loop: Header=BB32_1 Depth=12322; LA64D-NEXT: movgr2fr.w $fa0, $a32323; LA64D-NEXT: bne $a3, $a2, .LBB32_12324; LA64D-NEXT: # %bb.2: # %atomicrmw.end2325; LA64D-NEXT: ret2326 %v = atomicrmw fadd ptr %p, float 1.0 monotonic, align 42327 ret float %v2328}2329 2330define float @float_fsub_monotonic(ptr %p) nounwind {2331; LA64F-LABEL: float_fsub_monotonic:2332; LA64F: # %bb.0:2333; LA64F-NEXT: fld.s $fa0, $a0, 02334; LA64F-NEXT: lu12i.w $a1, -2641922335; LA64F-NEXT: movgr2fr.w $fa1, $a12336; LA64F-NEXT: .p2align 4, , 162337; LA64F-NEXT: .LBB33_1: # %atomicrmw.start2338; LA64F-NEXT: # =>This Loop Header: Depth=12339; LA64F-NEXT: # Child Loop BB33_3 Depth 22340; LA64F-NEXT: fadd.s $fa2, $fa0, $fa12341; LA64F-NEXT: movfr2gr.s $a1, $fa22342; LA64F-NEXT: movfr2gr.s $a2, $fa02343; LA64F-NEXT: .LBB33_3: # %atomicrmw.start2344; LA64F-NEXT: # Parent Loop BB33_1 Depth=12345; LA64F-NEXT: # => This Inner Loop Header: Depth=22346; LA64F-NEXT: ll.w $a3, $a0, 02347; LA64F-NEXT: bne $a3, $a2, .LBB33_52348; LA64F-NEXT: # %bb.4: # %atomicrmw.start2349; LA64F-NEXT: # in Loop: Header=BB33_3 Depth=22350; LA64F-NEXT: move $a4, $a12351; LA64F-NEXT: sc.w $a4, $a0, 02352; LA64F-NEXT: beq $a4, $zero, .LBB33_32353; LA64F-NEXT: b .LBB33_62354; LA64F-NEXT: .LBB33_5: # %atomicrmw.start2355; LA64F-NEXT: # in Loop: Header=BB33_1 Depth=12356; LA64F-NEXT: dbar 17922357; LA64F-NEXT: .LBB33_6: # %atomicrmw.start2358; LA64F-NEXT: # in Loop: Header=BB33_1 Depth=12359; LA64F-NEXT: movgr2fr.w $fa0, $a32360; LA64F-NEXT: bne $a3, $a2, .LBB33_12361; LA64F-NEXT: # %bb.2: # %atomicrmw.end2362; LA64F-NEXT: ret2363;2364; LA64D-LABEL: float_fsub_monotonic:2365; LA64D: # %bb.0:2366; LA64D-NEXT: fld.s $fa0, $a0, 02367; LA64D-NEXT: vldi $vr1, -10402368; LA64D-NEXT: .p2align 4, , 162369; LA64D-NEXT: .LBB33_1: # %atomicrmw.start2370; LA64D-NEXT: # =>This Loop Header: Depth=12371; LA64D-NEXT: # Child Loop BB33_3 Depth 22372; LA64D-NEXT: fadd.s $fa2, $fa0, $fa12373; LA64D-NEXT: movfr2gr.s $a1, $fa22374; LA64D-NEXT: movfr2gr.s $a2, $fa02375; LA64D-NEXT: .LBB33_3: # %atomicrmw.start2376; LA64D-NEXT: # Parent Loop BB33_1 Depth=12377; LA64D-NEXT: # => This Inner Loop Header: Depth=22378; LA64D-NEXT: ll.w $a3, $a0, 02379; LA64D-NEXT: bne $a3, $a2, .LBB33_52380; LA64D-NEXT: # %bb.4: # %atomicrmw.start2381; LA64D-NEXT: # in Loop: Header=BB33_3 Depth=22382; LA64D-NEXT: move $a4, $a12383; LA64D-NEXT: sc.w $a4, $a0, 02384; LA64D-NEXT: beq $a4, $zero, .LBB33_32385; LA64D-NEXT: b .LBB33_62386; LA64D-NEXT: .LBB33_5: # %atomicrmw.start2387; LA64D-NEXT: # in Loop: Header=BB33_1 Depth=12388; LA64D-NEXT: dbar 17922389; LA64D-NEXT: .LBB33_6: # %atomicrmw.start2390; LA64D-NEXT: # in Loop: Header=BB33_1 Depth=12391; LA64D-NEXT: movgr2fr.w $fa0, $a32392; LA64D-NEXT: bne $a3, $a2, .LBB33_12393; LA64D-NEXT: # %bb.2: # %atomicrmw.end2394; LA64D-NEXT: ret2395 %v = atomicrmw fsub ptr %p, float 1.0 monotonic, align 42396 ret float %v2397}2398 2399define float @float_fmin_monotonic(ptr %p) nounwind {2400; LA64F-LABEL: float_fmin_monotonic:2401; LA64F: # %bb.0:2402; LA64F-NEXT: fld.s $fa0, $a0, 02403; LA64F-NEXT: lu12i.w $a1, 2600962404; LA64F-NEXT: movgr2fr.w $fa1, $a12405; LA64F-NEXT: .p2align 4, , 162406; LA64F-NEXT: .LBB34_1: # %atomicrmw.start2407; LA64F-NEXT: # =>This Loop Header: Depth=12408; LA64F-NEXT: # Child Loop BB34_3 Depth 22409; LA64F-NEXT: fmin.s $fa2, $fa0, $fa12410; LA64F-NEXT: movfr2gr.s $a1, $fa22411; LA64F-NEXT: movfr2gr.s $a2, $fa02412; LA64F-NEXT: .LBB34_3: # %atomicrmw.start2413; LA64F-NEXT: # Parent Loop BB34_1 Depth=12414; LA64F-NEXT: # => This Inner Loop Header: Depth=22415; LA64F-NEXT: ll.w $a3, $a0, 02416; LA64F-NEXT: bne $a3, $a2, .LBB34_52417; LA64F-NEXT: # %bb.4: # %atomicrmw.start2418; LA64F-NEXT: # in Loop: Header=BB34_3 Depth=22419; LA64F-NEXT: move $a4, $a12420; LA64F-NEXT: sc.w $a4, $a0, 02421; LA64F-NEXT: beq $a4, $zero, .LBB34_32422; LA64F-NEXT: b .LBB34_62423; LA64F-NEXT: .LBB34_5: # %atomicrmw.start2424; LA64F-NEXT: # in Loop: Header=BB34_1 Depth=12425; LA64F-NEXT: dbar 17922426; LA64F-NEXT: .LBB34_6: # %atomicrmw.start2427; LA64F-NEXT: # in Loop: Header=BB34_1 Depth=12428; LA64F-NEXT: movgr2fr.w $fa0, $a32429; LA64F-NEXT: bne $a3, $a2, .LBB34_12430; LA64F-NEXT: # %bb.2: # %atomicrmw.end2431; LA64F-NEXT: ret2432;2433; LA64D-LABEL: float_fmin_monotonic:2434; LA64D: # %bb.0:2435; LA64D-NEXT: fld.s $fa0, $a0, 02436; LA64D-NEXT: vldi $vr1, -11682437; LA64D-NEXT: .p2align 4, , 162438; LA64D-NEXT: .LBB34_1: # %atomicrmw.start2439; LA64D-NEXT: # =>This Loop Header: Depth=12440; LA64D-NEXT: # Child Loop BB34_3 Depth 22441; LA64D-NEXT: fmin.s $fa2, $fa0, $fa12442; LA64D-NEXT: movfr2gr.s $a1, $fa22443; LA64D-NEXT: movfr2gr.s $a2, $fa02444; LA64D-NEXT: .LBB34_3: # %atomicrmw.start2445; LA64D-NEXT: # Parent Loop BB34_1 Depth=12446; LA64D-NEXT: # => This Inner Loop Header: Depth=22447; LA64D-NEXT: ll.w $a3, $a0, 02448; LA64D-NEXT: bne $a3, $a2, .LBB34_52449; LA64D-NEXT: # %bb.4: # %atomicrmw.start2450; LA64D-NEXT: # in Loop: Header=BB34_3 Depth=22451; LA64D-NEXT: move $a4, $a12452; LA64D-NEXT: sc.w $a4, $a0, 02453; LA64D-NEXT: beq $a4, $zero, .LBB34_32454; LA64D-NEXT: b .LBB34_62455; LA64D-NEXT: .LBB34_5: # %atomicrmw.start2456; LA64D-NEXT: # in Loop: Header=BB34_1 Depth=12457; LA64D-NEXT: dbar 17922458; LA64D-NEXT: .LBB34_6: # %atomicrmw.start2459; LA64D-NEXT: # in Loop: Header=BB34_1 Depth=12460; LA64D-NEXT: movgr2fr.w $fa0, $a32461; LA64D-NEXT: bne $a3, $a2, .LBB34_12462; LA64D-NEXT: # %bb.2: # %atomicrmw.end2463; LA64D-NEXT: ret2464 %v = atomicrmw fmin ptr %p, float 1.0 monotonic, align 42465 ret float %v2466}2467 2468define float @float_fmax_monotonic(ptr %p) nounwind {2469; LA64F-LABEL: float_fmax_monotonic:2470; LA64F: # %bb.0:2471; LA64F-NEXT: fld.s $fa0, $a0, 02472; LA64F-NEXT: lu12i.w $a1, 2600962473; LA64F-NEXT: movgr2fr.w $fa1, $a12474; LA64F-NEXT: .p2align 4, , 162475; LA64F-NEXT: .LBB35_1: # %atomicrmw.start2476; LA64F-NEXT: # =>This Loop Header: Depth=12477; LA64F-NEXT: # Child Loop BB35_3 Depth 22478; LA64F-NEXT: fmax.s $fa2, $fa0, $fa12479; LA64F-NEXT: movfr2gr.s $a1, $fa22480; LA64F-NEXT: movfr2gr.s $a2, $fa02481; LA64F-NEXT: .LBB35_3: # %atomicrmw.start2482; LA64F-NEXT: # Parent Loop BB35_1 Depth=12483; LA64F-NEXT: # => This Inner Loop Header: Depth=22484; LA64F-NEXT: ll.w $a3, $a0, 02485; LA64F-NEXT: bne $a3, $a2, .LBB35_52486; LA64F-NEXT: # %bb.4: # %atomicrmw.start2487; LA64F-NEXT: # in Loop: Header=BB35_3 Depth=22488; LA64F-NEXT: move $a4, $a12489; LA64F-NEXT: sc.w $a4, $a0, 02490; LA64F-NEXT: beq $a4, $zero, .LBB35_32491; LA64F-NEXT: b .LBB35_62492; LA64F-NEXT: .LBB35_5: # %atomicrmw.start2493; LA64F-NEXT: # in Loop: Header=BB35_1 Depth=12494; LA64F-NEXT: dbar 17922495; LA64F-NEXT: .LBB35_6: # %atomicrmw.start2496; LA64F-NEXT: # in Loop: Header=BB35_1 Depth=12497; LA64F-NEXT: movgr2fr.w $fa0, $a32498; LA64F-NEXT: bne $a3, $a2, .LBB35_12499; LA64F-NEXT: # %bb.2: # %atomicrmw.end2500; LA64F-NEXT: ret2501;2502; LA64D-LABEL: float_fmax_monotonic:2503; LA64D: # %bb.0:2504; LA64D-NEXT: fld.s $fa0, $a0, 02505; LA64D-NEXT: vldi $vr1, -11682506; LA64D-NEXT: .p2align 4, , 162507; LA64D-NEXT: .LBB35_1: # %atomicrmw.start2508; LA64D-NEXT: # =>This Loop Header: Depth=12509; LA64D-NEXT: # Child Loop BB35_3 Depth 22510; LA64D-NEXT: fmax.s $fa2, $fa0, $fa12511; LA64D-NEXT: movfr2gr.s $a1, $fa22512; LA64D-NEXT: movfr2gr.s $a2, $fa02513; LA64D-NEXT: .LBB35_3: # %atomicrmw.start2514; LA64D-NEXT: # Parent Loop BB35_1 Depth=12515; LA64D-NEXT: # => This Inner Loop Header: Depth=22516; LA64D-NEXT: ll.w $a3, $a0, 02517; LA64D-NEXT: bne $a3, $a2, .LBB35_52518; LA64D-NEXT: # %bb.4: # %atomicrmw.start2519; LA64D-NEXT: # in Loop: Header=BB35_3 Depth=22520; LA64D-NEXT: move $a4, $a12521; LA64D-NEXT: sc.w $a4, $a0, 02522; LA64D-NEXT: beq $a4, $zero, .LBB35_32523; LA64D-NEXT: b .LBB35_62524; LA64D-NEXT: .LBB35_5: # %atomicrmw.start2525; LA64D-NEXT: # in Loop: Header=BB35_1 Depth=12526; LA64D-NEXT: dbar 17922527; LA64D-NEXT: .LBB35_6: # %atomicrmw.start2528; LA64D-NEXT: # in Loop: Header=BB35_1 Depth=12529; LA64D-NEXT: movgr2fr.w $fa0, $a32530; LA64D-NEXT: bne $a3, $a2, .LBB35_12531; LA64D-NEXT: # %bb.2: # %atomicrmw.end2532; LA64D-NEXT: ret2533 %v = atomicrmw fmax ptr %p, float 1.0 monotonic, align 42534 ret float %v2535}2536 2537define double @double_fadd_monotonic(ptr %p) nounwind {2538; LA64F-LABEL: double_fadd_monotonic:2539; LA64F: # %bb.0:2540; LA64F-NEXT: addi.d $sp, $sp, -482541; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill2542; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill2543; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill2544; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill2545; LA64F-NEXT: move $fp, $a02546; LA64F-NEXT: ld.d $s1, $a0, 02547; LA64F-NEXT: lu52i.d $s0, $zero, 10232548; LA64F-NEXT: .p2align 4, , 162549; LA64F-NEXT: .LBB36_1: # %atomicrmw.start2550; LA64F-NEXT: # =>This Inner Loop Header: Depth=12551; LA64F-NEXT: move $a0, $s12552; LA64F-NEXT: move $a1, $s02553; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)2554; LA64F-NEXT: jirl $ra, $ra, 02555; LA64F-NEXT: st.d $s1, $sp, 82556; LA64F-NEXT: st.d $a0, $sp, 02557; LA64F-NEXT: ori $a0, $zero, 82558; LA64F-NEXT: addi.d $a2, $sp, 82559; LA64F-NEXT: addi.d $a3, $sp, 02560; LA64F-NEXT: move $a1, $fp2561; LA64F-NEXT: move $a4, $zero2562; LA64F-NEXT: move $a5, $zero2563; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2564; LA64F-NEXT: jirl $ra, $ra, 02565; LA64F-NEXT: ld.d $s1, $sp, 82566; LA64F-NEXT: beqz $a0, .LBB36_12567; LA64F-NEXT: # %bb.2: # %atomicrmw.end2568; LA64F-NEXT: move $a0, $s12569; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload2570; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload2571; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload2572; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload2573; LA64F-NEXT: addi.d $sp, $sp, 482574; LA64F-NEXT: ret2575;2576; LA64D-LABEL: double_fadd_monotonic:2577; LA64D: # %bb.0:2578; LA64D-NEXT: addi.d $sp, $sp, -322579; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill2580; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill2581; LA64D-NEXT: move $fp, $a02582; LA64D-NEXT: fld.d $fa0, $a0, 02583; LA64D-NEXT: .p2align 4, , 162584; LA64D-NEXT: .LBB36_1: # %atomicrmw.start2585; LA64D-NEXT: # =>This Inner Loop Header: Depth=12586; LA64D-NEXT: vldi $vr1, -9122587; LA64D-NEXT: fadd.d $fa1, $fa0, $fa12588; LA64D-NEXT: fst.d $fa0, $sp, 82589; LA64D-NEXT: fst.d $fa1, $sp, 02590; LA64D-NEXT: ori $a0, $zero, 82591; LA64D-NEXT: addi.d $a2, $sp, 82592; LA64D-NEXT: addi.d $a3, $sp, 02593; LA64D-NEXT: move $a1, $fp2594; LA64D-NEXT: move $a4, $zero2595; LA64D-NEXT: move $a5, $zero2596; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2597; LA64D-NEXT: jirl $ra, $ra, 02598; LA64D-NEXT: fld.d $fa0, $sp, 82599; LA64D-NEXT: beqz $a0, .LBB36_12600; LA64D-NEXT: # %bb.2: # %atomicrmw.end2601; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload2602; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload2603; LA64D-NEXT: addi.d $sp, $sp, 322604; LA64D-NEXT: ret2605 %v = atomicrmw fadd ptr %p, double 1.0 monotonic, align 42606 ret double %v2607}2608 2609define double @double_fsub_monotonic(ptr %p) nounwind {2610; LA64F-LABEL: double_fsub_monotonic:2611; LA64F: # %bb.0:2612; LA64F-NEXT: addi.d $sp, $sp, -482613; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill2614; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill2615; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill2616; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill2617; LA64F-NEXT: move $fp, $a02618; LA64F-NEXT: ld.d $s1, $a0, 02619; LA64F-NEXT: lu52i.d $s0, $zero, -10252620; LA64F-NEXT: .p2align 4, , 162621; LA64F-NEXT: .LBB37_1: # %atomicrmw.start2622; LA64F-NEXT: # =>This Inner Loop Header: Depth=12623; LA64F-NEXT: move $a0, $s12624; LA64F-NEXT: move $a1, $s02625; LA64F-NEXT: pcaddu18i $ra, %call36(__adddf3)2626; LA64F-NEXT: jirl $ra, $ra, 02627; LA64F-NEXT: st.d $s1, $sp, 82628; LA64F-NEXT: st.d $a0, $sp, 02629; LA64F-NEXT: ori $a0, $zero, 82630; LA64F-NEXT: addi.d $a2, $sp, 82631; LA64F-NEXT: addi.d $a3, $sp, 02632; LA64F-NEXT: move $a1, $fp2633; LA64F-NEXT: move $a4, $zero2634; LA64F-NEXT: move $a5, $zero2635; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2636; LA64F-NEXT: jirl $ra, $ra, 02637; LA64F-NEXT: ld.d $s1, $sp, 82638; LA64F-NEXT: beqz $a0, .LBB37_12639; LA64F-NEXT: # %bb.2: # %atomicrmw.end2640; LA64F-NEXT: move $a0, $s12641; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload2642; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload2643; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload2644; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload2645; LA64F-NEXT: addi.d $sp, $sp, 482646; LA64F-NEXT: ret2647;2648; LA64D-LABEL: double_fsub_monotonic:2649; LA64D: # %bb.0:2650; LA64D-NEXT: addi.d $sp, $sp, -322651; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill2652; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill2653; LA64D-NEXT: move $fp, $a02654; LA64D-NEXT: fld.d $fa0, $a0, 02655; LA64D-NEXT: .p2align 4, , 162656; LA64D-NEXT: .LBB37_1: # %atomicrmw.start2657; LA64D-NEXT: # =>This Inner Loop Header: Depth=12658; LA64D-NEXT: vldi $vr1, -7842659; LA64D-NEXT: fadd.d $fa1, $fa0, $fa12660; LA64D-NEXT: fst.d $fa0, $sp, 82661; LA64D-NEXT: fst.d $fa1, $sp, 02662; LA64D-NEXT: ori $a0, $zero, 82663; LA64D-NEXT: addi.d $a2, $sp, 82664; LA64D-NEXT: addi.d $a3, $sp, 02665; LA64D-NEXT: move $a1, $fp2666; LA64D-NEXT: move $a4, $zero2667; LA64D-NEXT: move $a5, $zero2668; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2669; LA64D-NEXT: jirl $ra, $ra, 02670; LA64D-NEXT: fld.d $fa0, $sp, 82671; LA64D-NEXT: beqz $a0, .LBB37_12672; LA64D-NEXT: # %bb.2: # %atomicrmw.end2673; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload2674; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload2675; LA64D-NEXT: addi.d $sp, $sp, 322676; LA64D-NEXT: ret2677 %v = atomicrmw fsub ptr %p, double 1.0 monotonic, align 42678 ret double %v2679}2680 2681define double @double_fmin_monotonic(ptr %p) nounwind {2682; LA64F-LABEL: double_fmin_monotonic:2683; LA64F: # %bb.0:2684; LA64F-NEXT: addi.d $sp, $sp, -482685; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill2686; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill2687; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill2688; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill2689; LA64F-NEXT: move $fp, $a02690; LA64F-NEXT: ld.d $s1, $a0, 02691; LA64F-NEXT: lu52i.d $s0, $zero, 10232692; LA64F-NEXT: .p2align 4, , 162693; LA64F-NEXT: .LBB38_1: # %atomicrmw.start2694; LA64F-NEXT: # =>This Inner Loop Header: Depth=12695; LA64F-NEXT: move $a0, $s12696; LA64F-NEXT: move $a1, $s02697; LA64F-NEXT: pcaddu18i $ra, %call36(fmin)2698; LA64F-NEXT: jirl $ra, $ra, 02699; LA64F-NEXT: st.d $s1, $sp, 82700; LA64F-NEXT: st.d $a0, $sp, 02701; LA64F-NEXT: ori $a0, $zero, 82702; LA64F-NEXT: addi.d $a2, $sp, 82703; LA64F-NEXT: addi.d $a3, $sp, 02704; LA64F-NEXT: move $a1, $fp2705; LA64F-NEXT: move $a4, $zero2706; LA64F-NEXT: move $a5, $zero2707; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2708; LA64F-NEXT: jirl $ra, $ra, 02709; LA64F-NEXT: ld.d $s1, $sp, 82710; LA64F-NEXT: beqz $a0, .LBB38_12711; LA64F-NEXT: # %bb.2: # %atomicrmw.end2712; LA64F-NEXT: move $a0, $s12713; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload2714; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload2715; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload2716; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload2717; LA64F-NEXT: addi.d $sp, $sp, 482718; LA64F-NEXT: ret2719;2720; LA64D-LABEL: double_fmin_monotonic:2721; LA64D: # %bb.0:2722; LA64D-NEXT: addi.d $sp, $sp, -322723; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill2724; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill2725; LA64D-NEXT: move $fp, $a02726; LA64D-NEXT: fld.d $fa0, $a0, 02727; LA64D-NEXT: .p2align 4, , 162728; LA64D-NEXT: .LBB38_1: # %atomicrmw.start2729; LA64D-NEXT: # =>This Inner Loop Header: Depth=12730; LA64D-NEXT: vldi $vr1, -9122731; LA64D-NEXT: fmin.d $fa1, $fa0, $fa12732; LA64D-NEXT: fst.d $fa0, $sp, 82733; LA64D-NEXT: fst.d $fa1, $sp, 02734; LA64D-NEXT: ori $a0, $zero, 82735; LA64D-NEXT: addi.d $a2, $sp, 82736; LA64D-NEXT: addi.d $a3, $sp, 02737; LA64D-NEXT: move $a1, $fp2738; LA64D-NEXT: move $a4, $zero2739; LA64D-NEXT: move $a5, $zero2740; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2741; LA64D-NEXT: jirl $ra, $ra, 02742; LA64D-NEXT: fld.d $fa0, $sp, 82743; LA64D-NEXT: beqz $a0, .LBB38_12744; LA64D-NEXT: # %bb.2: # %atomicrmw.end2745; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload2746; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload2747; LA64D-NEXT: addi.d $sp, $sp, 322748; LA64D-NEXT: ret2749 %v = atomicrmw fmin ptr %p, double 1.0 monotonic, align 42750 ret double %v2751}2752 2753define double @double_fmax_monotonic(ptr %p) nounwind {2754; LA64F-LABEL: double_fmax_monotonic:2755; LA64F: # %bb.0:2756; LA64F-NEXT: addi.d $sp, $sp, -482757; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill2758; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill2759; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill2760; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill2761; LA64F-NEXT: move $fp, $a02762; LA64F-NEXT: ld.d $s1, $a0, 02763; LA64F-NEXT: lu52i.d $s0, $zero, 10232764; LA64F-NEXT: .p2align 4, , 162765; LA64F-NEXT: .LBB39_1: # %atomicrmw.start2766; LA64F-NEXT: # =>This Inner Loop Header: Depth=12767; LA64F-NEXT: move $a0, $s12768; LA64F-NEXT: move $a1, $s02769; LA64F-NEXT: pcaddu18i $ra, %call36(fmax)2770; LA64F-NEXT: jirl $ra, $ra, 02771; LA64F-NEXT: st.d $s1, $sp, 82772; LA64F-NEXT: st.d $a0, $sp, 02773; LA64F-NEXT: ori $a0, $zero, 82774; LA64F-NEXT: addi.d $a2, $sp, 82775; LA64F-NEXT: addi.d $a3, $sp, 02776; LA64F-NEXT: move $a1, $fp2777; LA64F-NEXT: move $a4, $zero2778; LA64F-NEXT: move $a5, $zero2779; LA64F-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2780; LA64F-NEXT: jirl $ra, $ra, 02781; LA64F-NEXT: ld.d $s1, $sp, 82782; LA64F-NEXT: beqz $a0, .LBB39_12783; LA64F-NEXT: # %bb.2: # %atomicrmw.end2784; LA64F-NEXT: move $a0, $s12785; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload2786; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload2787; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload2788; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload2789; LA64F-NEXT: addi.d $sp, $sp, 482790; LA64F-NEXT: ret2791;2792; LA64D-LABEL: double_fmax_monotonic:2793; LA64D: # %bb.0:2794; LA64D-NEXT: addi.d $sp, $sp, -322795; LA64D-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill2796; LA64D-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill2797; LA64D-NEXT: move $fp, $a02798; LA64D-NEXT: fld.d $fa0, $a0, 02799; LA64D-NEXT: .p2align 4, , 162800; LA64D-NEXT: .LBB39_1: # %atomicrmw.start2801; LA64D-NEXT: # =>This Inner Loop Header: Depth=12802; LA64D-NEXT: vldi $vr1, -9122803; LA64D-NEXT: fmax.d $fa1, $fa0, $fa12804; LA64D-NEXT: fst.d $fa0, $sp, 82805; LA64D-NEXT: fst.d $fa1, $sp, 02806; LA64D-NEXT: ori $a0, $zero, 82807; LA64D-NEXT: addi.d $a2, $sp, 82808; LA64D-NEXT: addi.d $a3, $sp, 02809; LA64D-NEXT: move $a1, $fp2810; LA64D-NEXT: move $a4, $zero2811; LA64D-NEXT: move $a5, $zero2812; LA64D-NEXT: pcaddu18i $ra, %call36(__atomic_compare_exchange)2813; LA64D-NEXT: jirl $ra, $ra, 02814; LA64D-NEXT: fld.d $fa0, $sp, 82815; LA64D-NEXT: beqz $a0, .LBB39_12816; LA64D-NEXT: # %bb.2: # %atomicrmw.end2817; LA64D-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload2818; LA64D-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload2819; LA64D-NEXT: addi.d $sp, $sp, 322820; LA64D-NEXT: ret2821 %v = atomicrmw fmax ptr %p, double 1.0 monotonic, align 42822 ret double %v2823}2824