4256 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d --verify-machineinstrs < %s | \3; RUN: FileCheck %s --check-prefix=LA324; RUN: llc --mtriple=loongarch64 -mattr=+d --verify-machineinstrs < %s | \5; RUN: FileCheck %s --check-prefix=LA646 7define i8 @atomicrmw_umax_i8_acquire(ptr %a, i8 %b) nounwind {8; LA32-LABEL: atomicrmw_umax_i8_acquire:9; LA32: # %bb.0:10; LA32-NEXT: addi.w $a2, $zero, -411; LA32-NEXT: and $a2, $a0, $a212; LA32-NEXT: slli.w $a0, $a0, 313; LA32-NEXT: ori $a3, $zero, 25514; LA32-NEXT: sll.w $a3, $a3, $a015; LA32-NEXT: andi $a1, $a1, 25516; LA32-NEXT: sll.w $a1, $a1, $a017; LA32-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=118; LA32-NEXT: ll.w $a4, $a2, 019; LA32-NEXT: and $a6, $a4, $a320; LA32-NEXT: move $a5, $a421; LA32-NEXT: bgeu $a6, $a1, .LBB0_322; LA32-NEXT: # %bb.2: # in Loop: Header=BB0_1 Depth=123; LA32-NEXT: xor $a5, $a4, $a124; LA32-NEXT: and $a5, $a5, $a325; LA32-NEXT: xor $a5, $a4, $a526; LA32-NEXT: .LBB0_3: # in Loop: Header=BB0_1 Depth=127; LA32-NEXT: sc.w $a5, $a2, 028; LA32-NEXT: beq $a5, $zero, .LBB0_129; LA32-NEXT: # %bb.4:30; LA32-NEXT: srl.w $a0, $a4, $a031; LA32-NEXT: ret32;33; LA64-LABEL: atomicrmw_umax_i8_acquire:34; LA64: # %bb.0:35; LA64-NEXT: slli.d $a2, $a0, 336; LA64-NEXT: bstrins.d $a0, $zero, 1, 037; LA64-NEXT: ori $a3, $zero, 25538; LA64-NEXT: sll.w $a3, $a3, $a239; LA64-NEXT: andi $a1, $a1, 25540; LA64-NEXT: sll.w $a1, $a1, $a241; LA64-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=142; LA64-NEXT: ll.w $a4, $a0, 043; LA64-NEXT: and $a6, $a4, $a344; LA64-NEXT: move $a5, $a445; LA64-NEXT: bgeu $a6, $a1, .LBB0_346; LA64-NEXT: # %bb.2: # in Loop: Header=BB0_1 Depth=147; LA64-NEXT: xor $a5, $a4, $a148; LA64-NEXT: and $a5, $a5, $a349; LA64-NEXT: xor $a5, $a4, $a550; LA64-NEXT: .LBB0_3: # in Loop: Header=BB0_1 Depth=151; LA64-NEXT: sc.w $a5, $a0, 052; LA64-NEXT: beq $a5, $zero, .LBB0_153; LA64-NEXT: # %bb.4:54; LA64-NEXT: srl.w $a0, $a4, $a255; LA64-NEXT: ret56 %1 = atomicrmw umax ptr %a, i8 %b acquire57 ret i8 %158}59 60define i16 @atomicrmw_umax_i16_acquire(ptr %a, i16 %b) nounwind {61; LA32-LABEL: atomicrmw_umax_i16_acquire:62; LA32: # %bb.0:63; LA32-NEXT: addi.w $a2, $zero, -464; LA32-NEXT: and $a2, $a0, $a265; LA32-NEXT: slli.w $a0, $a0, 366; LA32-NEXT: lu12i.w $a3, 1567; LA32-NEXT: ori $a3, $a3, 409568; LA32-NEXT: sll.w $a4, $a3, $a069; LA32-NEXT: and $a1, $a1, $a370; LA32-NEXT: sll.w $a1, $a1, $a071; LA32-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=172; LA32-NEXT: ll.w $a3, $a2, 073; LA32-NEXT: and $a6, $a3, $a474; LA32-NEXT: move $a5, $a375; LA32-NEXT: bgeu $a6, $a1, .LBB1_376; LA32-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=177; LA32-NEXT: xor $a5, $a3, $a178; LA32-NEXT: and $a5, $a5, $a479; LA32-NEXT: xor $a5, $a3, $a580; LA32-NEXT: .LBB1_3: # in Loop: Header=BB1_1 Depth=181; LA32-NEXT: sc.w $a5, $a2, 082; LA32-NEXT: beq $a5, $zero, .LBB1_183; LA32-NEXT: # %bb.4:84; LA32-NEXT: srl.w $a0, $a3, $a085; LA32-NEXT: ret86;87; LA64-LABEL: atomicrmw_umax_i16_acquire:88; LA64: # %bb.0:89; LA64-NEXT: slli.d $a2, $a0, 390; LA64-NEXT: bstrins.d $a0, $zero, 1, 091; LA64-NEXT: lu12i.w $a3, 1592; LA64-NEXT: ori $a3, $a3, 409593; LA64-NEXT: sll.w $a3, $a3, $a294; LA64-NEXT: bstrpick.d $a1, $a1, 15, 095; LA64-NEXT: sll.w $a1, $a1, $a296; LA64-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=197; LA64-NEXT: ll.w $a4, $a0, 098; LA64-NEXT: and $a6, $a4, $a399; LA64-NEXT: move $a5, $a4100; LA64-NEXT: bgeu $a6, $a1, .LBB1_3101; LA64-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1102; LA64-NEXT: xor $a5, $a4, $a1103; LA64-NEXT: and $a5, $a5, $a3104; LA64-NEXT: xor $a5, $a4, $a5105; LA64-NEXT: .LBB1_3: # in Loop: Header=BB1_1 Depth=1106; LA64-NEXT: sc.w $a5, $a0, 0107; LA64-NEXT: beq $a5, $zero, .LBB1_1108; LA64-NEXT: # %bb.4:109; LA64-NEXT: srl.w $a0, $a4, $a2110; LA64-NEXT: ret111 %1 = atomicrmw umax ptr %a, i16 %b acquire112 ret i16 %1113}114 115define i32 @atomicrmw_umax_i32_acquire(ptr %a, i32 %b) nounwind {116; LA32-LABEL: atomicrmw_umax_i32_acquire:117; LA32: # %bb.0:118; LA32-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1119; LA32-NEXT: ll.w $a2, $a0, 0120; LA32-NEXT: move $a3, $a2121; LA32-NEXT: bgeu $a2, $a1, .LBB2_3122; LA32-NEXT: # %bb.2: # in Loop: Header=BB2_1 Depth=1123; LA32-NEXT: move $a3, $a1124; LA32-NEXT: .LBB2_3: # in Loop: Header=BB2_1 Depth=1125; LA32-NEXT: sc.w $a3, $a0, 0126; LA32-NEXT: beq $a3, $zero, .LBB2_1127; LA32-NEXT: # %bb.4:128; LA32-NEXT: move $a0, $a2129; LA32-NEXT: ret130;131; LA64-LABEL: atomicrmw_umax_i32_acquire:132; LA64: # %bb.0:133; LA64-NEXT: ammax_db.wu $a2, $a1, $a0134; LA64-NEXT: move $a0, $a2135; LA64-NEXT: ret136 %1 = atomicrmw umax ptr %a, i32 %b acquire137 ret i32 %1138}139 140define i64 @atomicrmw_umax_i64_acquire(ptr %a, i64 %b) nounwind {141; LA32-LABEL: atomicrmw_umax_i64_acquire:142; LA32: # %bb.0:143; LA32-NEXT: addi.w $sp, $sp, -32144; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill145; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill146; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill147; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill148; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill149; LA32-NEXT: move $fp, $a0150; LA32-NEXT: ld.w $a5, $a0, 4151; LA32-NEXT: ld.w $a4, $a0, 0152; LA32-NEXT: move $s0, $a2153; LA32-NEXT: move $s1, $a1154; LA32-NEXT: addi.w $s2, $sp, 0155; LA32-NEXT: b .LBB3_2156; LA32-NEXT: .p2align 4, , 16157; LA32-NEXT: .LBB3_1: # %atomicrmw.start158; LA32-NEXT: # in Loop: Header=BB3_2 Depth=1159; LA32-NEXT: st.w $a4, $sp, 0160; LA32-NEXT: st.w $a5, $sp, 4161; LA32-NEXT: ori $a4, $zero, 2162; LA32-NEXT: ori $a5, $zero, 2163; LA32-NEXT: move $a0, $fp164; LA32-NEXT: move $a1, $s2165; LA32-NEXT: bl __atomic_compare_exchange_8166; LA32-NEXT: ld.w $a5, $sp, 4167; LA32-NEXT: ld.w $a4, $sp, 0168; LA32-NEXT: bne $a0, $zero, .LBB3_7169; LA32-NEXT: .LBB3_2: # %atomicrmw.start170; LA32-NEXT: # =>This Inner Loop Header: Depth=1171; LA32-NEXT: beq $a5, $s0, .LBB3_4172; LA32-NEXT: # %bb.3: # %atomicrmw.start173; LA32-NEXT: # in Loop: Header=BB3_2 Depth=1174; LA32-NEXT: sltu $a0, $s0, $a5175; LA32-NEXT: b .LBB3_5176; LA32-NEXT: .p2align 4, , 16177; LA32-NEXT: .LBB3_4: # in Loop: Header=BB3_2 Depth=1178; LA32-NEXT: sltu $a0, $s1, $a4179; LA32-NEXT: .LBB3_5: # %atomicrmw.start180; LA32-NEXT: # in Loop: Header=BB3_2 Depth=1181; LA32-NEXT: move $a2, $a4182; LA32-NEXT: move $a3, $a5183; LA32-NEXT: bne $a0, $zero, .LBB3_1184; LA32-NEXT: # %bb.6: # %atomicrmw.start185; LA32-NEXT: # in Loop: Header=BB3_2 Depth=1186; LA32-NEXT: move $a2, $s1187; LA32-NEXT: move $a3, $s0188; LA32-NEXT: b .LBB3_1189; LA32-NEXT: .LBB3_7: # %atomicrmw.end190; LA32-NEXT: move $a0, $a4191; LA32-NEXT: move $a1, $a5192; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload193; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload194; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload195; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload196; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload197; LA32-NEXT: addi.w $sp, $sp, 32198; LA32-NEXT: ret199;200; LA64-LABEL: atomicrmw_umax_i64_acquire:201; LA64: # %bb.0:202; LA64-NEXT: ammax_db.du $a2, $a1, $a0203; LA64-NEXT: move $a0, $a2204; LA64-NEXT: ret205 %1 = atomicrmw umax ptr %a, i64 %b acquire206 ret i64 %1207}208 209define i8 @atomicrmw_umin_i8_acquire(ptr %a, i8 %b) nounwind {210; LA32-LABEL: atomicrmw_umin_i8_acquire:211; LA32: # %bb.0:212; LA32-NEXT: addi.w $a2, $zero, -4213; LA32-NEXT: and $a2, $a0, $a2214; LA32-NEXT: slli.w $a0, $a0, 3215; LA32-NEXT: ori $a3, $zero, 255216; LA32-NEXT: sll.w $a3, $a3, $a0217; LA32-NEXT: andi $a1, $a1, 255218; LA32-NEXT: sll.w $a1, $a1, $a0219; LA32-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1220; LA32-NEXT: ll.w $a4, $a2, 0221; LA32-NEXT: and $a6, $a4, $a3222; LA32-NEXT: move $a5, $a4223; LA32-NEXT: bgeu $a1, $a6, .LBB4_3224; LA32-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1225; LA32-NEXT: xor $a5, $a4, $a1226; LA32-NEXT: and $a5, $a5, $a3227; LA32-NEXT: xor $a5, $a4, $a5228; LA32-NEXT: .LBB4_3: # in Loop: Header=BB4_1 Depth=1229; LA32-NEXT: sc.w $a5, $a2, 0230; LA32-NEXT: beq $a5, $zero, .LBB4_1231; LA32-NEXT: # %bb.4:232; LA32-NEXT: srl.w $a0, $a4, $a0233; LA32-NEXT: ret234;235; LA64-LABEL: atomicrmw_umin_i8_acquire:236; LA64: # %bb.0:237; LA64-NEXT: slli.d $a2, $a0, 3238; LA64-NEXT: bstrins.d $a0, $zero, 1, 0239; LA64-NEXT: ori $a3, $zero, 255240; LA64-NEXT: sll.w $a3, $a3, $a2241; LA64-NEXT: andi $a1, $a1, 255242; LA64-NEXT: sll.w $a1, $a1, $a2243; LA64-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1244; LA64-NEXT: ll.w $a4, $a0, 0245; LA64-NEXT: and $a6, $a4, $a3246; LA64-NEXT: move $a5, $a4247; LA64-NEXT: bgeu $a1, $a6, .LBB4_3248; LA64-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1249; LA64-NEXT: xor $a5, $a4, $a1250; LA64-NEXT: and $a5, $a5, $a3251; LA64-NEXT: xor $a5, $a4, $a5252; LA64-NEXT: .LBB4_3: # in Loop: Header=BB4_1 Depth=1253; LA64-NEXT: sc.w $a5, $a0, 0254; LA64-NEXT: beq $a5, $zero, .LBB4_1255; LA64-NEXT: # %bb.4:256; LA64-NEXT: srl.w $a0, $a4, $a2257; LA64-NEXT: ret258 %1 = atomicrmw umin ptr %a, i8 %b acquire259 ret i8 %1260}261 262define i16 @atomicrmw_umin_i16_acquire(ptr %a, i16 %b) nounwind {263; LA32-LABEL: atomicrmw_umin_i16_acquire:264; LA32: # %bb.0:265; LA32-NEXT: addi.w $a2, $zero, -4266; LA32-NEXT: and $a2, $a0, $a2267; LA32-NEXT: slli.w $a0, $a0, 3268; LA32-NEXT: lu12i.w $a3, 15269; LA32-NEXT: ori $a3, $a3, 4095270; LA32-NEXT: sll.w $a4, $a3, $a0271; LA32-NEXT: and $a1, $a1, $a3272; LA32-NEXT: sll.w $a1, $a1, $a0273; LA32-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=1274; LA32-NEXT: ll.w $a3, $a2, 0275; LA32-NEXT: and $a6, $a3, $a4276; LA32-NEXT: move $a5, $a3277; LA32-NEXT: bgeu $a1, $a6, .LBB5_3278; LA32-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=1279; LA32-NEXT: xor $a5, $a3, $a1280; LA32-NEXT: and $a5, $a5, $a4281; LA32-NEXT: xor $a5, $a3, $a5282; LA32-NEXT: .LBB5_3: # in Loop: Header=BB5_1 Depth=1283; LA32-NEXT: sc.w $a5, $a2, 0284; LA32-NEXT: beq $a5, $zero, .LBB5_1285; LA32-NEXT: # %bb.4:286; LA32-NEXT: srl.w $a0, $a3, $a0287; LA32-NEXT: ret288;289; LA64-LABEL: atomicrmw_umin_i16_acquire:290; LA64: # %bb.0:291; LA64-NEXT: slli.d $a2, $a0, 3292; LA64-NEXT: bstrins.d $a0, $zero, 1, 0293; LA64-NEXT: lu12i.w $a3, 15294; LA64-NEXT: ori $a3, $a3, 4095295; LA64-NEXT: sll.w $a3, $a3, $a2296; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0297; LA64-NEXT: sll.w $a1, $a1, $a2298; LA64-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=1299; LA64-NEXT: ll.w $a4, $a0, 0300; LA64-NEXT: and $a6, $a4, $a3301; LA64-NEXT: move $a5, $a4302; LA64-NEXT: bgeu $a1, $a6, .LBB5_3303; LA64-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=1304; LA64-NEXT: xor $a5, $a4, $a1305; LA64-NEXT: and $a5, $a5, $a3306; LA64-NEXT: xor $a5, $a4, $a5307; LA64-NEXT: .LBB5_3: # in Loop: Header=BB5_1 Depth=1308; LA64-NEXT: sc.w $a5, $a0, 0309; LA64-NEXT: beq $a5, $zero, .LBB5_1310; LA64-NEXT: # %bb.4:311; LA64-NEXT: srl.w $a0, $a4, $a2312; LA64-NEXT: ret313 %1 = atomicrmw umin ptr %a, i16 %b acquire314 ret i16 %1315}316 317define i32 @atomicrmw_umin_i32_acquire(ptr %a, i32 %b) nounwind {318; LA32-LABEL: atomicrmw_umin_i32_acquire:319; LA32: # %bb.0:320; LA32-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=1321; LA32-NEXT: ll.w $a2, $a0, 0322; LA32-NEXT: move $a3, $a2323; LA32-NEXT: bgeu $a1, $a2, .LBB6_3324; LA32-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=1325; LA32-NEXT: move $a3, $a1326; LA32-NEXT: .LBB6_3: # in Loop: Header=BB6_1 Depth=1327; LA32-NEXT: sc.w $a3, $a0, 0328; LA32-NEXT: beq $a3, $zero, .LBB6_1329; LA32-NEXT: # %bb.4:330; LA32-NEXT: move $a0, $a2331; LA32-NEXT: ret332;333; LA64-LABEL: atomicrmw_umin_i32_acquire:334; LA64: # %bb.0:335; LA64-NEXT: ammin_db.wu $a2, $a1, $a0336; LA64-NEXT: move $a0, $a2337; LA64-NEXT: ret338 %1 = atomicrmw umin ptr %a, i32 %b acquire339 ret i32 %1340}341 342define i64 @atomicrmw_umin_i64_acquire(ptr %a, i64 %b) nounwind {343; LA32-LABEL: atomicrmw_umin_i64_acquire:344; LA32: # %bb.0:345; LA32-NEXT: addi.w $sp, $sp, -32346; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill347; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill348; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill349; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill350; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill351; LA32-NEXT: move $fp, $a0352; LA32-NEXT: ld.w $a5, $a0, 4353; LA32-NEXT: ld.w $a4, $a0, 0354; LA32-NEXT: move $s0, $a2355; LA32-NEXT: move $s1, $a1356; LA32-NEXT: addi.w $s2, $sp, 0357; LA32-NEXT: b .LBB7_2358; LA32-NEXT: .p2align 4, , 16359; LA32-NEXT: .LBB7_1: # %atomicrmw.start360; LA32-NEXT: # in Loop: Header=BB7_2 Depth=1361; LA32-NEXT: st.w $a4, $sp, 0362; LA32-NEXT: st.w $a5, $sp, 4363; LA32-NEXT: ori $a4, $zero, 2364; LA32-NEXT: ori $a5, $zero, 2365; LA32-NEXT: move $a0, $fp366; LA32-NEXT: move $a1, $s2367; LA32-NEXT: bl __atomic_compare_exchange_8368; LA32-NEXT: ld.w $a5, $sp, 4369; LA32-NEXT: ld.w $a4, $sp, 0370; LA32-NEXT: bne $a0, $zero, .LBB7_7371; LA32-NEXT: .LBB7_2: # %atomicrmw.start372; LA32-NEXT: # =>This Inner Loop Header: Depth=1373; LA32-NEXT: beq $a5, $s0, .LBB7_4374; LA32-NEXT: # %bb.3: # %atomicrmw.start375; LA32-NEXT: # in Loop: Header=BB7_2 Depth=1376; LA32-NEXT: sltu $a0, $s0, $a5377; LA32-NEXT: b .LBB7_5378; LA32-NEXT: .p2align 4, , 16379; LA32-NEXT: .LBB7_4: # in Loop: Header=BB7_2 Depth=1380; LA32-NEXT: sltu $a0, $s1, $a4381; LA32-NEXT: .LBB7_5: # %atomicrmw.start382; LA32-NEXT: # in Loop: Header=BB7_2 Depth=1383; LA32-NEXT: xori $a0, $a0, 1384; LA32-NEXT: move $a2, $a4385; LA32-NEXT: move $a3, $a5386; LA32-NEXT: bne $a0, $zero, .LBB7_1387; LA32-NEXT: # %bb.6: # %atomicrmw.start388; LA32-NEXT: # in Loop: Header=BB7_2 Depth=1389; LA32-NEXT: move $a2, $s1390; LA32-NEXT: move $a3, $s0391; LA32-NEXT: b .LBB7_1392; LA32-NEXT: .LBB7_7: # %atomicrmw.end393; LA32-NEXT: move $a0, $a4394; LA32-NEXT: move $a1, $a5395; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload396; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload397; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload398; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload399; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload400; LA32-NEXT: addi.w $sp, $sp, 32401; LA32-NEXT: ret402;403; LA64-LABEL: atomicrmw_umin_i64_acquire:404; LA64: # %bb.0:405; LA64-NEXT: ammin_db.du $a2, $a1, $a0406; LA64-NEXT: move $a0, $a2407; LA64-NEXT: ret408 %1 = atomicrmw umin ptr %a, i64 %b acquire409 ret i64 %1410}411 412define i8 @atomicrmw_max_i8_acquire(ptr %a, i8 %b) nounwind {413; LA32-LABEL: atomicrmw_max_i8_acquire:414; LA32: # %bb.0:415; LA32-NEXT: addi.w $a2, $zero, -4416; LA32-NEXT: and $a2, $a0, $a2417; LA32-NEXT: slli.w $a0, $a0, 3418; LA32-NEXT: andi $a3, $a0, 24419; LA32-NEXT: ori $a4, $zero, 255420; LA32-NEXT: sll.w $a4, $a4, $a0421; LA32-NEXT: slli.w $a1, $a1, 24422; LA32-NEXT: srai.w $a1, $a1, 24423; LA32-NEXT: sll.w $a1, $a1, $a0424; LA32-NEXT: xori $a3, $a3, 24425; LA32-NEXT: .LBB8_1: # =>This Inner Loop Header: Depth=1426; LA32-NEXT: ll.w $a5, $a2, 0427; LA32-NEXT: and $a7, $a5, $a4428; LA32-NEXT: move $a6, $a5429; LA32-NEXT: sll.w $a7, $a7, $a3430; LA32-NEXT: sra.w $a7, $a7, $a3431; LA32-NEXT: bge $a7, $a1, .LBB8_3432; LA32-NEXT: # %bb.2: # in Loop: Header=BB8_1 Depth=1433; LA32-NEXT: xor $a6, $a5, $a1434; LA32-NEXT: and $a6, $a6, $a4435; LA32-NEXT: xor $a6, $a5, $a6436; LA32-NEXT: .LBB8_3: # in Loop: Header=BB8_1 Depth=1437; LA32-NEXT: sc.w $a6, $a2, 0438; LA32-NEXT: beq $a6, $zero, .LBB8_1439; LA32-NEXT: # %bb.4:440; LA32-NEXT: srl.w $a0, $a5, $a0441; LA32-NEXT: ret442;443; LA64-LABEL: atomicrmw_max_i8_acquire:444; LA64: # %bb.0:445; LA64-NEXT: slli.d $a2, $a0, 3446; LA64-NEXT: bstrins.d $a0, $zero, 1, 0447; LA64-NEXT: andi $a3, $a2, 24448; LA64-NEXT: ori $a4, $zero, 255449; LA64-NEXT: sll.w $a4, $a4, $a2450; LA64-NEXT: ext.w.b $a1, $a1451; LA64-NEXT: sll.w $a1, $a1, $a2452; LA64-NEXT: xori $a3, $a3, 56453; LA64-NEXT: .LBB8_1: # =>This Inner Loop Header: Depth=1454; LA64-NEXT: ll.w $a5, $a0, 0455; LA64-NEXT: and $a7, $a5, $a4456; LA64-NEXT: move $a6, $a5457; LA64-NEXT: sll.w $a7, $a7, $a3458; LA64-NEXT: sra.w $a7, $a7, $a3459; LA64-NEXT: bge $a7, $a1, .LBB8_3460; LA64-NEXT: # %bb.2: # in Loop: Header=BB8_1 Depth=1461; LA64-NEXT: xor $a6, $a5, $a1462; LA64-NEXT: and $a6, $a6, $a4463; LA64-NEXT: xor $a6, $a5, $a6464; LA64-NEXT: .LBB8_3: # in Loop: Header=BB8_1 Depth=1465; LA64-NEXT: sc.w $a6, $a0, 0466; LA64-NEXT: beq $a6, $zero, .LBB8_1467; LA64-NEXT: # %bb.4:468; LA64-NEXT: srl.w $a0, $a5, $a2469; LA64-NEXT: ret470 %1 = atomicrmw max ptr %a, i8 %b acquire471 ret i8 %1472}473 474define i16 @atomicrmw_max_i16_acquire(ptr %a, i16 %b) nounwind {475; LA32-LABEL: atomicrmw_max_i16_acquire:476; LA32: # %bb.0:477; LA32-NEXT: addi.w $a2, $zero, -4478; LA32-NEXT: and $a2, $a0, $a2479; LA32-NEXT: slli.w $a0, $a0, 3480; LA32-NEXT: andi $a3, $a0, 24481; LA32-NEXT: lu12i.w $a4, 15482; LA32-NEXT: ori $a4, $a4, 4095483; LA32-NEXT: sll.w $a4, $a4, $a0484; LA32-NEXT: slli.w $a1, $a1, 16485; LA32-NEXT: srai.w $a1, $a1, 16486; LA32-NEXT: sll.w $a1, $a1, $a0487; LA32-NEXT: ori $a5, $zero, 16488; LA32-NEXT: sub.w $a3, $a5, $a3489; LA32-NEXT: .LBB9_1: # =>This Inner Loop Header: Depth=1490; LA32-NEXT: ll.w $a5, $a2, 0491; LA32-NEXT: and $a7, $a5, $a4492; LA32-NEXT: move $a6, $a5493; LA32-NEXT: sll.w $a7, $a7, $a3494; LA32-NEXT: sra.w $a7, $a7, $a3495; LA32-NEXT: bge $a7, $a1, .LBB9_3496; LA32-NEXT: # %bb.2: # in Loop: Header=BB9_1 Depth=1497; LA32-NEXT: xor $a6, $a5, $a1498; LA32-NEXT: and $a6, $a6, $a4499; LA32-NEXT: xor $a6, $a5, $a6500; LA32-NEXT: .LBB9_3: # in Loop: Header=BB9_1 Depth=1501; LA32-NEXT: sc.w $a6, $a2, 0502; LA32-NEXT: beq $a6, $zero, .LBB9_1503; LA32-NEXT: # %bb.4:504; LA32-NEXT: srl.w $a0, $a5, $a0505; LA32-NEXT: ret506;507; LA64-LABEL: atomicrmw_max_i16_acquire:508; LA64: # %bb.0:509; LA64-NEXT: slli.d $a2, $a0, 3510; LA64-NEXT: bstrins.d $a0, $zero, 1, 0511; LA64-NEXT: andi $a3, $a2, 24512; LA64-NEXT: lu12i.w $a4, 15513; LA64-NEXT: ori $a4, $a4, 4095514; LA64-NEXT: sll.w $a4, $a4, $a2515; LA64-NEXT: ext.w.h $a1, $a1516; LA64-NEXT: sll.w $a1, $a1, $a2517; LA64-NEXT: ori $a5, $zero, 48518; LA64-NEXT: sub.d $a3, $a5, $a3519; LA64-NEXT: .LBB9_1: # =>This Inner Loop Header: Depth=1520; LA64-NEXT: ll.w $a5, $a0, 0521; LA64-NEXT: and $a7, $a5, $a4522; LA64-NEXT: move $a6, $a5523; LA64-NEXT: sll.w $a7, $a7, $a3524; LA64-NEXT: sra.w $a7, $a7, $a3525; LA64-NEXT: bge $a7, $a1, .LBB9_3526; LA64-NEXT: # %bb.2: # in Loop: Header=BB9_1 Depth=1527; LA64-NEXT: xor $a6, $a5, $a1528; LA64-NEXT: and $a6, $a6, $a4529; LA64-NEXT: xor $a6, $a5, $a6530; LA64-NEXT: .LBB9_3: # in Loop: Header=BB9_1 Depth=1531; LA64-NEXT: sc.w $a6, $a0, 0532; LA64-NEXT: beq $a6, $zero, .LBB9_1533; LA64-NEXT: # %bb.4:534; LA64-NEXT: srl.w $a0, $a5, $a2535; LA64-NEXT: ret536 %1 = atomicrmw max ptr %a, i16 %b acquire537 ret i16 %1538}539 540define i32 @atomicrmw_max_i32_acquire(ptr %a, i32 %b) nounwind {541; LA32-LABEL: atomicrmw_max_i32_acquire:542; LA32: # %bb.0:543; LA32-NEXT: .LBB10_1: # =>This Inner Loop Header: Depth=1544; LA32-NEXT: ll.w $a2, $a0, 0545; LA32-NEXT: move $a3, $a2546; LA32-NEXT: bge $a2, $a1, .LBB10_3547; LA32-NEXT: # %bb.2: # in Loop: Header=BB10_1 Depth=1548; LA32-NEXT: move $a3, $a1549; LA32-NEXT: .LBB10_3: # in Loop: Header=BB10_1 Depth=1550; LA32-NEXT: sc.w $a3, $a0, 0551; LA32-NEXT: beq $a3, $zero, .LBB10_1552; LA32-NEXT: # %bb.4:553; LA32-NEXT: move $a0, $a2554; LA32-NEXT: ret555;556; LA64-LABEL: atomicrmw_max_i32_acquire:557; LA64: # %bb.0:558; LA64-NEXT: ammax_db.w $a2, $a1, $a0559; LA64-NEXT: move $a0, $a2560; LA64-NEXT: ret561 %1 = atomicrmw max ptr %a, i32 %b acquire562 ret i32 %1563}564 565define i64 @atomicrmw_max_i64_acquire(ptr %a, i64 %b) nounwind {566; LA32-LABEL: atomicrmw_max_i64_acquire:567; LA32: # %bb.0:568; LA32-NEXT: addi.w $sp, $sp, -32569; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill570; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill571; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill572; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill573; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill574; LA32-NEXT: move $fp, $a0575; LA32-NEXT: ld.w $a5, $a0, 4576; LA32-NEXT: ld.w $a4, $a0, 0577; LA32-NEXT: move $s0, $a2578; LA32-NEXT: move $s1, $a1579; LA32-NEXT: addi.w $s2, $sp, 0580; LA32-NEXT: b .LBB11_2581; LA32-NEXT: .p2align 4, , 16582; LA32-NEXT: .LBB11_1: # %atomicrmw.start583; LA32-NEXT: # in Loop: Header=BB11_2 Depth=1584; LA32-NEXT: st.w $a4, $sp, 0585; LA32-NEXT: st.w $a5, $sp, 4586; LA32-NEXT: ori $a4, $zero, 2587; LA32-NEXT: ori $a5, $zero, 2588; LA32-NEXT: move $a0, $fp589; LA32-NEXT: move $a1, $s2590; LA32-NEXT: bl __atomic_compare_exchange_8591; LA32-NEXT: ld.w $a5, $sp, 4592; LA32-NEXT: ld.w $a4, $sp, 0593; LA32-NEXT: bne $a0, $zero, .LBB11_7594; LA32-NEXT: .LBB11_2: # %atomicrmw.start595; LA32-NEXT: # =>This Inner Loop Header: Depth=1596; LA32-NEXT: beq $a5, $s0, .LBB11_4597; LA32-NEXT: # %bb.3: # %atomicrmw.start598; LA32-NEXT: # in Loop: Header=BB11_2 Depth=1599; LA32-NEXT: slt $a0, $s0, $a5600; LA32-NEXT: b .LBB11_5601; LA32-NEXT: .p2align 4, , 16602; LA32-NEXT: .LBB11_4: # in Loop: Header=BB11_2 Depth=1603; LA32-NEXT: sltu $a0, $s1, $a4604; LA32-NEXT: .LBB11_5: # %atomicrmw.start605; LA32-NEXT: # in Loop: Header=BB11_2 Depth=1606; LA32-NEXT: move $a2, $a4607; LA32-NEXT: move $a3, $a5608; LA32-NEXT: bne $a0, $zero, .LBB11_1609; LA32-NEXT: # %bb.6: # %atomicrmw.start610; LA32-NEXT: # in Loop: Header=BB11_2 Depth=1611; LA32-NEXT: move $a2, $s1612; LA32-NEXT: move $a3, $s0613; LA32-NEXT: b .LBB11_1614; LA32-NEXT: .LBB11_7: # %atomicrmw.end615; LA32-NEXT: move $a0, $a4616; LA32-NEXT: move $a1, $a5617; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload618; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload619; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload620; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload621; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload622; LA32-NEXT: addi.w $sp, $sp, 32623; LA32-NEXT: ret624;625; LA64-LABEL: atomicrmw_max_i64_acquire:626; LA64: # %bb.0:627; LA64-NEXT: ammax_db.d $a2, $a1, $a0628; LA64-NEXT: move $a0, $a2629; LA64-NEXT: ret630 %1 = atomicrmw max ptr %a, i64 %b acquire631 ret i64 %1632}633 634define i8 @atomicrmw_min_i8_acquire(ptr %a, i8 %b) nounwind {635; LA32-LABEL: atomicrmw_min_i8_acquire:636; LA32: # %bb.0:637; LA32-NEXT: addi.w $a2, $zero, -4638; LA32-NEXT: and $a2, $a0, $a2639; LA32-NEXT: slli.w $a0, $a0, 3640; LA32-NEXT: andi $a3, $a0, 24641; LA32-NEXT: ori $a4, $zero, 255642; LA32-NEXT: sll.w $a4, $a4, $a0643; LA32-NEXT: slli.w $a1, $a1, 24644; LA32-NEXT: srai.w $a1, $a1, 24645; LA32-NEXT: sll.w $a1, $a1, $a0646; LA32-NEXT: xori $a3, $a3, 24647; LA32-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=1648; LA32-NEXT: ll.w $a5, $a2, 0649; LA32-NEXT: and $a7, $a5, $a4650; LA32-NEXT: move $a6, $a5651; LA32-NEXT: sll.w $a7, $a7, $a3652; LA32-NEXT: sra.w $a7, $a7, $a3653; LA32-NEXT: bge $a1, $a7, .LBB12_3654; LA32-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=1655; LA32-NEXT: xor $a6, $a5, $a1656; LA32-NEXT: and $a6, $a6, $a4657; LA32-NEXT: xor $a6, $a5, $a6658; LA32-NEXT: .LBB12_3: # in Loop: Header=BB12_1 Depth=1659; LA32-NEXT: sc.w $a6, $a2, 0660; LA32-NEXT: beq $a6, $zero, .LBB12_1661; LA32-NEXT: # %bb.4:662; LA32-NEXT: srl.w $a0, $a5, $a0663; LA32-NEXT: ret664;665; LA64-LABEL: atomicrmw_min_i8_acquire:666; LA64: # %bb.0:667; LA64-NEXT: slli.d $a2, $a0, 3668; LA64-NEXT: bstrins.d $a0, $zero, 1, 0669; LA64-NEXT: andi $a3, $a2, 24670; LA64-NEXT: ori $a4, $zero, 255671; LA64-NEXT: sll.w $a4, $a4, $a2672; LA64-NEXT: ext.w.b $a1, $a1673; LA64-NEXT: sll.w $a1, $a1, $a2674; LA64-NEXT: xori $a3, $a3, 56675; LA64-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=1676; LA64-NEXT: ll.w $a5, $a0, 0677; LA64-NEXT: and $a7, $a5, $a4678; LA64-NEXT: move $a6, $a5679; LA64-NEXT: sll.w $a7, $a7, $a3680; LA64-NEXT: sra.w $a7, $a7, $a3681; LA64-NEXT: bge $a1, $a7, .LBB12_3682; LA64-NEXT: # %bb.2: # in Loop: Header=BB12_1 Depth=1683; LA64-NEXT: xor $a6, $a5, $a1684; LA64-NEXT: and $a6, $a6, $a4685; LA64-NEXT: xor $a6, $a5, $a6686; LA64-NEXT: .LBB12_3: # in Loop: Header=BB12_1 Depth=1687; LA64-NEXT: sc.w $a6, $a0, 0688; LA64-NEXT: beq $a6, $zero, .LBB12_1689; LA64-NEXT: # %bb.4:690; LA64-NEXT: srl.w $a0, $a5, $a2691; LA64-NEXT: ret692 %1 = atomicrmw min ptr %a, i8 %b acquire693 ret i8 %1694}695 696define i16 @atomicrmw_min_i16_acquire(ptr %a, i16 %b) nounwind {697; LA32-LABEL: atomicrmw_min_i16_acquire:698; LA32: # %bb.0:699; LA32-NEXT: addi.w $a2, $zero, -4700; LA32-NEXT: and $a2, $a0, $a2701; LA32-NEXT: slli.w $a0, $a0, 3702; LA32-NEXT: andi $a3, $a0, 24703; LA32-NEXT: lu12i.w $a4, 15704; LA32-NEXT: ori $a4, $a4, 4095705; LA32-NEXT: sll.w $a4, $a4, $a0706; LA32-NEXT: slli.w $a1, $a1, 16707; LA32-NEXT: srai.w $a1, $a1, 16708; LA32-NEXT: sll.w $a1, $a1, $a0709; LA32-NEXT: ori $a5, $zero, 16710; LA32-NEXT: sub.w $a3, $a5, $a3711; LA32-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=1712; LA32-NEXT: ll.w $a5, $a2, 0713; LA32-NEXT: and $a7, $a5, $a4714; LA32-NEXT: move $a6, $a5715; LA32-NEXT: sll.w $a7, $a7, $a3716; LA32-NEXT: sra.w $a7, $a7, $a3717; LA32-NEXT: bge $a1, $a7, .LBB13_3718; LA32-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=1719; LA32-NEXT: xor $a6, $a5, $a1720; LA32-NEXT: and $a6, $a6, $a4721; LA32-NEXT: xor $a6, $a5, $a6722; LA32-NEXT: .LBB13_3: # in Loop: Header=BB13_1 Depth=1723; LA32-NEXT: sc.w $a6, $a2, 0724; LA32-NEXT: beq $a6, $zero, .LBB13_1725; LA32-NEXT: # %bb.4:726; LA32-NEXT: srl.w $a0, $a5, $a0727; LA32-NEXT: ret728;729; LA64-LABEL: atomicrmw_min_i16_acquire:730; LA64: # %bb.0:731; LA64-NEXT: slli.d $a2, $a0, 3732; LA64-NEXT: bstrins.d $a0, $zero, 1, 0733; LA64-NEXT: andi $a3, $a2, 24734; LA64-NEXT: lu12i.w $a4, 15735; LA64-NEXT: ori $a4, $a4, 4095736; LA64-NEXT: sll.w $a4, $a4, $a2737; LA64-NEXT: ext.w.h $a1, $a1738; LA64-NEXT: sll.w $a1, $a1, $a2739; LA64-NEXT: ori $a5, $zero, 48740; LA64-NEXT: sub.d $a3, $a5, $a3741; LA64-NEXT: .LBB13_1: # =>This Inner Loop Header: Depth=1742; LA64-NEXT: ll.w $a5, $a0, 0743; LA64-NEXT: and $a7, $a5, $a4744; LA64-NEXT: move $a6, $a5745; LA64-NEXT: sll.w $a7, $a7, $a3746; LA64-NEXT: sra.w $a7, $a7, $a3747; LA64-NEXT: bge $a1, $a7, .LBB13_3748; LA64-NEXT: # %bb.2: # in Loop: Header=BB13_1 Depth=1749; LA64-NEXT: xor $a6, $a5, $a1750; LA64-NEXT: and $a6, $a6, $a4751; LA64-NEXT: xor $a6, $a5, $a6752; LA64-NEXT: .LBB13_3: # in Loop: Header=BB13_1 Depth=1753; LA64-NEXT: sc.w $a6, $a0, 0754; LA64-NEXT: beq $a6, $zero, .LBB13_1755; LA64-NEXT: # %bb.4:756; LA64-NEXT: srl.w $a0, $a5, $a2757; LA64-NEXT: ret758 %1 = atomicrmw min ptr %a, i16 %b acquire759 ret i16 %1760}761 762define i32 @atomicrmw_min_i32_acquire(ptr %a, i32 %b) nounwind {763; LA32-LABEL: atomicrmw_min_i32_acquire:764; LA32: # %bb.0:765; LA32-NEXT: .LBB14_1: # =>This Inner Loop Header: Depth=1766; LA32-NEXT: ll.w $a2, $a0, 0767; LA32-NEXT: move $a3, $a2768; LA32-NEXT: bge $a1, $a2, .LBB14_3769; LA32-NEXT: # %bb.2: # in Loop: Header=BB14_1 Depth=1770; LA32-NEXT: move $a3, $a1771; LA32-NEXT: .LBB14_3: # in Loop: Header=BB14_1 Depth=1772; LA32-NEXT: sc.w $a3, $a0, 0773; LA32-NEXT: beq $a3, $zero, .LBB14_1774; LA32-NEXT: # %bb.4:775; LA32-NEXT: move $a0, $a2776; LA32-NEXT: ret777;778; LA64-LABEL: atomicrmw_min_i32_acquire:779; LA64: # %bb.0:780; LA64-NEXT: ammin_db.w $a2, $a1, $a0781; LA64-NEXT: move $a0, $a2782; LA64-NEXT: ret783 %1 = atomicrmw min ptr %a, i32 %b acquire784 ret i32 %1785}786 787define i64 @atomicrmw_min_i64_acquire(ptr %a, i64 %b) nounwind {788; LA32-LABEL: atomicrmw_min_i64_acquire:789; LA32: # %bb.0:790; LA32-NEXT: addi.w $sp, $sp, -32791; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill792; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill793; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill794; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill795; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill796; LA32-NEXT: move $fp, $a0797; LA32-NEXT: ld.w $a5, $a0, 4798; LA32-NEXT: ld.w $a4, $a0, 0799; LA32-NEXT: move $s0, $a2800; LA32-NEXT: move $s1, $a1801; LA32-NEXT: addi.w $s2, $sp, 0802; LA32-NEXT: b .LBB15_2803; LA32-NEXT: .p2align 4, , 16804; LA32-NEXT: .LBB15_1: # %atomicrmw.start805; LA32-NEXT: # in Loop: Header=BB15_2 Depth=1806; LA32-NEXT: st.w $a4, $sp, 0807; LA32-NEXT: st.w $a5, $sp, 4808; LA32-NEXT: ori $a4, $zero, 2809; LA32-NEXT: ori $a5, $zero, 2810; LA32-NEXT: move $a0, $fp811; LA32-NEXT: move $a1, $s2812; LA32-NEXT: bl __atomic_compare_exchange_8813; LA32-NEXT: ld.w $a5, $sp, 4814; LA32-NEXT: ld.w $a4, $sp, 0815; LA32-NEXT: bne $a0, $zero, .LBB15_7816; LA32-NEXT: .LBB15_2: # %atomicrmw.start817; LA32-NEXT: # =>This Inner Loop Header: Depth=1818; LA32-NEXT: beq $a5, $s0, .LBB15_4819; LA32-NEXT: # %bb.3: # %atomicrmw.start820; LA32-NEXT: # in Loop: Header=BB15_2 Depth=1821; LA32-NEXT: slt $a0, $s0, $a5822; LA32-NEXT: b .LBB15_5823; LA32-NEXT: .p2align 4, , 16824; LA32-NEXT: .LBB15_4: # in Loop: Header=BB15_2 Depth=1825; LA32-NEXT: sltu $a0, $s1, $a4826; LA32-NEXT: .LBB15_5: # %atomicrmw.start827; LA32-NEXT: # in Loop: Header=BB15_2 Depth=1828; LA32-NEXT: xori $a0, $a0, 1829; LA32-NEXT: move $a2, $a4830; LA32-NEXT: move $a3, $a5831; LA32-NEXT: bne $a0, $zero, .LBB15_1832; LA32-NEXT: # %bb.6: # %atomicrmw.start833; LA32-NEXT: # in Loop: Header=BB15_2 Depth=1834; LA32-NEXT: move $a2, $s1835; LA32-NEXT: move $a3, $s0836; LA32-NEXT: b .LBB15_1837; LA32-NEXT: .LBB15_7: # %atomicrmw.end838; LA32-NEXT: move $a0, $a4839; LA32-NEXT: move $a1, $a5840; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload841; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload842; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload843; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload844; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload845; LA32-NEXT: addi.w $sp, $sp, 32846; LA32-NEXT: ret847;848; LA64-LABEL: atomicrmw_min_i64_acquire:849; LA64: # %bb.0:850; LA64-NEXT: ammin_db.d $a2, $a1, $a0851; LA64-NEXT: move $a0, $a2852; LA64-NEXT: ret853 %1 = atomicrmw min ptr %a, i64 %b acquire854 ret i64 %1855}856 857define i8 @atomicrmw_umax_i8_release(ptr %a, i8 %b) nounwind {858; LA32-LABEL: atomicrmw_umax_i8_release:859; LA32: # %bb.0:860; LA32-NEXT: addi.w $a2, $zero, -4861; LA32-NEXT: and $a2, $a0, $a2862; LA32-NEXT: slli.w $a0, $a0, 3863; LA32-NEXT: ori $a3, $zero, 255864; LA32-NEXT: sll.w $a3, $a3, $a0865; LA32-NEXT: andi $a1, $a1, 255866; LA32-NEXT: sll.w $a1, $a1, $a0867; LA32-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=1868; LA32-NEXT: ll.w $a4, $a2, 0869; LA32-NEXT: and $a6, $a4, $a3870; LA32-NEXT: move $a5, $a4871; LA32-NEXT: bgeu $a6, $a1, .LBB16_3872; LA32-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=1873; LA32-NEXT: xor $a5, $a4, $a1874; LA32-NEXT: and $a5, $a5, $a3875; LA32-NEXT: xor $a5, $a4, $a5876; LA32-NEXT: .LBB16_3: # in Loop: Header=BB16_1 Depth=1877; LA32-NEXT: sc.w $a5, $a2, 0878; LA32-NEXT: beq $a5, $zero, .LBB16_1879; LA32-NEXT: # %bb.4:880; LA32-NEXT: srl.w $a0, $a4, $a0881; LA32-NEXT: ret882;883; LA64-LABEL: atomicrmw_umax_i8_release:884; LA64: # %bb.0:885; LA64-NEXT: slli.d $a2, $a0, 3886; LA64-NEXT: bstrins.d $a0, $zero, 1, 0887; LA64-NEXT: ori $a3, $zero, 255888; LA64-NEXT: sll.w $a3, $a3, $a2889; LA64-NEXT: andi $a1, $a1, 255890; LA64-NEXT: sll.w $a1, $a1, $a2891; LA64-NEXT: .LBB16_1: # =>This Inner Loop Header: Depth=1892; LA64-NEXT: ll.w $a4, $a0, 0893; LA64-NEXT: and $a6, $a4, $a3894; LA64-NEXT: move $a5, $a4895; LA64-NEXT: bgeu $a6, $a1, .LBB16_3896; LA64-NEXT: # %bb.2: # in Loop: Header=BB16_1 Depth=1897; LA64-NEXT: xor $a5, $a4, $a1898; LA64-NEXT: and $a5, $a5, $a3899; LA64-NEXT: xor $a5, $a4, $a5900; LA64-NEXT: .LBB16_3: # in Loop: Header=BB16_1 Depth=1901; LA64-NEXT: sc.w $a5, $a0, 0902; LA64-NEXT: beq $a5, $zero, .LBB16_1903; LA64-NEXT: # %bb.4:904; LA64-NEXT: srl.w $a0, $a4, $a2905; LA64-NEXT: ret906 %1 = atomicrmw umax ptr %a, i8 %b release907 ret i8 %1908}909 910define i16 @atomicrmw_umax_i16_release(ptr %a, i16 %b) nounwind {911; LA32-LABEL: atomicrmw_umax_i16_release:912; LA32: # %bb.0:913; LA32-NEXT: addi.w $a2, $zero, -4914; LA32-NEXT: and $a2, $a0, $a2915; LA32-NEXT: slli.w $a0, $a0, 3916; LA32-NEXT: lu12i.w $a3, 15917; LA32-NEXT: ori $a3, $a3, 4095918; LA32-NEXT: sll.w $a4, $a3, $a0919; LA32-NEXT: and $a1, $a1, $a3920; LA32-NEXT: sll.w $a1, $a1, $a0921; LA32-NEXT: .LBB17_1: # =>This Inner Loop Header: Depth=1922; LA32-NEXT: ll.w $a3, $a2, 0923; LA32-NEXT: and $a6, $a3, $a4924; LA32-NEXT: move $a5, $a3925; LA32-NEXT: bgeu $a6, $a1, .LBB17_3926; LA32-NEXT: # %bb.2: # in Loop: Header=BB17_1 Depth=1927; LA32-NEXT: xor $a5, $a3, $a1928; LA32-NEXT: and $a5, $a5, $a4929; LA32-NEXT: xor $a5, $a3, $a5930; LA32-NEXT: .LBB17_3: # in Loop: Header=BB17_1 Depth=1931; LA32-NEXT: sc.w $a5, $a2, 0932; LA32-NEXT: beq $a5, $zero, .LBB17_1933; LA32-NEXT: # %bb.4:934; LA32-NEXT: srl.w $a0, $a3, $a0935; LA32-NEXT: ret936;937; LA64-LABEL: atomicrmw_umax_i16_release:938; LA64: # %bb.0:939; LA64-NEXT: slli.d $a2, $a0, 3940; LA64-NEXT: bstrins.d $a0, $zero, 1, 0941; LA64-NEXT: lu12i.w $a3, 15942; LA64-NEXT: ori $a3, $a3, 4095943; LA64-NEXT: sll.w $a3, $a3, $a2944; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0945; LA64-NEXT: sll.w $a1, $a1, $a2946; LA64-NEXT: .LBB17_1: # =>This Inner Loop Header: Depth=1947; LA64-NEXT: ll.w $a4, $a0, 0948; LA64-NEXT: and $a6, $a4, $a3949; LA64-NEXT: move $a5, $a4950; LA64-NEXT: bgeu $a6, $a1, .LBB17_3951; LA64-NEXT: # %bb.2: # in Loop: Header=BB17_1 Depth=1952; LA64-NEXT: xor $a5, $a4, $a1953; LA64-NEXT: and $a5, $a5, $a3954; LA64-NEXT: xor $a5, $a4, $a5955; LA64-NEXT: .LBB17_3: # in Loop: Header=BB17_1 Depth=1956; LA64-NEXT: sc.w $a5, $a0, 0957; LA64-NEXT: beq $a5, $zero, .LBB17_1958; LA64-NEXT: # %bb.4:959; LA64-NEXT: srl.w $a0, $a4, $a2960; LA64-NEXT: ret961 %1 = atomicrmw umax ptr %a, i16 %b release962 ret i16 %1963}964 965define i32 @atomicrmw_umax_i32_release(ptr %a, i32 %b) nounwind {966; LA32-LABEL: atomicrmw_umax_i32_release:967; LA32: # %bb.0:968; LA32-NEXT: .LBB18_1: # =>This Inner Loop Header: Depth=1969; LA32-NEXT: ll.w $a2, $a0, 0970; LA32-NEXT: move $a3, $a2971; LA32-NEXT: bgeu $a2, $a1, .LBB18_3972; LA32-NEXT: # %bb.2: # in Loop: Header=BB18_1 Depth=1973; LA32-NEXT: move $a3, $a1974; LA32-NEXT: .LBB18_3: # in Loop: Header=BB18_1 Depth=1975; LA32-NEXT: sc.w $a3, $a0, 0976; LA32-NEXT: beq $a3, $zero, .LBB18_1977; LA32-NEXT: # %bb.4:978; LA32-NEXT: move $a0, $a2979; LA32-NEXT: ret980;981; LA64-LABEL: atomicrmw_umax_i32_release:982; LA64: # %bb.0:983; LA64-NEXT: ammax_db.wu $a2, $a1, $a0984; LA64-NEXT: move $a0, $a2985; LA64-NEXT: ret986 %1 = atomicrmw umax ptr %a, i32 %b release987 ret i32 %1988}989 990define i64 @atomicrmw_umax_i64_release(ptr %a, i64 %b) nounwind {991; LA32-LABEL: atomicrmw_umax_i64_release:992; LA32: # %bb.0:993; LA32-NEXT: addi.w $sp, $sp, -32994; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill995; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill996; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill997; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill998; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill999; LA32-NEXT: move $fp, $a01000; LA32-NEXT: ld.w $a5, $a0, 41001; LA32-NEXT: ld.w $a4, $a0, 01002; LA32-NEXT: move $s0, $a21003; LA32-NEXT: move $s1, $a11004; LA32-NEXT: addi.w $s2, $sp, 01005; LA32-NEXT: b .LBB19_21006; LA32-NEXT: .p2align 4, , 161007; LA32-NEXT: .LBB19_1: # %atomicrmw.start1008; LA32-NEXT: # in Loop: Header=BB19_2 Depth=11009; LA32-NEXT: st.w $a4, $sp, 01010; LA32-NEXT: st.w $a5, $sp, 41011; LA32-NEXT: ori $a4, $zero, 31012; LA32-NEXT: move $a0, $fp1013; LA32-NEXT: move $a1, $s21014; LA32-NEXT: move $a5, $zero1015; LA32-NEXT: bl __atomic_compare_exchange_81016; LA32-NEXT: ld.w $a5, $sp, 41017; LA32-NEXT: ld.w $a4, $sp, 01018; LA32-NEXT: bne $a0, $zero, .LBB19_71019; LA32-NEXT: .LBB19_2: # %atomicrmw.start1020; LA32-NEXT: # =>This Inner Loop Header: Depth=11021; LA32-NEXT: beq $a5, $s0, .LBB19_41022; LA32-NEXT: # %bb.3: # %atomicrmw.start1023; LA32-NEXT: # in Loop: Header=BB19_2 Depth=11024; LA32-NEXT: sltu $a0, $s0, $a51025; LA32-NEXT: b .LBB19_51026; LA32-NEXT: .p2align 4, , 161027; LA32-NEXT: .LBB19_4: # in Loop: Header=BB19_2 Depth=11028; LA32-NEXT: sltu $a0, $s1, $a41029; LA32-NEXT: .LBB19_5: # %atomicrmw.start1030; LA32-NEXT: # in Loop: Header=BB19_2 Depth=11031; LA32-NEXT: move $a2, $a41032; LA32-NEXT: move $a3, $a51033; LA32-NEXT: bne $a0, $zero, .LBB19_11034; LA32-NEXT: # %bb.6: # %atomicrmw.start1035; LA32-NEXT: # in Loop: Header=BB19_2 Depth=11036; LA32-NEXT: move $a2, $s11037; LA32-NEXT: move $a3, $s01038; LA32-NEXT: b .LBB19_11039; LA32-NEXT: .LBB19_7: # %atomicrmw.end1040; LA32-NEXT: move $a0, $a41041; LA32-NEXT: move $a1, $a51042; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload1043; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload1044; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload1045; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload1046; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload1047; LA32-NEXT: addi.w $sp, $sp, 321048; LA32-NEXT: ret1049;1050; LA64-LABEL: atomicrmw_umax_i64_release:1051; LA64: # %bb.0:1052; LA64-NEXT: ammax_db.du $a2, $a1, $a01053; LA64-NEXT: move $a0, $a21054; LA64-NEXT: ret1055 %1 = atomicrmw umax ptr %a, i64 %b release1056 ret i64 %11057}1058 1059define i8 @atomicrmw_umin_i8_release(ptr %a, i8 %b) nounwind {1060; LA32-LABEL: atomicrmw_umin_i8_release:1061; LA32: # %bb.0:1062; LA32-NEXT: addi.w $a2, $zero, -41063; LA32-NEXT: and $a2, $a0, $a21064; LA32-NEXT: slli.w $a0, $a0, 31065; LA32-NEXT: ori $a3, $zero, 2551066; LA32-NEXT: sll.w $a3, $a3, $a01067; LA32-NEXT: andi $a1, $a1, 2551068; LA32-NEXT: sll.w $a1, $a1, $a01069; LA32-NEXT: .LBB20_1: # =>This Inner Loop Header: Depth=11070; LA32-NEXT: ll.w $a4, $a2, 01071; LA32-NEXT: and $a6, $a4, $a31072; LA32-NEXT: move $a5, $a41073; LA32-NEXT: bgeu $a1, $a6, .LBB20_31074; LA32-NEXT: # %bb.2: # in Loop: Header=BB20_1 Depth=11075; LA32-NEXT: xor $a5, $a4, $a11076; LA32-NEXT: and $a5, $a5, $a31077; LA32-NEXT: xor $a5, $a4, $a51078; LA32-NEXT: .LBB20_3: # in Loop: Header=BB20_1 Depth=11079; LA32-NEXT: sc.w $a5, $a2, 01080; LA32-NEXT: beq $a5, $zero, .LBB20_11081; LA32-NEXT: # %bb.4:1082; LA32-NEXT: srl.w $a0, $a4, $a01083; LA32-NEXT: ret1084;1085; LA64-LABEL: atomicrmw_umin_i8_release:1086; LA64: # %bb.0:1087; LA64-NEXT: slli.d $a2, $a0, 31088; LA64-NEXT: bstrins.d $a0, $zero, 1, 01089; LA64-NEXT: ori $a3, $zero, 2551090; LA64-NEXT: sll.w $a3, $a3, $a21091; LA64-NEXT: andi $a1, $a1, 2551092; LA64-NEXT: sll.w $a1, $a1, $a21093; LA64-NEXT: .LBB20_1: # =>This Inner Loop Header: Depth=11094; LA64-NEXT: ll.w $a4, $a0, 01095; LA64-NEXT: and $a6, $a4, $a31096; LA64-NEXT: move $a5, $a41097; LA64-NEXT: bgeu $a1, $a6, .LBB20_31098; LA64-NEXT: # %bb.2: # in Loop: Header=BB20_1 Depth=11099; LA64-NEXT: xor $a5, $a4, $a11100; LA64-NEXT: and $a5, $a5, $a31101; LA64-NEXT: xor $a5, $a4, $a51102; LA64-NEXT: .LBB20_3: # in Loop: Header=BB20_1 Depth=11103; LA64-NEXT: sc.w $a5, $a0, 01104; LA64-NEXT: beq $a5, $zero, .LBB20_11105; LA64-NEXT: # %bb.4:1106; LA64-NEXT: srl.w $a0, $a4, $a21107; LA64-NEXT: ret1108 %1 = atomicrmw umin ptr %a, i8 %b release1109 ret i8 %11110}1111 1112define i16 @atomicrmw_umin_i16_release(ptr %a, i16 %b) nounwind {1113; LA32-LABEL: atomicrmw_umin_i16_release:1114; LA32: # %bb.0:1115; LA32-NEXT: addi.w $a2, $zero, -41116; LA32-NEXT: and $a2, $a0, $a21117; LA32-NEXT: slli.w $a0, $a0, 31118; LA32-NEXT: lu12i.w $a3, 151119; LA32-NEXT: ori $a3, $a3, 40951120; LA32-NEXT: sll.w $a4, $a3, $a01121; LA32-NEXT: and $a1, $a1, $a31122; LA32-NEXT: sll.w $a1, $a1, $a01123; LA32-NEXT: .LBB21_1: # =>This Inner Loop Header: Depth=11124; LA32-NEXT: ll.w $a3, $a2, 01125; LA32-NEXT: and $a6, $a3, $a41126; LA32-NEXT: move $a5, $a31127; LA32-NEXT: bgeu $a1, $a6, .LBB21_31128; LA32-NEXT: # %bb.2: # in Loop: Header=BB21_1 Depth=11129; LA32-NEXT: xor $a5, $a3, $a11130; LA32-NEXT: and $a5, $a5, $a41131; LA32-NEXT: xor $a5, $a3, $a51132; LA32-NEXT: .LBB21_3: # in Loop: Header=BB21_1 Depth=11133; LA32-NEXT: sc.w $a5, $a2, 01134; LA32-NEXT: beq $a5, $zero, .LBB21_11135; LA32-NEXT: # %bb.4:1136; LA32-NEXT: srl.w $a0, $a3, $a01137; LA32-NEXT: ret1138;1139; LA64-LABEL: atomicrmw_umin_i16_release:1140; LA64: # %bb.0:1141; LA64-NEXT: slli.d $a2, $a0, 31142; LA64-NEXT: bstrins.d $a0, $zero, 1, 01143; LA64-NEXT: lu12i.w $a3, 151144; LA64-NEXT: ori $a3, $a3, 40951145; LA64-NEXT: sll.w $a3, $a3, $a21146; LA64-NEXT: bstrpick.d $a1, $a1, 15, 01147; LA64-NEXT: sll.w $a1, $a1, $a21148; LA64-NEXT: .LBB21_1: # =>This Inner Loop Header: Depth=11149; LA64-NEXT: ll.w $a4, $a0, 01150; LA64-NEXT: and $a6, $a4, $a31151; LA64-NEXT: move $a5, $a41152; LA64-NEXT: bgeu $a1, $a6, .LBB21_31153; LA64-NEXT: # %bb.2: # in Loop: Header=BB21_1 Depth=11154; LA64-NEXT: xor $a5, $a4, $a11155; LA64-NEXT: and $a5, $a5, $a31156; LA64-NEXT: xor $a5, $a4, $a51157; LA64-NEXT: .LBB21_3: # in Loop: Header=BB21_1 Depth=11158; LA64-NEXT: sc.w $a5, $a0, 01159; LA64-NEXT: beq $a5, $zero, .LBB21_11160; LA64-NEXT: # %bb.4:1161; LA64-NEXT: srl.w $a0, $a4, $a21162; LA64-NEXT: ret1163 %1 = atomicrmw umin ptr %a, i16 %b release1164 ret i16 %11165}1166 1167define i32 @atomicrmw_umin_i32_release(ptr %a, i32 %b) nounwind {1168; LA32-LABEL: atomicrmw_umin_i32_release:1169; LA32: # %bb.0:1170; LA32-NEXT: .LBB22_1: # =>This Inner Loop Header: Depth=11171; LA32-NEXT: ll.w $a2, $a0, 01172; LA32-NEXT: move $a3, $a21173; LA32-NEXT: bgeu $a1, $a2, .LBB22_31174; LA32-NEXT: # %bb.2: # in Loop: Header=BB22_1 Depth=11175; LA32-NEXT: move $a3, $a11176; LA32-NEXT: .LBB22_3: # in Loop: Header=BB22_1 Depth=11177; LA32-NEXT: sc.w $a3, $a0, 01178; LA32-NEXT: beq $a3, $zero, .LBB22_11179; LA32-NEXT: # %bb.4:1180; LA32-NEXT: move $a0, $a21181; LA32-NEXT: ret1182;1183; LA64-LABEL: atomicrmw_umin_i32_release:1184; LA64: # %bb.0:1185; LA64-NEXT: ammin_db.wu $a2, $a1, $a01186; LA64-NEXT: move $a0, $a21187; LA64-NEXT: ret1188 %1 = atomicrmw umin ptr %a, i32 %b release1189 ret i32 %11190}1191 1192define i64 @atomicrmw_umin_i64_release(ptr %a, i64 %b) nounwind {1193; LA32-LABEL: atomicrmw_umin_i64_release:1194; LA32: # %bb.0:1195; LA32-NEXT: addi.w $sp, $sp, -321196; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill1197; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill1198; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill1199; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill1200; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill1201; LA32-NEXT: move $fp, $a01202; LA32-NEXT: ld.w $a5, $a0, 41203; LA32-NEXT: ld.w $a4, $a0, 01204; LA32-NEXT: move $s0, $a21205; LA32-NEXT: move $s1, $a11206; LA32-NEXT: addi.w $s2, $sp, 01207; LA32-NEXT: b .LBB23_21208; LA32-NEXT: .p2align 4, , 161209; LA32-NEXT: .LBB23_1: # %atomicrmw.start1210; LA32-NEXT: # in Loop: Header=BB23_2 Depth=11211; LA32-NEXT: st.w $a4, $sp, 01212; LA32-NEXT: st.w $a5, $sp, 41213; LA32-NEXT: ori $a4, $zero, 31214; LA32-NEXT: move $a0, $fp1215; LA32-NEXT: move $a1, $s21216; LA32-NEXT: move $a5, $zero1217; LA32-NEXT: bl __atomic_compare_exchange_81218; LA32-NEXT: ld.w $a5, $sp, 41219; LA32-NEXT: ld.w $a4, $sp, 01220; LA32-NEXT: bne $a0, $zero, .LBB23_71221; LA32-NEXT: .LBB23_2: # %atomicrmw.start1222; LA32-NEXT: # =>This Inner Loop Header: Depth=11223; LA32-NEXT: beq $a5, $s0, .LBB23_41224; LA32-NEXT: # %bb.3: # %atomicrmw.start1225; LA32-NEXT: # in Loop: Header=BB23_2 Depth=11226; LA32-NEXT: sltu $a0, $s0, $a51227; LA32-NEXT: b .LBB23_51228; LA32-NEXT: .p2align 4, , 161229; LA32-NEXT: .LBB23_4: # in Loop: Header=BB23_2 Depth=11230; LA32-NEXT: sltu $a0, $s1, $a41231; LA32-NEXT: .LBB23_5: # %atomicrmw.start1232; LA32-NEXT: # in Loop: Header=BB23_2 Depth=11233; LA32-NEXT: xori $a0, $a0, 11234; LA32-NEXT: move $a2, $a41235; LA32-NEXT: move $a3, $a51236; LA32-NEXT: bne $a0, $zero, .LBB23_11237; LA32-NEXT: # %bb.6: # %atomicrmw.start1238; LA32-NEXT: # in Loop: Header=BB23_2 Depth=11239; LA32-NEXT: move $a2, $s11240; LA32-NEXT: move $a3, $s01241; LA32-NEXT: b .LBB23_11242; LA32-NEXT: .LBB23_7: # %atomicrmw.end1243; LA32-NEXT: move $a0, $a41244; LA32-NEXT: move $a1, $a51245; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload1246; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload1247; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload1248; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload1249; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload1250; LA32-NEXT: addi.w $sp, $sp, 321251; LA32-NEXT: ret1252;1253; LA64-LABEL: atomicrmw_umin_i64_release:1254; LA64: # %bb.0:1255; LA64-NEXT: ammin_db.du $a2, $a1, $a01256; LA64-NEXT: move $a0, $a21257; LA64-NEXT: ret1258 %1 = atomicrmw umin ptr %a, i64 %b release1259 ret i64 %11260}1261 1262define i8 @atomicrmw_max_i8_release(ptr %a, i8 %b) nounwind {1263; LA32-LABEL: atomicrmw_max_i8_release:1264; LA32: # %bb.0:1265; LA32-NEXT: addi.w $a2, $zero, -41266; LA32-NEXT: and $a2, $a0, $a21267; LA32-NEXT: slli.w $a0, $a0, 31268; LA32-NEXT: andi $a3, $a0, 241269; LA32-NEXT: ori $a4, $zero, 2551270; LA32-NEXT: sll.w $a4, $a4, $a01271; LA32-NEXT: slli.w $a1, $a1, 241272; LA32-NEXT: srai.w $a1, $a1, 241273; LA32-NEXT: sll.w $a1, $a1, $a01274; LA32-NEXT: xori $a3, $a3, 241275; LA32-NEXT: .LBB24_1: # =>This Inner Loop Header: Depth=11276; LA32-NEXT: ll.w $a5, $a2, 01277; LA32-NEXT: and $a7, $a5, $a41278; LA32-NEXT: move $a6, $a51279; LA32-NEXT: sll.w $a7, $a7, $a31280; LA32-NEXT: sra.w $a7, $a7, $a31281; LA32-NEXT: bge $a7, $a1, .LBB24_31282; LA32-NEXT: # %bb.2: # in Loop: Header=BB24_1 Depth=11283; LA32-NEXT: xor $a6, $a5, $a11284; LA32-NEXT: and $a6, $a6, $a41285; LA32-NEXT: xor $a6, $a5, $a61286; LA32-NEXT: .LBB24_3: # in Loop: Header=BB24_1 Depth=11287; LA32-NEXT: sc.w $a6, $a2, 01288; LA32-NEXT: beq $a6, $zero, .LBB24_11289; LA32-NEXT: # %bb.4:1290; LA32-NEXT: srl.w $a0, $a5, $a01291; LA32-NEXT: ret1292;1293; LA64-LABEL: atomicrmw_max_i8_release:1294; LA64: # %bb.0:1295; LA64-NEXT: slli.d $a2, $a0, 31296; LA64-NEXT: bstrins.d $a0, $zero, 1, 01297; LA64-NEXT: andi $a3, $a2, 241298; LA64-NEXT: ori $a4, $zero, 2551299; LA64-NEXT: sll.w $a4, $a4, $a21300; LA64-NEXT: ext.w.b $a1, $a11301; LA64-NEXT: sll.w $a1, $a1, $a21302; LA64-NEXT: xori $a3, $a3, 561303; LA64-NEXT: .LBB24_1: # =>This Inner Loop Header: Depth=11304; LA64-NEXT: ll.w $a5, $a0, 01305; LA64-NEXT: and $a7, $a5, $a41306; LA64-NEXT: move $a6, $a51307; LA64-NEXT: sll.w $a7, $a7, $a31308; LA64-NEXT: sra.w $a7, $a7, $a31309; LA64-NEXT: bge $a7, $a1, .LBB24_31310; LA64-NEXT: # %bb.2: # in Loop: Header=BB24_1 Depth=11311; LA64-NEXT: xor $a6, $a5, $a11312; LA64-NEXT: and $a6, $a6, $a41313; LA64-NEXT: xor $a6, $a5, $a61314; LA64-NEXT: .LBB24_3: # in Loop: Header=BB24_1 Depth=11315; LA64-NEXT: sc.w $a6, $a0, 01316; LA64-NEXT: beq $a6, $zero, .LBB24_11317; LA64-NEXT: # %bb.4:1318; LA64-NEXT: srl.w $a0, $a5, $a21319; LA64-NEXT: ret1320 %1 = atomicrmw max ptr %a, i8 %b release1321 ret i8 %11322}1323 1324define i16 @atomicrmw_max_i16_release(ptr %a, i16 %b) nounwind {1325; LA32-LABEL: atomicrmw_max_i16_release:1326; LA32: # %bb.0:1327; LA32-NEXT: addi.w $a2, $zero, -41328; LA32-NEXT: and $a2, $a0, $a21329; LA32-NEXT: slli.w $a0, $a0, 31330; LA32-NEXT: andi $a3, $a0, 241331; LA32-NEXT: lu12i.w $a4, 151332; LA32-NEXT: ori $a4, $a4, 40951333; LA32-NEXT: sll.w $a4, $a4, $a01334; LA32-NEXT: slli.w $a1, $a1, 161335; LA32-NEXT: srai.w $a1, $a1, 161336; LA32-NEXT: sll.w $a1, $a1, $a01337; LA32-NEXT: ori $a5, $zero, 161338; LA32-NEXT: sub.w $a3, $a5, $a31339; LA32-NEXT: .LBB25_1: # =>This Inner Loop Header: Depth=11340; LA32-NEXT: ll.w $a5, $a2, 01341; LA32-NEXT: and $a7, $a5, $a41342; LA32-NEXT: move $a6, $a51343; LA32-NEXT: sll.w $a7, $a7, $a31344; LA32-NEXT: sra.w $a7, $a7, $a31345; LA32-NEXT: bge $a7, $a1, .LBB25_31346; LA32-NEXT: # %bb.2: # in Loop: Header=BB25_1 Depth=11347; LA32-NEXT: xor $a6, $a5, $a11348; LA32-NEXT: and $a6, $a6, $a41349; LA32-NEXT: xor $a6, $a5, $a61350; LA32-NEXT: .LBB25_3: # in Loop: Header=BB25_1 Depth=11351; LA32-NEXT: sc.w $a6, $a2, 01352; LA32-NEXT: beq $a6, $zero, .LBB25_11353; LA32-NEXT: # %bb.4:1354; LA32-NEXT: srl.w $a0, $a5, $a01355; LA32-NEXT: ret1356;1357; LA64-LABEL: atomicrmw_max_i16_release:1358; LA64: # %bb.0:1359; LA64-NEXT: slli.d $a2, $a0, 31360; LA64-NEXT: bstrins.d $a0, $zero, 1, 01361; LA64-NEXT: andi $a3, $a2, 241362; LA64-NEXT: lu12i.w $a4, 151363; LA64-NEXT: ori $a4, $a4, 40951364; LA64-NEXT: sll.w $a4, $a4, $a21365; LA64-NEXT: ext.w.h $a1, $a11366; LA64-NEXT: sll.w $a1, $a1, $a21367; LA64-NEXT: ori $a5, $zero, 481368; LA64-NEXT: sub.d $a3, $a5, $a31369; LA64-NEXT: .LBB25_1: # =>This Inner Loop Header: Depth=11370; LA64-NEXT: ll.w $a5, $a0, 01371; LA64-NEXT: and $a7, $a5, $a41372; LA64-NEXT: move $a6, $a51373; LA64-NEXT: sll.w $a7, $a7, $a31374; LA64-NEXT: sra.w $a7, $a7, $a31375; LA64-NEXT: bge $a7, $a1, .LBB25_31376; LA64-NEXT: # %bb.2: # in Loop: Header=BB25_1 Depth=11377; LA64-NEXT: xor $a6, $a5, $a11378; LA64-NEXT: and $a6, $a6, $a41379; LA64-NEXT: xor $a6, $a5, $a61380; LA64-NEXT: .LBB25_3: # in Loop: Header=BB25_1 Depth=11381; LA64-NEXT: sc.w $a6, $a0, 01382; LA64-NEXT: beq $a6, $zero, .LBB25_11383; LA64-NEXT: # %bb.4:1384; LA64-NEXT: srl.w $a0, $a5, $a21385; LA64-NEXT: ret1386 %1 = atomicrmw max ptr %a, i16 %b release1387 ret i16 %11388}1389 1390define i32 @atomicrmw_max_i32_release(ptr %a, i32 %b) nounwind {1391; LA32-LABEL: atomicrmw_max_i32_release:1392; LA32: # %bb.0:1393; LA32-NEXT: .LBB26_1: # =>This Inner Loop Header: Depth=11394; LA32-NEXT: ll.w $a2, $a0, 01395; LA32-NEXT: move $a3, $a21396; LA32-NEXT: bge $a2, $a1, .LBB26_31397; LA32-NEXT: # %bb.2: # in Loop: Header=BB26_1 Depth=11398; LA32-NEXT: move $a3, $a11399; LA32-NEXT: .LBB26_3: # in Loop: Header=BB26_1 Depth=11400; LA32-NEXT: sc.w $a3, $a0, 01401; LA32-NEXT: beq $a3, $zero, .LBB26_11402; LA32-NEXT: # %bb.4:1403; LA32-NEXT: move $a0, $a21404; LA32-NEXT: ret1405;1406; LA64-LABEL: atomicrmw_max_i32_release:1407; LA64: # %bb.0:1408; LA64-NEXT: ammax_db.w $a2, $a1, $a01409; LA64-NEXT: move $a0, $a21410; LA64-NEXT: ret1411 %1 = atomicrmw max ptr %a, i32 %b release1412 ret i32 %11413}1414 1415define i64 @atomicrmw_max_i64_release(ptr %a, i64 %b) nounwind {1416; LA32-LABEL: atomicrmw_max_i64_release:1417; LA32: # %bb.0:1418; LA32-NEXT: addi.w $sp, $sp, -321419; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill1420; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill1421; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill1422; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill1423; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill1424; LA32-NEXT: move $fp, $a01425; LA32-NEXT: ld.w $a5, $a0, 41426; LA32-NEXT: ld.w $a4, $a0, 01427; LA32-NEXT: move $s0, $a21428; LA32-NEXT: move $s1, $a11429; LA32-NEXT: addi.w $s2, $sp, 01430; LA32-NEXT: b .LBB27_21431; LA32-NEXT: .p2align 4, , 161432; LA32-NEXT: .LBB27_1: # %atomicrmw.start1433; LA32-NEXT: # in Loop: Header=BB27_2 Depth=11434; LA32-NEXT: st.w $a4, $sp, 01435; LA32-NEXT: st.w $a5, $sp, 41436; LA32-NEXT: ori $a4, $zero, 31437; LA32-NEXT: move $a0, $fp1438; LA32-NEXT: move $a1, $s21439; LA32-NEXT: move $a5, $zero1440; LA32-NEXT: bl __atomic_compare_exchange_81441; LA32-NEXT: ld.w $a5, $sp, 41442; LA32-NEXT: ld.w $a4, $sp, 01443; LA32-NEXT: bne $a0, $zero, .LBB27_71444; LA32-NEXT: .LBB27_2: # %atomicrmw.start1445; LA32-NEXT: # =>This Inner Loop Header: Depth=11446; LA32-NEXT: beq $a5, $s0, .LBB27_41447; LA32-NEXT: # %bb.3: # %atomicrmw.start1448; LA32-NEXT: # in Loop: Header=BB27_2 Depth=11449; LA32-NEXT: slt $a0, $s0, $a51450; LA32-NEXT: b .LBB27_51451; LA32-NEXT: .p2align 4, , 161452; LA32-NEXT: .LBB27_4: # in Loop: Header=BB27_2 Depth=11453; LA32-NEXT: sltu $a0, $s1, $a41454; LA32-NEXT: .LBB27_5: # %atomicrmw.start1455; LA32-NEXT: # in Loop: Header=BB27_2 Depth=11456; LA32-NEXT: move $a2, $a41457; LA32-NEXT: move $a3, $a51458; LA32-NEXT: bne $a0, $zero, .LBB27_11459; LA32-NEXT: # %bb.6: # %atomicrmw.start1460; LA32-NEXT: # in Loop: Header=BB27_2 Depth=11461; LA32-NEXT: move $a2, $s11462; LA32-NEXT: move $a3, $s01463; LA32-NEXT: b .LBB27_11464; LA32-NEXT: .LBB27_7: # %atomicrmw.end1465; LA32-NEXT: move $a0, $a41466; LA32-NEXT: move $a1, $a51467; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload1468; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload1469; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload1470; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload1471; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload1472; LA32-NEXT: addi.w $sp, $sp, 321473; LA32-NEXT: ret1474;1475; LA64-LABEL: atomicrmw_max_i64_release:1476; LA64: # %bb.0:1477; LA64-NEXT: ammax_db.d $a2, $a1, $a01478; LA64-NEXT: move $a0, $a21479; LA64-NEXT: ret1480 %1 = atomicrmw max ptr %a, i64 %b release1481 ret i64 %11482}1483 1484define i8 @atomicrmw_min_i8_release(ptr %a, i8 %b) nounwind {1485; LA32-LABEL: atomicrmw_min_i8_release:1486; LA32: # %bb.0:1487; LA32-NEXT: addi.w $a2, $zero, -41488; LA32-NEXT: and $a2, $a0, $a21489; LA32-NEXT: slli.w $a0, $a0, 31490; LA32-NEXT: andi $a3, $a0, 241491; LA32-NEXT: ori $a4, $zero, 2551492; LA32-NEXT: sll.w $a4, $a4, $a01493; LA32-NEXT: slli.w $a1, $a1, 241494; LA32-NEXT: srai.w $a1, $a1, 241495; LA32-NEXT: sll.w $a1, $a1, $a01496; LA32-NEXT: xori $a3, $a3, 241497; LA32-NEXT: .LBB28_1: # =>This Inner Loop Header: Depth=11498; LA32-NEXT: ll.w $a5, $a2, 01499; LA32-NEXT: and $a7, $a5, $a41500; LA32-NEXT: move $a6, $a51501; LA32-NEXT: sll.w $a7, $a7, $a31502; LA32-NEXT: sra.w $a7, $a7, $a31503; LA32-NEXT: bge $a1, $a7, .LBB28_31504; LA32-NEXT: # %bb.2: # in Loop: Header=BB28_1 Depth=11505; LA32-NEXT: xor $a6, $a5, $a11506; LA32-NEXT: and $a6, $a6, $a41507; LA32-NEXT: xor $a6, $a5, $a61508; LA32-NEXT: .LBB28_3: # in Loop: Header=BB28_1 Depth=11509; LA32-NEXT: sc.w $a6, $a2, 01510; LA32-NEXT: beq $a6, $zero, .LBB28_11511; LA32-NEXT: # %bb.4:1512; LA32-NEXT: srl.w $a0, $a5, $a01513; LA32-NEXT: ret1514;1515; LA64-LABEL: atomicrmw_min_i8_release:1516; LA64: # %bb.0:1517; LA64-NEXT: slli.d $a2, $a0, 31518; LA64-NEXT: bstrins.d $a0, $zero, 1, 01519; LA64-NEXT: andi $a3, $a2, 241520; LA64-NEXT: ori $a4, $zero, 2551521; LA64-NEXT: sll.w $a4, $a4, $a21522; LA64-NEXT: ext.w.b $a1, $a11523; LA64-NEXT: sll.w $a1, $a1, $a21524; LA64-NEXT: xori $a3, $a3, 561525; LA64-NEXT: .LBB28_1: # =>This Inner Loop Header: Depth=11526; LA64-NEXT: ll.w $a5, $a0, 01527; LA64-NEXT: and $a7, $a5, $a41528; LA64-NEXT: move $a6, $a51529; LA64-NEXT: sll.w $a7, $a7, $a31530; LA64-NEXT: sra.w $a7, $a7, $a31531; LA64-NEXT: bge $a1, $a7, .LBB28_31532; LA64-NEXT: # %bb.2: # in Loop: Header=BB28_1 Depth=11533; LA64-NEXT: xor $a6, $a5, $a11534; LA64-NEXT: and $a6, $a6, $a41535; LA64-NEXT: xor $a6, $a5, $a61536; LA64-NEXT: .LBB28_3: # in Loop: Header=BB28_1 Depth=11537; LA64-NEXT: sc.w $a6, $a0, 01538; LA64-NEXT: beq $a6, $zero, .LBB28_11539; LA64-NEXT: # %bb.4:1540; LA64-NEXT: srl.w $a0, $a5, $a21541; LA64-NEXT: ret1542 %1 = atomicrmw min ptr %a, i8 %b release1543 ret i8 %11544}1545 1546define i16 @atomicrmw_min_i16_release(ptr %a, i16 %b) nounwind {1547; LA32-LABEL: atomicrmw_min_i16_release:1548; LA32: # %bb.0:1549; LA32-NEXT: addi.w $a2, $zero, -41550; LA32-NEXT: and $a2, $a0, $a21551; LA32-NEXT: slli.w $a0, $a0, 31552; LA32-NEXT: andi $a3, $a0, 241553; LA32-NEXT: lu12i.w $a4, 151554; LA32-NEXT: ori $a4, $a4, 40951555; LA32-NEXT: sll.w $a4, $a4, $a01556; LA32-NEXT: slli.w $a1, $a1, 161557; LA32-NEXT: srai.w $a1, $a1, 161558; LA32-NEXT: sll.w $a1, $a1, $a01559; LA32-NEXT: ori $a5, $zero, 161560; LA32-NEXT: sub.w $a3, $a5, $a31561; LA32-NEXT: .LBB29_1: # =>This Inner Loop Header: Depth=11562; LA32-NEXT: ll.w $a5, $a2, 01563; LA32-NEXT: and $a7, $a5, $a41564; LA32-NEXT: move $a6, $a51565; LA32-NEXT: sll.w $a7, $a7, $a31566; LA32-NEXT: sra.w $a7, $a7, $a31567; LA32-NEXT: bge $a1, $a7, .LBB29_31568; LA32-NEXT: # %bb.2: # in Loop: Header=BB29_1 Depth=11569; LA32-NEXT: xor $a6, $a5, $a11570; LA32-NEXT: and $a6, $a6, $a41571; LA32-NEXT: xor $a6, $a5, $a61572; LA32-NEXT: .LBB29_3: # in Loop: Header=BB29_1 Depth=11573; LA32-NEXT: sc.w $a6, $a2, 01574; LA32-NEXT: beq $a6, $zero, .LBB29_11575; LA32-NEXT: # %bb.4:1576; LA32-NEXT: srl.w $a0, $a5, $a01577; LA32-NEXT: ret1578;1579; LA64-LABEL: atomicrmw_min_i16_release:1580; LA64: # %bb.0:1581; LA64-NEXT: slli.d $a2, $a0, 31582; LA64-NEXT: bstrins.d $a0, $zero, 1, 01583; LA64-NEXT: andi $a3, $a2, 241584; LA64-NEXT: lu12i.w $a4, 151585; LA64-NEXT: ori $a4, $a4, 40951586; LA64-NEXT: sll.w $a4, $a4, $a21587; LA64-NEXT: ext.w.h $a1, $a11588; LA64-NEXT: sll.w $a1, $a1, $a21589; LA64-NEXT: ori $a5, $zero, 481590; LA64-NEXT: sub.d $a3, $a5, $a31591; LA64-NEXT: .LBB29_1: # =>This Inner Loop Header: Depth=11592; LA64-NEXT: ll.w $a5, $a0, 01593; LA64-NEXT: and $a7, $a5, $a41594; LA64-NEXT: move $a6, $a51595; LA64-NEXT: sll.w $a7, $a7, $a31596; LA64-NEXT: sra.w $a7, $a7, $a31597; LA64-NEXT: bge $a1, $a7, .LBB29_31598; LA64-NEXT: # %bb.2: # in Loop: Header=BB29_1 Depth=11599; LA64-NEXT: xor $a6, $a5, $a11600; LA64-NEXT: and $a6, $a6, $a41601; LA64-NEXT: xor $a6, $a5, $a61602; LA64-NEXT: .LBB29_3: # in Loop: Header=BB29_1 Depth=11603; LA64-NEXT: sc.w $a6, $a0, 01604; LA64-NEXT: beq $a6, $zero, .LBB29_11605; LA64-NEXT: # %bb.4:1606; LA64-NEXT: srl.w $a0, $a5, $a21607; LA64-NEXT: ret1608 %1 = atomicrmw min ptr %a, i16 %b release1609 ret i16 %11610}1611 1612define i32 @atomicrmw_min_i32_release(ptr %a, i32 %b) nounwind {1613; LA32-LABEL: atomicrmw_min_i32_release:1614; LA32: # %bb.0:1615; LA32-NEXT: .LBB30_1: # =>This Inner Loop Header: Depth=11616; LA32-NEXT: ll.w $a2, $a0, 01617; LA32-NEXT: move $a3, $a21618; LA32-NEXT: bge $a1, $a2, .LBB30_31619; LA32-NEXT: # %bb.2: # in Loop: Header=BB30_1 Depth=11620; LA32-NEXT: move $a3, $a11621; LA32-NEXT: .LBB30_3: # in Loop: Header=BB30_1 Depth=11622; LA32-NEXT: sc.w $a3, $a0, 01623; LA32-NEXT: beq $a3, $zero, .LBB30_11624; LA32-NEXT: # %bb.4:1625; LA32-NEXT: move $a0, $a21626; LA32-NEXT: ret1627;1628; LA64-LABEL: atomicrmw_min_i32_release:1629; LA64: # %bb.0:1630; LA64-NEXT: ammin_db.w $a2, $a1, $a01631; LA64-NEXT: move $a0, $a21632; LA64-NEXT: ret1633 %1 = atomicrmw min ptr %a, i32 %b release1634 ret i32 %11635}1636 1637define i64 @atomicrmw_min_i64_release(ptr %a, i64 %b) nounwind {1638; LA32-LABEL: atomicrmw_min_i64_release:1639; LA32: # %bb.0:1640; LA32-NEXT: addi.w $sp, $sp, -321641; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill1642; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill1643; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill1644; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill1645; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill1646; LA32-NEXT: move $fp, $a01647; LA32-NEXT: ld.w $a5, $a0, 41648; LA32-NEXT: ld.w $a4, $a0, 01649; LA32-NEXT: move $s0, $a21650; LA32-NEXT: move $s1, $a11651; LA32-NEXT: addi.w $s2, $sp, 01652; LA32-NEXT: b .LBB31_21653; LA32-NEXT: .p2align 4, , 161654; LA32-NEXT: .LBB31_1: # %atomicrmw.start1655; LA32-NEXT: # in Loop: Header=BB31_2 Depth=11656; LA32-NEXT: st.w $a4, $sp, 01657; LA32-NEXT: st.w $a5, $sp, 41658; LA32-NEXT: ori $a4, $zero, 31659; LA32-NEXT: move $a0, $fp1660; LA32-NEXT: move $a1, $s21661; LA32-NEXT: move $a5, $zero1662; LA32-NEXT: bl __atomic_compare_exchange_81663; LA32-NEXT: ld.w $a5, $sp, 41664; LA32-NEXT: ld.w $a4, $sp, 01665; LA32-NEXT: bne $a0, $zero, .LBB31_71666; LA32-NEXT: .LBB31_2: # %atomicrmw.start1667; LA32-NEXT: # =>This Inner Loop Header: Depth=11668; LA32-NEXT: beq $a5, $s0, .LBB31_41669; LA32-NEXT: # %bb.3: # %atomicrmw.start1670; LA32-NEXT: # in Loop: Header=BB31_2 Depth=11671; LA32-NEXT: slt $a0, $s0, $a51672; LA32-NEXT: b .LBB31_51673; LA32-NEXT: .p2align 4, , 161674; LA32-NEXT: .LBB31_4: # in Loop: Header=BB31_2 Depth=11675; LA32-NEXT: sltu $a0, $s1, $a41676; LA32-NEXT: .LBB31_5: # %atomicrmw.start1677; LA32-NEXT: # in Loop: Header=BB31_2 Depth=11678; LA32-NEXT: xori $a0, $a0, 11679; LA32-NEXT: move $a2, $a41680; LA32-NEXT: move $a3, $a51681; LA32-NEXT: bne $a0, $zero, .LBB31_11682; LA32-NEXT: # %bb.6: # %atomicrmw.start1683; LA32-NEXT: # in Loop: Header=BB31_2 Depth=11684; LA32-NEXT: move $a2, $s11685; LA32-NEXT: move $a3, $s01686; LA32-NEXT: b .LBB31_11687; LA32-NEXT: .LBB31_7: # %atomicrmw.end1688; LA32-NEXT: move $a0, $a41689; LA32-NEXT: move $a1, $a51690; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload1691; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload1692; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload1693; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload1694; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload1695; LA32-NEXT: addi.w $sp, $sp, 321696; LA32-NEXT: ret1697;1698; LA64-LABEL: atomicrmw_min_i64_release:1699; LA64: # %bb.0:1700; LA64-NEXT: ammin_db.d $a2, $a1, $a01701; LA64-NEXT: move $a0, $a21702; LA64-NEXT: ret1703 %1 = atomicrmw min ptr %a, i64 %b release1704 ret i64 %11705}1706 1707define i8 @atomicrmw_umax_i8_acq_rel(ptr %a, i8 %b) nounwind {1708; LA32-LABEL: atomicrmw_umax_i8_acq_rel:1709; LA32: # %bb.0:1710; LA32-NEXT: addi.w $a2, $zero, -41711; LA32-NEXT: and $a2, $a0, $a21712; LA32-NEXT: slli.w $a0, $a0, 31713; LA32-NEXT: ori $a3, $zero, 2551714; LA32-NEXT: sll.w $a3, $a3, $a01715; LA32-NEXT: andi $a1, $a1, 2551716; LA32-NEXT: sll.w $a1, $a1, $a01717; LA32-NEXT: .LBB32_1: # =>This Inner Loop Header: Depth=11718; LA32-NEXT: ll.w $a4, $a2, 01719; LA32-NEXT: and $a6, $a4, $a31720; LA32-NEXT: move $a5, $a41721; LA32-NEXT: bgeu $a6, $a1, .LBB32_31722; LA32-NEXT: # %bb.2: # in Loop: Header=BB32_1 Depth=11723; LA32-NEXT: xor $a5, $a4, $a11724; LA32-NEXT: and $a5, $a5, $a31725; LA32-NEXT: xor $a5, $a4, $a51726; LA32-NEXT: .LBB32_3: # in Loop: Header=BB32_1 Depth=11727; LA32-NEXT: sc.w $a5, $a2, 01728; LA32-NEXT: beq $a5, $zero, .LBB32_11729; LA32-NEXT: # %bb.4:1730; LA32-NEXT: srl.w $a0, $a4, $a01731; LA32-NEXT: ret1732;1733; LA64-LABEL: atomicrmw_umax_i8_acq_rel:1734; LA64: # %bb.0:1735; LA64-NEXT: slli.d $a2, $a0, 31736; LA64-NEXT: bstrins.d $a0, $zero, 1, 01737; LA64-NEXT: ori $a3, $zero, 2551738; LA64-NEXT: sll.w $a3, $a3, $a21739; LA64-NEXT: andi $a1, $a1, 2551740; LA64-NEXT: sll.w $a1, $a1, $a21741; LA64-NEXT: .LBB32_1: # =>This Inner Loop Header: Depth=11742; LA64-NEXT: ll.w $a4, $a0, 01743; LA64-NEXT: and $a6, $a4, $a31744; LA64-NEXT: move $a5, $a41745; LA64-NEXT: bgeu $a6, $a1, .LBB32_31746; LA64-NEXT: # %bb.2: # in Loop: Header=BB32_1 Depth=11747; LA64-NEXT: xor $a5, $a4, $a11748; LA64-NEXT: and $a5, $a5, $a31749; LA64-NEXT: xor $a5, $a4, $a51750; LA64-NEXT: .LBB32_3: # in Loop: Header=BB32_1 Depth=11751; LA64-NEXT: sc.w $a5, $a0, 01752; LA64-NEXT: beq $a5, $zero, .LBB32_11753; LA64-NEXT: # %bb.4:1754; LA64-NEXT: srl.w $a0, $a4, $a21755; LA64-NEXT: ret1756 %1 = atomicrmw umax ptr %a, i8 %b acq_rel1757 ret i8 %11758}1759 1760define i16 @atomicrmw_umax_i16_acq_rel(ptr %a, i16 %b) nounwind {1761; LA32-LABEL: atomicrmw_umax_i16_acq_rel:1762; LA32: # %bb.0:1763; LA32-NEXT: addi.w $a2, $zero, -41764; LA32-NEXT: and $a2, $a0, $a21765; LA32-NEXT: slli.w $a0, $a0, 31766; LA32-NEXT: lu12i.w $a3, 151767; LA32-NEXT: ori $a3, $a3, 40951768; LA32-NEXT: sll.w $a4, $a3, $a01769; LA32-NEXT: and $a1, $a1, $a31770; LA32-NEXT: sll.w $a1, $a1, $a01771; LA32-NEXT: .LBB33_1: # =>This Inner Loop Header: Depth=11772; LA32-NEXT: ll.w $a3, $a2, 01773; LA32-NEXT: and $a6, $a3, $a41774; LA32-NEXT: move $a5, $a31775; LA32-NEXT: bgeu $a6, $a1, .LBB33_31776; LA32-NEXT: # %bb.2: # in Loop: Header=BB33_1 Depth=11777; LA32-NEXT: xor $a5, $a3, $a11778; LA32-NEXT: and $a5, $a5, $a41779; LA32-NEXT: xor $a5, $a3, $a51780; LA32-NEXT: .LBB33_3: # in Loop: Header=BB33_1 Depth=11781; LA32-NEXT: sc.w $a5, $a2, 01782; LA32-NEXT: beq $a5, $zero, .LBB33_11783; LA32-NEXT: # %bb.4:1784; LA32-NEXT: srl.w $a0, $a3, $a01785; LA32-NEXT: ret1786;1787; LA64-LABEL: atomicrmw_umax_i16_acq_rel:1788; LA64: # %bb.0:1789; LA64-NEXT: slli.d $a2, $a0, 31790; LA64-NEXT: bstrins.d $a0, $zero, 1, 01791; LA64-NEXT: lu12i.w $a3, 151792; LA64-NEXT: ori $a3, $a3, 40951793; LA64-NEXT: sll.w $a3, $a3, $a21794; LA64-NEXT: bstrpick.d $a1, $a1, 15, 01795; LA64-NEXT: sll.w $a1, $a1, $a21796; LA64-NEXT: .LBB33_1: # =>This Inner Loop Header: Depth=11797; LA64-NEXT: ll.w $a4, $a0, 01798; LA64-NEXT: and $a6, $a4, $a31799; LA64-NEXT: move $a5, $a41800; LA64-NEXT: bgeu $a6, $a1, .LBB33_31801; LA64-NEXT: # %bb.2: # in Loop: Header=BB33_1 Depth=11802; LA64-NEXT: xor $a5, $a4, $a11803; LA64-NEXT: and $a5, $a5, $a31804; LA64-NEXT: xor $a5, $a4, $a51805; LA64-NEXT: .LBB33_3: # in Loop: Header=BB33_1 Depth=11806; LA64-NEXT: sc.w $a5, $a0, 01807; LA64-NEXT: beq $a5, $zero, .LBB33_11808; LA64-NEXT: # %bb.4:1809; LA64-NEXT: srl.w $a0, $a4, $a21810; LA64-NEXT: ret1811 %1 = atomicrmw umax ptr %a, i16 %b acq_rel1812 ret i16 %11813}1814 1815define i32 @atomicrmw_umax_i32_acq_rel(ptr %a, i32 %b) nounwind {1816; LA32-LABEL: atomicrmw_umax_i32_acq_rel:1817; LA32: # %bb.0:1818; LA32-NEXT: .LBB34_1: # =>This Inner Loop Header: Depth=11819; LA32-NEXT: ll.w $a2, $a0, 01820; LA32-NEXT: move $a3, $a21821; LA32-NEXT: bgeu $a2, $a1, .LBB34_31822; LA32-NEXT: # %bb.2: # in Loop: Header=BB34_1 Depth=11823; LA32-NEXT: move $a3, $a11824; LA32-NEXT: .LBB34_3: # in Loop: Header=BB34_1 Depth=11825; LA32-NEXT: sc.w $a3, $a0, 01826; LA32-NEXT: beq $a3, $zero, .LBB34_11827; LA32-NEXT: # %bb.4:1828; LA32-NEXT: move $a0, $a21829; LA32-NEXT: ret1830;1831; LA64-LABEL: atomicrmw_umax_i32_acq_rel:1832; LA64: # %bb.0:1833; LA64-NEXT: ammax_db.wu $a2, $a1, $a01834; LA64-NEXT: move $a0, $a21835; LA64-NEXT: ret1836 %1 = atomicrmw umax ptr %a, i32 %b acq_rel1837 ret i32 %11838}1839 1840define i64 @atomicrmw_umax_i64_acq_rel(ptr %a, i64 %b) nounwind {1841; LA32-LABEL: atomicrmw_umax_i64_acq_rel:1842; LA32: # %bb.0:1843; LA32-NEXT: addi.w $sp, $sp, -321844; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill1845; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill1846; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill1847; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill1848; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill1849; LA32-NEXT: move $fp, $a01850; LA32-NEXT: ld.w $a5, $a0, 41851; LA32-NEXT: ld.w $a4, $a0, 01852; LA32-NEXT: move $s0, $a21853; LA32-NEXT: move $s1, $a11854; LA32-NEXT: addi.w $s2, $sp, 01855; LA32-NEXT: b .LBB35_21856; LA32-NEXT: .p2align 4, , 161857; LA32-NEXT: .LBB35_1: # %atomicrmw.start1858; LA32-NEXT: # in Loop: Header=BB35_2 Depth=11859; LA32-NEXT: st.w $a4, $sp, 01860; LA32-NEXT: st.w $a5, $sp, 41861; LA32-NEXT: ori $a4, $zero, 41862; LA32-NEXT: ori $a5, $zero, 21863; LA32-NEXT: move $a0, $fp1864; LA32-NEXT: move $a1, $s21865; LA32-NEXT: bl __atomic_compare_exchange_81866; LA32-NEXT: ld.w $a5, $sp, 41867; LA32-NEXT: ld.w $a4, $sp, 01868; LA32-NEXT: bne $a0, $zero, .LBB35_71869; LA32-NEXT: .LBB35_2: # %atomicrmw.start1870; LA32-NEXT: # =>This Inner Loop Header: Depth=11871; LA32-NEXT: beq $a5, $s0, .LBB35_41872; LA32-NEXT: # %bb.3: # %atomicrmw.start1873; LA32-NEXT: # in Loop: Header=BB35_2 Depth=11874; LA32-NEXT: sltu $a0, $s0, $a51875; LA32-NEXT: b .LBB35_51876; LA32-NEXT: .p2align 4, , 161877; LA32-NEXT: .LBB35_4: # in Loop: Header=BB35_2 Depth=11878; LA32-NEXT: sltu $a0, $s1, $a41879; LA32-NEXT: .LBB35_5: # %atomicrmw.start1880; LA32-NEXT: # in Loop: Header=BB35_2 Depth=11881; LA32-NEXT: move $a2, $a41882; LA32-NEXT: move $a3, $a51883; LA32-NEXT: bne $a0, $zero, .LBB35_11884; LA32-NEXT: # %bb.6: # %atomicrmw.start1885; LA32-NEXT: # in Loop: Header=BB35_2 Depth=11886; LA32-NEXT: move $a2, $s11887; LA32-NEXT: move $a3, $s01888; LA32-NEXT: b .LBB35_11889; LA32-NEXT: .LBB35_7: # %atomicrmw.end1890; LA32-NEXT: move $a0, $a41891; LA32-NEXT: move $a1, $a51892; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload1893; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload1894; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload1895; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload1896; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload1897; LA32-NEXT: addi.w $sp, $sp, 321898; LA32-NEXT: ret1899;1900; LA64-LABEL: atomicrmw_umax_i64_acq_rel:1901; LA64: # %bb.0:1902; LA64-NEXT: ammax_db.du $a2, $a1, $a01903; LA64-NEXT: move $a0, $a21904; LA64-NEXT: ret1905 %1 = atomicrmw umax ptr %a, i64 %b acq_rel1906 ret i64 %11907}1908 1909define i8 @atomicrmw_umin_i8_acq_rel(ptr %a, i8 %b) nounwind {1910; LA32-LABEL: atomicrmw_umin_i8_acq_rel:1911; LA32: # %bb.0:1912; LA32-NEXT: addi.w $a2, $zero, -41913; LA32-NEXT: and $a2, $a0, $a21914; LA32-NEXT: slli.w $a0, $a0, 31915; LA32-NEXT: ori $a3, $zero, 2551916; LA32-NEXT: sll.w $a3, $a3, $a01917; LA32-NEXT: andi $a1, $a1, 2551918; LA32-NEXT: sll.w $a1, $a1, $a01919; LA32-NEXT: .LBB36_1: # =>This Inner Loop Header: Depth=11920; LA32-NEXT: ll.w $a4, $a2, 01921; LA32-NEXT: and $a6, $a4, $a31922; LA32-NEXT: move $a5, $a41923; LA32-NEXT: bgeu $a1, $a6, .LBB36_31924; LA32-NEXT: # %bb.2: # in Loop: Header=BB36_1 Depth=11925; LA32-NEXT: xor $a5, $a4, $a11926; LA32-NEXT: and $a5, $a5, $a31927; LA32-NEXT: xor $a5, $a4, $a51928; LA32-NEXT: .LBB36_3: # in Loop: Header=BB36_1 Depth=11929; LA32-NEXT: sc.w $a5, $a2, 01930; LA32-NEXT: beq $a5, $zero, .LBB36_11931; LA32-NEXT: # %bb.4:1932; LA32-NEXT: srl.w $a0, $a4, $a01933; LA32-NEXT: ret1934;1935; LA64-LABEL: atomicrmw_umin_i8_acq_rel:1936; LA64: # %bb.0:1937; LA64-NEXT: slli.d $a2, $a0, 31938; LA64-NEXT: bstrins.d $a0, $zero, 1, 01939; LA64-NEXT: ori $a3, $zero, 2551940; LA64-NEXT: sll.w $a3, $a3, $a21941; LA64-NEXT: andi $a1, $a1, 2551942; LA64-NEXT: sll.w $a1, $a1, $a21943; LA64-NEXT: .LBB36_1: # =>This Inner Loop Header: Depth=11944; LA64-NEXT: ll.w $a4, $a0, 01945; LA64-NEXT: and $a6, $a4, $a31946; LA64-NEXT: move $a5, $a41947; LA64-NEXT: bgeu $a1, $a6, .LBB36_31948; LA64-NEXT: # %bb.2: # in Loop: Header=BB36_1 Depth=11949; LA64-NEXT: xor $a5, $a4, $a11950; LA64-NEXT: and $a5, $a5, $a31951; LA64-NEXT: xor $a5, $a4, $a51952; LA64-NEXT: .LBB36_3: # in Loop: Header=BB36_1 Depth=11953; LA64-NEXT: sc.w $a5, $a0, 01954; LA64-NEXT: beq $a5, $zero, .LBB36_11955; LA64-NEXT: # %bb.4:1956; LA64-NEXT: srl.w $a0, $a4, $a21957; LA64-NEXT: ret1958 %1 = atomicrmw umin ptr %a, i8 %b acq_rel1959 ret i8 %11960}1961 1962define i16 @atomicrmw_umin_i16_acq_rel(ptr %a, i16 %b) nounwind {1963; LA32-LABEL: atomicrmw_umin_i16_acq_rel:1964; LA32: # %bb.0:1965; LA32-NEXT: addi.w $a2, $zero, -41966; LA32-NEXT: and $a2, $a0, $a21967; LA32-NEXT: slli.w $a0, $a0, 31968; LA32-NEXT: lu12i.w $a3, 151969; LA32-NEXT: ori $a3, $a3, 40951970; LA32-NEXT: sll.w $a4, $a3, $a01971; LA32-NEXT: and $a1, $a1, $a31972; LA32-NEXT: sll.w $a1, $a1, $a01973; LA32-NEXT: .LBB37_1: # =>This Inner Loop Header: Depth=11974; LA32-NEXT: ll.w $a3, $a2, 01975; LA32-NEXT: and $a6, $a3, $a41976; LA32-NEXT: move $a5, $a31977; LA32-NEXT: bgeu $a1, $a6, .LBB37_31978; LA32-NEXT: # %bb.2: # in Loop: Header=BB37_1 Depth=11979; LA32-NEXT: xor $a5, $a3, $a11980; LA32-NEXT: and $a5, $a5, $a41981; LA32-NEXT: xor $a5, $a3, $a51982; LA32-NEXT: .LBB37_3: # in Loop: Header=BB37_1 Depth=11983; LA32-NEXT: sc.w $a5, $a2, 01984; LA32-NEXT: beq $a5, $zero, .LBB37_11985; LA32-NEXT: # %bb.4:1986; LA32-NEXT: srl.w $a0, $a3, $a01987; LA32-NEXT: ret1988;1989; LA64-LABEL: atomicrmw_umin_i16_acq_rel:1990; LA64: # %bb.0:1991; LA64-NEXT: slli.d $a2, $a0, 31992; LA64-NEXT: bstrins.d $a0, $zero, 1, 01993; LA64-NEXT: lu12i.w $a3, 151994; LA64-NEXT: ori $a3, $a3, 40951995; LA64-NEXT: sll.w $a3, $a3, $a21996; LA64-NEXT: bstrpick.d $a1, $a1, 15, 01997; LA64-NEXT: sll.w $a1, $a1, $a21998; LA64-NEXT: .LBB37_1: # =>This Inner Loop Header: Depth=11999; LA64-NEXT: ll.w $a4, $a0, 02000; LA64-NEXT: and $a6, $a4, $a32001; LA64-NEXT: move $a5, $a42002; LA64-NEXT: bgeu $a1, $a6, .LBB37_32003; LA64-NEXT: # %bb.2: # in Loop: Header=BB37_1 Depth=12004; LA64-NEXT: xor $a5, $a4, $a12005; LA64-NEXT: and $a5, $a5, $a32006; LA64-NEXT: xor $a5, $a4, $a52007; LA64-NEXT: .LBB37_3: # in Loop: Header=BB37_1 Depth=12008; LA64-NEXT: sc.w $a5, $a0, 02009; LA64-NEXT: beq $a5, $zero, .LBB37_12010; LA64-NEXT: # %bb.4:2011; LA64-NEXT: srl.w $a0, $a4, $a22012; LA64-NEXT: ret2013 %1 = atomicrmw umin ptr %a, i16 %b acq_rel2014 ret i16 %12015}2016 2017define i32 @atomicrmw_umin_i32_acq_rel(ptr %a, i32 %b) nounwind {2018; LA32-LABEL: atomicrmw_umin_i32_acq_rel:2019; LA32: # %bb.0:2020; LA32-NEXT: .LBB38_1: # =>This Inner Loop Header: Depth=12021; LA32-NEXT: ll.w $a2, $a0, 02022; LA32-NEXT: move $a3, $a22023; LA32-NEXT: bgeu $a1, $a2, .LBB38_32024; LA32-NEXT: # %bb.2: # in Loop: Header=BB38_1 Depth=12025; LA32-NEXT: move $a3, $a12026; LA32-NEXT: .LBB38_3: # in Loop: Header=BB38_1 Depth=12027; LA32-NEXT: sc.w $a3, $a0, 02028; LA32-NEXT: beq $a3, $zero, .LBB38_12029; LA32-NEXT: # %bb.4:2030; LA32-NEXT: move $a0, $a22031; LA32-NEXT: ret2032;2033; LA64-LABEL: atomicrmw_umin_i32_acq_rel:2034; LA64: # %bb.0:2035; LA64-NEXT: ammin_db.wu $a2, $a1, $a02036; LA64-NEXT: move $a0, $a22037; LA64-NEXT: ret2038 %1 = atomicrmw umin ptr %a, i32 %b acq_rel2039 ret i32 %12040}2041 2042define i64 @atomicrmw_umin_i64_acq_rel(ptr %a, i64 %b) nounwind {2043; LA32-LABEL: atomicrmw_umin_i64_acq_rel:2044; LA32: # %bb.0:2045; LA32-NEXT: addi.w $sp, $sp, -322046; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill2047; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill2048; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill2049; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill2050; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill2051; LA32-NEXT: move $fp, $a02052; LA32-NEXT: ld.w $a5, $a0, 42053; LA32-NEXT: ld.w $a4, $a0, 02054; LA32-NEXT: move $s0, $a22055; LA32-NEXT: move $s1, $a12056; LA32-NEXT: addi.w $s2, $sp, 02057; LA32-NEXT: b .LBB39_22058; LA32-NEXT: .p2align 4, , 162059; LA32-NEXT: .LBB39_1: # %atomicrmw.start2060; LA32-NEXT: # in Loop: Header=BB39_2 Depth=12061; LA32-NEXT: st.w $a4, $sp, 02062; LA32-NEXT: st.w $a5, $sp, 42063; LA32-NEXT: ori $a4, $zero, 42064; LA32-NEXT: ori $a5, $zero, 22065; LA32-NEXT: move $a0, $fp2066; LA32-NEXT: move $a1, $s22067; LA32-NEXT: bl __atomic_compare_exchange_82068; LA32-NEXT: ld.w $a5, $sp, 42069; LA32-NEXT: ld.w $a4, $sp, 02070; LA32-NEXT: bne $a0, $zero, .LBB39_72071; LA32-NEXT: .LBB39_2: # %atomicrmw.start2072; LA32-NEXT: # =>This Inner Loop Header: Depth=12073; LA32-NEXT: beq $a5, $s0, .LBB39_42074; LA32-NEXT: # %bb.3: # %atomicrmw.start2075; LA32-NEXT: # in Loop: Header=BB39_2 Depth=12076; LA32-NEXT: sltu $a0, $s0, $a52077; LA32-NEXT: b .LBB39_52078; LA32-NEXT: .p2align 4, , 162079; LA32-NEXT: .LBB39_4: # in Loop: Header=BB39_2 Depth=12080; LA32-NEXT: sltu $a0, $s1, $a42081; LA32-NEXT: .LBB39_5: # %atomicrmw.start2082; LA32-NEXT: # in Loop: Header=BB39_2 Depth=12083; LA32-NEXT: xori $a0, $a0, 12084; LA32-NEXT: move $a2, $a42085; LA32-NEXT: move $a3, $a52086; LA32-NEXT: bne $a0, $zero, .LBB39_12087; LA32-NEXT: # %bb.6: # %atomicrmw.start2088; LA32-NEXT: # in Loop: Header=BB39_2 Depth=12089; LA32-NEXT: move $a2, $s12090; LA32-NEXT: move $a3, $s02091; LA32-NEXT: b .LBB39_12092; LA32-NEXT: .LBB39_7: # %atomicrmw.end2093; LA32-NEXT: move $a0, $a42094; LA32-NEXT: move $a1, $a52095; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload2096; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload2097; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload2098; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload2099; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload2100; LA32-NEXT: addi.w $sp, $sp, 322101; LA32-NEXT: ret2102;2103; LA64-LABEL: atomicrmw_umin_i64_acq_rel:2104; LA64: # %bb.0:2105; LA64-NEXT: ammin_db.du $a2, $a1, $a02106; LA64-NEXT: move $a0, $a22107; LA64-NEXT: ret2108 %1 = atomicrmw umin ptr %a, i64 %b acq_rel2109 ret i64 %12110}2111 2112define i8 @atomicrmw_max_i8_acq_rel(ptr %a, i8 %b) nounwind {2113; LA32-LABEL: atomicrmw_max_i8_acq_rel:2114; LA32: # %bb.0:2115; LA32-NEXT: addi.w $a2, $zero, -42116; LA32-NEXT: and $a2, $a0, $a22117; LA32-NEXT: slli.w $a0, $a0, 32118; LA32-NEXT: andi $a3, $a0, 242119; LA32-NEXT: ori $a4, $zero, 2552120; LA32-NEXT: sll.w $a4, $a4, $a02121; LA32-NEXT: slli.w $a1, $a1, 242122; LA32-NEXT: srai.w $a1, $a1, 242123; LA32-NEXT: sll.w $a1, $a1, $a02124; LA32-NEXT: xori $a3, $a3, 242125; LA32-NEXT: .LBB40_1: # =>This Inner Loop Header: Depth=12126; LA32-NEXT: ll.w $a5, $a2, 02127; LA32-NEXT: and $a7, $a5, $a42128; LA32-NEXT: move $a6, $a52129; LA32-NEXT: sll.w $a7, $a7, $a32130; LA32-NEXT: sra.w $a7, $a7, $a32131; LA32-NEXT: bge $a7, $a1, .LBB40_32132; LA32-NEXT: # %bb.2: # in Loop: Header=BB40_1 Depth=12133; LA32-NEXT: xor $a6, $a5, $a12134; LA32-NEXT: and $a6, $a6, $a42135; LA32-NEXT: xor $a6, $a5, $a62136; LA32-NEXT: .LBB40_3: # in Loop: Header=BB40_1 Depth=12137; LA32-NEXT: sc.w $a6, $a2, 02138; LA32-NEXT: beq $a6, $zero, .LBB40_12139; LA32-NEXT: # %bb.4:2140; LA32-NEXT: srl.w $a0, $a5, $a02141; LA32-NEXT: ret2142;2143; LA64-LABEL: atomicrmw_max_i8_acq_rel:2144; LA64: # %bb.0:2145; LA64-NEXT: slli.d $a2, $a0, 32146; LA64-NEXT: bstrins.d $a0, $zero, 1, 02147; LA64-NEXT: andi $a3, $a2, 242148; LA64-NEXT: ori $a4, $zero, 2552149; LA64-NEXT: sll.w $a4, $a4, $a22150; LA64-NEXT: ext.w.b $a1, $a12151; LA64-NEXT: sll.w $a1, $a1, $a22152; LA64-NEXT: xori $a3, $a3, 562153; LA64-NEXT: .LBB40_1: # =>This Inner Loop Header: Depth=12154; LA64-NEXT: ll.w $a5, $a0, 02155; LA64-NEXT: and $a7, $a5, $a42156; LA64-NEXT: move $a6, $a52157; LA64-NEXT: sll.w $a7, $a7, $a32158; LA64-NEXT: sra.w $a7, $a7, $a32159; LA64-NEXT: bge $a7, $a1, .LBB40_32160; LA64-NEXT: # %bb.2: # in Loop: Header=BB40_1 Depth=12161; LA64-NEXT: xor $a6, $a5, $a12162; LA64-NEXT: and $a6, $a6, $a42163; LA64-NEXT: xor $a6, $a5, $a62164; LA64-NEXT: .LBB40_3: # in Loop: Header=BB40_1 Depth=12165; LA64-NEXT: sc.w $a6, $a0, 02166; LA64-NEXT: beq $a6, $zero, .LBB40_12167; LA64-NEXT: # %bb.4:2168; LA64-NEXT: srl.w $a0, $a5, $a22169; LA64-NEXT: ret2170 %1 = atomicrmw max ptr %a, i8 %b acq_rel2171 ret i8 %12172}2173 2174define i16 @atomicrmw_max_i16_acq_rel(ptr %a, i16 %b) nounwind {2175; LA32-LABEL: atomicrmw_max_i16_acq_rel:2176; LA32: # %bb.0:2177; LA32-NEXT: addi.w $a2, $zero, -42178; LA32-NEXT: and $a2, $a0, $a22179; LA32-NEXT: slli.w $a0, $a0, 32180; LA32-NEXT: andi $a3, $a0, 242181; LA32-NEXT: lu12i.w $a4, 152182; LA32-NEXT: ori $a4, $a4, 40952183; LA32-NEXT: sll.w $a4, $a4, $a02184; LA32-NEXT: slli.w $a1, $a1, 162185; LA32-NEXT: srai.w $a1, $a1, 162186; LA32-NEXT: sll.w $a1, $a1, $a02187; LA32-NEXT: ori $a5, $zero, 162188; LA32-NEXT: sub.w $a3, $a5, $a32189; LA32-NEXT: .LBB41_1: # =>This Inner Loop Header: Depth=12190; LA32-NEXT: ll.w $a5, $a2, 02191; LA32-NEXT: and $a7, $a5, $a42192; LA32-NEXT: move $a6, $a52193; LA32-NEXT: sll.w $a7, $a7, $a32194; LA32-NEXT: sra.w $a7, $a7, $a32195; LA32-NEXT: bge $a7, $a1, .LBB41_32196; LA32-NEXT: # %bb.2: # in Loop: Header=BB41_1 Depth=12197; LA32-NEXT: xor $a6, $a5, $a12198; LA32-NEXT: and $a6, $a6, $a42199; LA32-NEXT: xor $a6, $a5, $a62200; LA32-NEXT: .LBB41_3: # in Loop: Header=BB41_1 Depth=12201; LA32-NEXT: sc.w $a6, $a2, 02202; LA32-NEXT: beq $a6, $zero, .LBB41_12203; LA32-NEXT: # %bb.4:2204; LA32-NEXT: srl.w $a0, $a5, $a02205; LA32-NEXT: ret2206;2207; LA64-LABEL: atomicrmw_max_i16_acq_rel:2208; LA64: # %bb.0:2209; LA64-NEXT: slli.d $a2, $a0, 32210; LA64-NEXT: bstrins.d $a0, $zero, 1, 02211; LA64-NEXT: andi $a3, $a2, 242212; LA64-NEXT: lu12i.w $a4, 152213; LA64-NEXT: ori $a4, $a4, 40952214; LA64-NEXT: sll.w $a4, $a4, $a22215; LA64-NEXT: ext.w.h $a1, $a12216; LA64-NEXT: sll.w $a1, $a1, $a22217; LA64-NEXT: ori $a5, $zero, 482218; LA64-NEXT: sub.d $a3, $a5, $a32219; LA64-NEXT: .LBB41_1: # =>This Inner Loop Header: Depth=12220; LA64-NEXT: ll.w $a5, $a0, 02221; LA64-NEXT: and $a7, $a5, $a42222; LA64-NEXT: move $a6, $a52223; LA64-NEXT: sll.w $a7, $a7, $a32224; LA64-NEXT: sra.w $a7, $a7, $a32225; LA64-NEXT: bge $a7, $a1, .LBB41_32226; LA64-NEXT: # %bb.2: # in Loop: Header=BB41_1 Depth=12227; LA64-NEXT: xor $a6, $a5, $a12228; LA64-NEXT: and $a6, $a6, $a42229; LA64-NEXT: xor $a6, $a5, $a62230; LA64-NEXT: .LBB41_3: # in Loop: Header=BB41_1 Depth=12231; LA64-NEXT: sc.w $a6, $a0, 02232; LA64-NEXT: beq $a6, $zero, .LBB41_12233; LA64-NEXT: # %bb.4:2234; LA64-NEXT: srl.w $a0, $a5, $a22235; LA64-NEXT: ret2236 %1 = atomicrmw max ptr %a, i16 %b acq_rel2237 ret i16 %12238}2239 2240define i32 @atomicrmw_max_i32_acq_rel(ptr %a, i32 %b) nounwind {2241; LA32-LABEL: atomicrmw_max_i32_acq_rel:2242; LA32: # %bb.0:2243; LA32-NEXT: .LBB42_1: # =>This Inner Loop Header: Depth=12244; LA32-NEXT: ll.w $a2, $a0, 02245; LA32-NEXT: move $a3, $a22246; LA32-NEXT: bge $a2, $a1, .LBB42_32247; LA32-NEXT: # %bb.2: # in Loop: Header=BB42_1 Depth=12248; LA32-NEXT: move $a3, $a12249; LA32-NEXT: .LBB42_3: # in Loop: Header=BB42_1 Depth=12250; LA32-NEXT: sc.w $a3, $a0, 02251; LA32-NEXT: beq $a3, $zero, .LBB42_12252; LA32-NEXT: # %bb.4:2253; LA32-NEXT: move $a0, $a22254; LA32-NEXT: ret2255;2256; LA64-LABEL: atomicrmw_max_i32_acq_rel:2257; LA64: # %bb.0:2258; LA64-NEXT: ammax_db.w $a2, $a1, $a02259; LA64-NEXT: move $a0, $a22260; LA64-NEXT: ret2261 %1 = atomicrmw max ptr %a, i32 %b acq_rel2262 ret i32 %12263}2264 2265define i64 @atomicrmw_max_i64_acq_rel(ptr %a, i64 %b) nounwind {2266; LA32-LABEL: atomicrmw_max_i64_acq_rel:2267; LA32: # %bb.0:2268; LA32-NEXT: addi.w $sp, $sp, -322269; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill2270; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill2271; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill2272; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill2273; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill2274; LA32-NEXT: move $fp, $a02275; LA32-NEXT: ld.w $a5, $a0, 42276; LA32-NEXT: ld.w $a4, $a0, 02277; LA32-NEXT: move $s0, $a22278; LA32-NEXT: move $s1, $a12279; LA32-NEXT: addi.w $s2, $sp, 02280; LA32-NEXT: b .LBB43_22281; LA32-NEXT: .p2align 4, , 162282; LA32-NEXT: .LBB43_1: # %atomicrmw.start2283; LA32-NEXT: # in Loop: Header=BB43_2 Depth=12284; LA32-NEXT: st.w $a4, $sp, 02285; LA32-NEXT: st.w $a5, $sp, 42286; LA32-NEXT: ori $a4, $zero, 42287; LA32-NEXT: ori $a5, $zero, 22288; LA32-NEXT: move $a0, $fp2289; LA32-NEXT: move $a1, $s22290; LA32-NEXT: bl __atomic_compare_exchange_82291; LA32-NEXT: ld.w $a5, $sp, 42292; LA32-NEXT: ld.w $a4, $sp, 02293; LA32-NEXT: bne $a0, $zero, .LBB43_72294; LA32-NEXT: .LBB43_2: # %atomicrmw.start2295; LA32-NEXT: # =>This Inner Loop Header: Depth=12296; LA32-NEXT: beq $a5, $s0, .LBB43_42297; LA32-NEXT: # %bb.3: # %atomicrmw.start2298; LA32-NEXT: # in Loop: Header=BB43_2 Depth=12299; LA32-NEXT: slt $a0, $s0, $a52300; LA32-NEXT: b .LBB43_52301; LA32-NEXT: .p2align 4, , 162302; LA32-NEXT: .LBB43_4: # in Loop: Header=BB43_2 Depth=12303; LA32-NEXT: sltu $a0, $s1, $a42304; LA32-NEXT: .LBB43_5: # %atomicrmw.start2305; LA32-NEXT: # in Loop: Header=BB43_2 Depth=12306; LA32-NEXT: move $a2, $a42307; LA32-NEXT: move $a3, $a52308; LA32-NEXT: bne $a0, $zero, .LBB43_12309; LA32-NEXT: # %bb.6: # %atomicrmw.start2310; LA32-NEXT: # in Loop: Header=BB43_2 Depth=12311; LA32-NEXT: move $a2, $s12312; LA32-NEXT: move $a3, $s02313; LA32-NEXT: b .LBB43_12314; LA32-NEXT: .LBB43_7: # %atomicrmw.end2315; LA32-NEXT: move $a0, $a42316; LA32-NEXT: move $a1, $a52317; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload2318; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload2319; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload2320; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload2321; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload2322; LA32-NEXT: addi.w $sp, $sp, 322323; LA32-NEXT: ret2324;2325; LA64-LABEL: atomicrmw_max_i64_acq_rel:2326; LA64: # %bb.0:2327; LA64-NEXT: ammax_db.d $a2, $a1, $a02328; LA64-NEXT: move $a0, $a22329; LA64-NEXT: ret2330 %1 = atomicrmw max ptr %a, i64 %b acq_rel2331 ret i64 %12332}2333 2334define i8 @atomicrmw_min_i8_acq_rel(ptr %a, i8 %b) nounwind {2335; LA32-LABEL: atomicrmw_min_i8_acq_rel:2336; LA32: # %bb.0:2337; LA32-NEXT: addi.w $a2, $zero, -42338; LA32-NEXT: and $a2, $a0, $a22339; LA32-NEXT: slli.w $a0, $a0, 32340; LA32-NEXT: andi $a3, $a0, 242341; LA32-NEXT: ori $a4, $zero, 2552342; LA32-NEXT: sll.w $a4, $a4, $a02343; LA32-NEXT: slli.w $a1, $a1, 242344; LA32-NEXT: srai.w $a1, $a1, 242345; LA32-NEXT: sll.w $a1, $a1, $a02346; LA32-NEXT: xori $a3, $a3, 242347; LA32-NEXT: .LBB44_1: # =>This Inner Loop Header: Depth=12348; LA32-NEXT: ll.w $a5, $a2, 02349; LA32-NEXT: and $a7, $a5, $a42350; LA32-NEXT: move $a6, $a52351; LA32-NEXT: sll.w $a7, $a7, $a32352; LA32-NEXT: sra.w $a7, $a7, $a32353; LA32-NEXT: bge $a1, $a7, .LBB44_32354; LA32-NEXT: # %bb.2: # in Loop: Header=BB44_1 Depth=12355; LA32-NEXT: xor $a6, $a5, $a12356; LA32-NEXT: and $a6, $a6, $a42357; LA32-NEXT: xor $a6, $a5, $a62358; LA32-NEXT: .LBB44_3: # in Loop: Header=BB44_1 Depth=12359; LA32-NEXT: sc.w $a6, $a2, 02360; LA32-NEXT: beq $a6, $zero, .LBB44_12361; LA32-NEXT: # %bb.4:2362; LA32-NEXT: srl.w $a0, $a5, $a02363; LA32-NEXT: ret2364;2365; LA64-LABEL: atomicrmw_min_i8_acq_rel:2366; LA64: # %bb.0:2367; LA64-NEXT: slli.d $a2, $a0, 32368; LA64-NEXT: bstrins.d $a0, $zero, 1, 02369; LA64-NEXT: andi $a3, $a2, 242370; LA64-NEXT: ori $a4, $zero, 2552371; LA64-NEXT: sll.w $a4, $a4, $a22372; LA64-NEXT: ext.w.b $a1, $a12373; LA64-NEXT: sll.w $a1, $a1, $a22374; LA64-NEXT: xori $a3, $a3, 562375; LA64-NEXT: .LBB44_1: # =>This Inner Loop Header: Depth=12376; LA64-NEXT: ll.w $a5, $a0, 02377; LA64-NEXT: and $a7, $a5, $a42378; LA64-NEXT: move $a6, $a52379; LA64-NEXT: sll.w $a7, $a7, $a32380; LA64-NEXT: sra.w $a7, $a7, $a32381; LA64-NEXT: bge $a1, $a7, .LBB44_32382; LA64-NEXT: # %bb.2: # in Loop: Header=BB44_1 Depth=12383; LA64-NEXT: xor $a6, $a5, $a12384; LA64-NEXT: and $a6, $a6, $a42385; LA64-NEXT: xor $a6, $a5, $a62386; LA64-NEXT: .LBB44_3: # in Loop: Header=BB44_1 Depth=12387; LA64-NEXT: sc.w $a6, $a0, 02388; LA64-NEXT: beq $a6, $zero, .LBB44_12389; LA64-NEXT: # %bb.4:2390; LA64-NEXT: srl.w $a0, $a5, $a22391; LA64-NEXT: ret2392 %1 = atomicrmw min ptr %a, i8 %b acq_rel2393 ret i8 %12394}2395 2396define i16 @atomicrmw_min_i16_acq_rel(ptr %a, i16 %b) nounwind {2397; LA32-LABEL: atomicrmw_min_i16_acq_rel:2398; LA32: # %bb.0:2399; LA32-NEXT: addi.w $a2, $zero, -42400; LA32-NEXT: and $a2, $a0, $a22401; LA32-NEXT: slli.w $a0, $a0, 32402; LA32-NEXT: andi $a3, $a0, 242403; LA32-NEXT: lu12i.w $a4, 152404; LA32-NEXT: ori $a4, $a4, 40952405; LA32-NEXT: sll.w $a4, $a4, $a02406; LA32-NEXT: slli.w $a1, $a1, 162407; LA32-NEXT: srai.w $a1, $a1, 162408; LA32-NEXT: sll.w $a1, $a1, $a02409; LA32-NEXT: ori $a5, $zero, 162410; LA32-NEXT: sub.w $a3, $a5, $a32411; LA32-NEXT: .LBB45_1: # =>This Inner Loop Header: Depth=12412; LA32-NEXT: ll.w $a5, $a2, 02413; LA32-NEXT: and $a7, $a5, $a42414; LA32-NEXT: move $a6, $a52415; LA32-NEXT: sll.w $a7, $a7, $a32416; LA32-NEXT: sra.w $a7, $a7, $a32417; LA32-NEXT: bge $a1, $a7, .LBB45_32418; LA32-NEXT: # %bb.2: # in Loop: Header=BB45_1 Depth=12419; LA32-NEXT: xor $a6, $a5, $a12420; LA32-NEXT: and $a6, $a6, $a42421; LA32-NEXT: xor $a6, $a5, $a62422; LA32-NEXT: .LBB45_3: # in Loop: Header=BB45_1 Depth=12423; LA32-NEXT: sc.w $a6, $a2, 02424; LA32-NEXT: beq $a6, $zero, .LBB45_12425; LA32-NEXT: # %bb.4:2426; LA32-NEXT: srl.w $a0, $a5, $a02427; LA32-NEXT: ret2428;2429; LA64-LABEL: atomicrmw_min_i16_acq_rel:2430; LA64: # %bb.0:2431; LA64-NEXT: slli.d $a2, $a0, 32432; LA64-NEXT: bstrins.d $a0, $zero, 1, 02433; LA64-NEXT: andi $a3, $a2, 242434; LA64-NEXT: lu12i.w $a4, 152435; LA64-NEXT: ori $a4, $a4, 40952436; LA64-NEXT: sll.w $a4, $a4, $a22437; LA64-NEXT: ext.w.h $a1, $a12438; LA64-NEXT: sll.w $a1, $a1, $a22439; LA64-NEXT: ori $a5, $zero, 482440; LA64-NEXT: sub.d $a3, $a5, $a32441; LA64-NEXT: .LBB45_1: # =>This Inner Loop Header: Depth=12442; LA64-NEXT: ll.w $a5, $a0, 02443; LA64-NEXT: and $a7, $a5, $a42444; LA64-NEXT: move $a6, $a52445; LA64-NEXT: sll.w $a7, $a7, $a32446; LA64-NEXT: sra.w $a7, $a7, $a32447; LA64-NEXT: bge $a1, $a7, .LBB45_32448; LA64-NEXT: # %bb.2: # in Loop: Header=BB45_1 Depth=12449; LA64-NEXT: xor $a6, $a5, $a12450; LA64-NEXT: and $a6, $a6, $a42451; LA64-NEXT: xor $a6, $a5, $a62452; LA64-NEXT: .LBB45_3: # in Loop: Header=BB45_1 Depth=12453; LA64-NEXT: sc.w $a6, $a0, 02454; LA64-NEXT: beq $a6, $zero, .LBB45_12455; LA64-NEXT: # %bb.4:2456; LA64-NEXT: srl.w $a0, $a5, $a22457; LA64-NEXT: ret2458 %1 = atomicrmw min ptr %a, i16 %b acq_rel2459 ret i16 %12460}2461 2462define i32 @atomicrmw_min_i32_acq_rel(ptr %a, i32 %b) nounwind {2463; LA32-LABEL: atomicrmw_min_i32_acq_rel:2464; LA32: # %bb.0:2465; LA32-NEXT: .LBB46_1: # =>This Inner Loop Header: Depth=12466; LA32-NEXT: ll.w $a2, $a0, 02467; LA32-NEXT: move $a3, $a22468; LA32-NEXT: bge $a1, $a2, .LBB46_32469; LA32-NEXT: # %bb.2: # in Loop: Header=BB46_1 Depth=12470; LA32-NEXT: move $a3, $a12471; LA32-NEXT: .LBB46_3: # in Loop: Header=BB46_1 Depth=12472; LA32-NEXT: sc.w $a3, $a0, 02473; LA32-NEXT: beq $a3, $zero, .LBB46_12474; LA32-NEXT: # %bb.4:2475; LA32-NEXT: move $a0, $a22476; LA32-NEXT: ret2477;2478; LA64-LABEL: atomicrmw_min_i32_acq_rel:2479; LA64: # %bb.0:2480; LA64-NEXT: ammin_db.w $a2, $a1, $a02481; LA64-NEXT: move $a0, $a22482; LA64-NEXT: ret2483 %1 = atomicrmw min ptr %a, i32 %b acq_rel2484 ret i32 %12485}2486 2487define i64 @atomicrmw_min_i64_acq_rel(ptr %a, i64 %b) nounwind {2488; LA32-LABEL: atomicrmw_min_i64_acq_rel:2489; LA32: # %bb.0:2490; LA32-NEXT: addi.w $sp, $sp, -322491; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill2492; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill2493; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill2494; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill2495; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill2496; LA32-NEXT: move $fp, $a02497; LA32-NEXT: ld.w $a5, $a0, 42498; LA32-NEXT: ld.w $a4, $a0, 02499; LA32-NEXT: move $s0, $a22500; LA32-NEXT: move $s1, $a12501; LA32-NEXT: addi.w $s2, $sp, 02502; LA32-NEXT: b .LBB47_22503; LA32-NEXT: .p2align 4, , 162504; LA32-NEXT: .LBB47_1: # %atomicrmw.start2505; LA32-NEXT: # in Loop: Header=BB47_2 Depth=12506; LA32-NEXT: st.w $a4, $sp, 02507; LA32-NEXT: st.w $a5, $sp, 42508; LA32-NEXT: ori $a4, $zero, 42509; LA32-NEXT: ori $a5, $zero, 22510; LA32-NEXT: move $a0, $fp2511; LA32-NEXT: move $a1, $s22512; LA32-NEXT: bl __atomic_compare_exchange_82513; LA32-NEXT: ld.w $a5, $sp, 42514; LA32-NEXT: ld.w $a4, $sp, 02515; LA32-NEXT: bne $a0, $zero, .LBB47_72516; LA32-NEXT: .LBB47_2: # %atomicrmw.start2517; LA32-NEXT: # =>This Inner Loop Header: Depth=12518; LA32-NEXT: beq $a5, $s0, .LBB47_42519; LA32-NEXT: # %bb.3: # %atomicrmw.start2520; LA32-NEXT: # in Loop: Header=BB47_2 Depth=12521; LA32-NEXT: slt $a0, $s0, $a52522; LA32-NEXT: b .LBB47_52523; LA32-NEXT: .p2align 4, , 162524; LA32-NEXT: .LBB47_4: # in Loop: Header=BB47_2 Depth=12525; LA32-NEXT: sltu $a0, $s1, $a42526; LA32-NEXT: .LBB47_5: # %atomicrmw.start2527; LA32-NEXT: # in Loop: Header=BB47_2 Depth=12528; LA32-NEXT: xori $a0, $a0, 12529; LA32-NEXT: move $a2, $a42530; LA32-NEXT: move $a3, $a52531; LA32-NEXT: bne $a0, $zero, .LBB47_12532; LA32-NEXT: # %bb.6: # %atomicrmw.start2533; LA32-NEXT: # in Loop: Header=BB47_2 Depth=12534; LA32-NEXT: move $a2, $s12535; LA32-NEXT: move $a3, $s02536; LA32-NEXT: b .LBB47_12537; LA32-NEXT: .LBB47_7: # %atomicrmw.end2538; LA32-NEXT: move $a0, $a42539; LA32-NEXT: move $a1, $a52540; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload2541; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload2542; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload2543; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload2544; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload2545; LA32-NEXT: addi.w $sp, $sp, 322546; LA32-NEXT: ret2547;2548; LA64-LABEL: atomicrmw_min_i64_acq_rel:2549; LA64: # %bb.0:2550; LA64-NEXT: ammin_db.d $a2, $a1, $a02551; LA64-NEXT: move $a0, $a22552; LA64-NEXT: ret2553 %1 = atomicrmw min ptr %a, i64 %b acq_rel2554 ret i64 %12555}2556 2557define i8 @atomicrmw_umax_i8_seq_cst(ptr %a, i8 %b) nounwind {2558; LA32-LABEL: atomicrmw_umax_i8_seq_cst:2559; LA32: # %bb.0:2560; LA32-NEXT: addi.w $a2, $zero, -42561; LA32-NEXT: and $a2, $a0, $a22562; LA32-NEXT: slli.w $a0, $a0, 32563; LA32-NEXT: ori $a3, $zero, 2552564; LA32-NEXT: sll.w $a3, $a3, $a02565; LA32-NEXT: andi $a1, $a1, 2552566; LA32-NEXT: sll.w $a1, $a1, $a02567; LA32-NEXT: .LBB48_1: # =>This Inner Loop Header: Depth=12568; LA32-NEXT: ll.w $a4, $a2, 02569; LA32-NEXT: and $a6, $a4, $a32570; LA32-NEXT: move $a5, $a42571; LA32-NEXT: bgeu $a6, $a1, .LBB48_32572; LA32-NEXT: # %bb.2: # in Loop: Header=BB48_1 Depth=12573; LA32-NEXT: xor $a5, $a4, $a12574; LA32-NEXT: and $a5, $a5, $a32575; LA32-NEXT: xor $a5, $a4, $a52576; LA32-NEXT: .LBB48_3: # in Loop: Header=BB48_1 Depth=12577; LA32-NEXT: sc.w $a5, $a2, 02578; LA32-NEXT: beq $a5, $zero, .LBB48_12579; LA32-NEXT: # %bb.4:2580; LA32-NEXT: srl.w $a0, $a4, $a02581; LA32-NEXT: ret2582;2583; LA64-LABEL: atomicrmw_umax_i8_seq_cst:2584; LA64: # %bb.0:2585; LA64-NEXT: slli.d $a2, $a0, 32586; LA64-NEXT: bstrins.d $a0, $zero, 1, 02587; LA64-NEXT: ori $a3, $zero, 2552588; LA64-NEXT: sll.w $a3, $a3, $a22589; LA64-NEXT: andi $a1, $a1, 2552590; LA64-NEXT: sll.w $a1, $a1, $a22591; LA64-NEXT: .LBB48_1: # =>This Inner Loop Header: Depth=12592; LA64-NEXT: ll.w $a4, $a0, 02593; LA64-NEXT: and $a6, $a4, $a32594; LA64-NEXT: move $a5, $a42595; LA64-NEXT: bgeu $a6, $a1, .LBB48_32596; LA64-NEXT: # %bb.2: # in Loop: Header=BB48_1 Depth=12597; LA64-NEXT: xor $a5, $a4, $a12598; LA64-NEXT: and $a5, $a5, $a32599; LA64-NEXT: xor $a5, $a4, $a52600; LA64-NEXT: .LBB48_3: # in Loop: Header=BB48_1 Depth=12601; LA64-NEXT: sc.w $a5, $a0, 02602; LA64-NEXT: beq $a5, $zero, .LBB48_12603; LA64-NEXT: # %bb.4:2604; LA64-NEXT: srl.w $a0, $a4, $a22605; LA64-NEXT: ret2606 %1 = atomicrmw umax ptr %a, i8 %b seq_cst2607 ret i8 %12608}2609 2610define i16 @atomicrmw_umax_i16_seq_cst(ptr %a, i16 %b) nounwind {2611; LA32-LABEL: atomicrmw_umax_i16_seq_cst:2612; LA32: # %bb.0:2613; LA32-NEXT: addi.w $a2, $zero, -42614; LA32-NEXT: and $a2, $a0, $a22615; LA32-NEXT: slli.w $a0, $a0, 32616; LA32-NEXT: lu12i.w $a3, 152617; LA32-NEXT: ori $a3, $a3, 40952618; LA32-NEXT: sll.w $a4, $a3, $a02619; LA32-NEXT: and $a1, $a1, $a32620; LA32-NEXT: sll.w $a1, $a1, $a02621; LA32-NEXT: .LBB49_1: # =>This Inner Loop Header: Depth=12622; LA32-NEXT: ll.w $a3, $a2, 02623; LA32-NEXT: and $a6, $a3, $a42624; LA32-NEXT: move $a5, $a32625; LA32-NEXT: bgeu $a6, $a1, .LBB49_32626; LA32-NEXT: # %bb.2: # in Loop: Header=BB49_1 Depth=12627; LA32-NEXT: xor $a5, $a3, $a12628; LA32-NEXT: and $a5, $a5, $a42629; LA32-NEXT: xor $a5, $a3, $a52630; LA32-NEXT: .LBB49_3: # in Loop: Header=BB49_1 Depth=12631; LA32-NEXT: sc.w $a5, $a2, 02632; LA32-NEXT: beq $a5, $zero, .LBB49_12633; LA32-NEXT: # %bb.4:2634; LA32-NEXT: srl.w $a0, $a3, $a02635; LA32-NEXT: ret2636;2637; LA64-LABEL: atomicrmw_umax_i16_seq_cst:2638; LA64: # %bb.0:2639; LA64-NEXT: slli.d $a2, $a0, 32640; LA64-NEXT: bstrins.d $a0, $zero, 1, 02641; LA64-NEXT: lu12i.w $a3, 152642; LA64-NEXT: ori $a3, $a3, 40952643; LA64-NEXT: sll.w $a3, $a3, $a22644; LA64-NEXT: bstrpick.d $a1, $a1, 15, 02645; LA64-NEXT: sll.w $a1, $a1, $a22646; LA64-NEXT: .LBB49_1: # =>This Inner Loop Header: Depth=12647; LA64-NEXT: ll.w $a4, $a0, 02648; LA64-NEXT: and $a6, $a4, $a32649; LA64-NEXT: move $a5, $a42650; LA64-NEXT: bgeu $a6, $a1, .LBB49_32651; LA64-NEXT: # %bb.2: # in Loop: Header=BB49_1 Depth=12652; LA64-NEXT: xor $a5, $a4, $a12653; LA64-NEXT: and $a5, $a5, $a32654; LA64-NEXT: xor $a5, $a4, $a52655; LA64-NEXT: .LBB49_3: # in Loop: Header=BB49_1 Depth=12656; LA64-NEXT: sc.w $a5, $a0, 02657; LA64-NEXT: beq $a5, $zero, .LBB49_12658; LA64-NEXT: # %bb.4:2659; LA64-NEXT: srl.w $a0, $a4, $a22660; LA64-NEXT: ret2661 %1 = atomicrmw umax ptr %a, i16 %b seq_cst2662 ret i16 %12663}2664 2665define i32 @atomicrmw_umax_i32_seq_cst(ptr %a, i32 %b) nounwind {2666; LA32-LABEL: atomicrmw_umax_i32_seq_cst:2667; LA32: # %bb.0:2668; LA32-NEXT: .LBB50_1: # =>This Inner Loop Header: Depth=12669; LA32-NEXT: ll.w $a2, $a0, 02670; LA32-NEXT: move $a3, $a22671; LA32-NEXT: bgeu $a2, $a1, .LBB50_32672; LA32-NEXT: # %bb.2: # in Loop: Header=BB50_1 Depth=12673; LA32-NEXT: move $a3, $a12674; LA32-NEXT: .LBB50_3: # in Loop: Header=BB50_1 Depth=12675; LA32-NEXT: sc.w $a3, $a0, 02676; LA32-NEXT: beq $a3, $zero, .LBB50_12677; LA32-NEXT: # %bb.4:2678; LA32-NEXT: move $a0, $a22679; LA32-NEXT: ret2680;2681; LA64-LABEL: atomicrmw_umax_i32_seq_cst:2682; LA64: # %bb.0:2683; LA64-NEXT: ammax_db.wu $a2, $a1, $a02684; LA64-NEXT: move $a0, $a22685; LA64-NEXT: ret2686 %1 = atomicrmw umax ptr %a, i32 %b seq_cst2687 ret i32 %12688}2689 2690define i64 @atomicrmw_umax_i64_seq_cst(ptr %a, i64 %b) nounwind {2691; LA32-LABEL: atomicrmw_umax_i64_seq_cst:2692; LA32: # %bb.0:2693; LA32-NEXT: addi.w $sp, $sp, -322694; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill2695; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill2696; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill2697; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill2698; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill2699; LA32-NEXT: move $fp, $a02700; LA32-NEXT: ld.w $a5, $a0, 42701; LA32-NEXT: ld.w $a4, $a0, 02702; LA32-NEXT: move $s0, $a22703; LA32-NEXT: move $s1, $a12704; LA32-NEXT: addi.w $s2, $sp, 02705; LA32-NEXT: b .LBB51_22706; LA32-NEXT: .p2align 4, , 162707; LA32-NEXT: .LBB51_1: # %atomicrmw.start2708; LA32-NEXT: # in Loop: Header=BB51_2 Depth=12709; LA32-NEXT: st.w $a4, $sp, 02710; LA32-NEXT: st.w $a5, $sp, 42711; LA32-NEXT: ori $a4, $zero, 52712; LA32-NEXT: ori $a5, $zero, 52713; LA32-NEXT: move $a0, $fp2714; LA32-NEXT: move $a1, $s22715; LA32-NEXT: bl __atomic_compare_exchange_82716; LA32-NEXT: ld.w $a5, $sp, 42717; LA32-NEXT: ld.w $a4, $sp, 02718; LA32-NEXT: bne $a0, $zero, .LBB51_72719; LA32-NEXT: .LBB51_2: # %atomicrmw.start2720; LA32-NEXT: # =>This Inner Loop Header: Depth=12721; LA32-NEXT: beq $a5, $s0, .LBB51_42722; LA32-NEXT: # %bb.3: # %atomicrmw.start2723; LA32-NEXT: # in Loop: Header=BB51_2 Depth=12724; LA32-NEXT: sltu $a0, $s0, $a52725; LA32-NEXT: b .LBB51_52726; LA32-NEXT: .p2align 4, , 162727; LA32-NEXT: .LBB51_4: # in Loop: Header=BB51_2 Depth=12728; LA32-NEXT: sltu $a0, $s1, $a42729; LA32-NEXT: .LBB51_5: # %atomicrmw.start2730; LA32-NEXT: # in Loop: Header=BB51_2 Depth=12731; LA32-NEXT: move $a2, $a42732; LA32-NEXT: move $a3, $a52733; LA32-NEXT: bne $a0, $zero, .LBB51_12734; LA32-NEXT: # %bb.6: # %atomicrmw.start2735; LA32-NEXT: # in Loop: Header=BB51_2 Depth=12736; LA32-NEXT: move $a2, $s12737; LA32-NEXT: move $a3, $s02738; LA32-NEXT: b .LBB51_12739; LA32-NEXT: .LBB51_7: # %atomicrmw.end2740; LA32-NEXT: move $a0, $a42741; LA32-NEXT: move $a1, $a52742; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload2743; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload2744; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload2745; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload2746; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload2747; LA32-NEXT: addi.w $sp, $sp, 322748; LA32-NEXT: ret2749;2750; LA64-LABEL: atomicrmw_umax_i64_seq_cst:2751; LA64: # %bb.0:2752; LA64-NEXT: ammax_db.du $a2, $a1, $a02753; LA64-NEXT: move $a0, $a22754; LA64-NEXT: ret2755 %1 = atomicrmw umax ptr %a, i64 %b seq_cst2756 ret i64 %12757}2758 2759define i8 @atomicrmw_umin_i8_seq_cst(ptr %a, i8 %b) nounwind {2760; LA32-LABEL: atomicrmw_umin_i8_seq_cst:2761; LA32: # %bb.0:2762; LA32-NEXT: addi.w $a2, $zero, -42763; LA32-NEXT: and $a2, $a0, $a22764; LA32-NEXT: slli.w $a0, $a0, 32765; LA32-NEXT: ori $a3, $zero, 2552766; LA32-NEXT: sll.w $a3, $a3, $a02767; LA32-NEXT: andi $a1, $a1, 2552768; LA32-NEXT: sll.w $a1, $a1, $a02769; LA32-NEXT: .LBB52_1: # =>This Inner Loop Header: Depth=12770; LA32-NEXT: ll.w $a4, $a2, 02771; LA32-NEXT: and $a6, $a4, $a32772; LA32-NEXT: move $a5, $a42773; LA32-NEXT: bgeu $a1, $a6, .LBB52_32774; LA32-NEXT: # %bb.2: # in Loop: Header=BB52_1 Depth=12775; LA32-NEXT: xor $a5, $a4, $a12776; LA32-NEXT: and $a5, $a5, $a32777; LA32-NEXT: xor $a5, $a4, $a52778; LA32-NEXT: .LBB52_3: # in Loop: Header=BB52_1 Depth=12779; LA32-NEXT: sc.w $a5, $a2, 02780; LA32-NEXT: beq $a5, $zero, .LBB52_12781; LA32-NEXT: # %bb.4:2782; LA32-NEXT: srl.w $a0, $a4, $a02783; LA32-NEXT: ret2784;2785; LA64-LABEL: atomicrmw_umin_i8_seq_cst:2786; LA64: # %bb.0:2787; LA64-NEXT: slli.d $a2, $a0, 32788; LA64-NEXT: bstrins.d $a0, $zero, 1, 02789; LA64-NEXT: ori $a3, $zero, 2552790; LA64-NEXT: sll.w $a3, $a3, $a22791; LA64-NEXT: andi $a1, $a1, 2552792; LA64-NEXT: sll.w $a1, $a1, $a22793; LA64-NEXT: .LBB52_1: # =>This Inner Loop Header: Depth=12794; LA64-NEXT: ll.w $a4, $a0, 02795; LA64-NEXT: and $a6, $a4, $a32796; LA64-NEXT: move $a5, $a42797; LA64-NEXT: bgeu $a1, $a6, .LBB52_32798; LA64-NEXT: # %bb.2: # in Loop: Header=BB52_1 Depth=12799; LA64-NEXT: xor $a5, $a4, $a12800; LA64-NEXT: and $a5, $a5, $a32801; LA64-NEXT: xor $a5, $a4, $a52802; LA64-NEXT: .LBB52_3: # in Loop: Header=BB52_1 Depth=12803; LA64-NEXT: sc.w $a5, $a0, 02804; LA64-NEXT: beq $a5, $zero, .LBB52_12805; LA64-NEXT: # %bb.4:2806; LA64-NEXT: srl.w $a0, $a4, $a22807; LA64-NEXT: ret2808 %1 = atomicrmw umin ptr %a, i8 %b seq_cst2809 ret i8 %12810}2811 2812define i16 @atomicrmw_umin_i16_seq_cst(ptr %a, i16 %b) nounwind {2813; LA32-LABEL: atomicrmw_umin_i16_seq_cst:2814; LA32: # %bb.0:2815; LA32-NEXT: addi.w $a2, $zero, -42816; LA32-NEXT: and $a2, $a0, $a22817; LA32-NEXT: slli.w $a0, $a0, 32818; LA32-NEXT: lu12i.w $a3, 152819; LA32-NEXT: ori $a3, $a3, 40952820; LA32-NEXT: sll.w $a4, $a3, $a02821; LA32-NEXT: and $a1, $a1, $a32822; LA32-NEXT: sll.w $a1, $a1, $a02823; LA32-NEXT: .LBB53_1: # =>This Inner Loop Header: Depth=12824; LA32-NEXT: ll.w $a3, $a2, 02825; LA32-NEXT: and $a6, $a3, $a42826; LA32-NEXT: move $a5, $a32827; LA32-NEXT: bgeu $a1, $a6, .LBB53_32828; LA32-NEXT: # %bb.2: # in Loop: Header=BB53_1 Depth=12829; LA32-NEXT: xor $a5, $a3, $a12830; LA32-NEXT: and $a5, $a5, $a42831; LA32-NEXT: xor $a5, $a3, $a52832; LA32-NEXT: .LBB53_3: # in Loop: Header=BB53_1 Depth=12833; LA32-NEXT: sc.w $a5, $a2, 02834; LA32-NEXT: beq $a5, $zero, .LBB53_12835; LA32-NEXT: # %bb.4:2836; LA32-NEXT: srl.w $a0, $a3, $a02837; LA32-NEXT: ret2838;2839; LA64-LABEL: atomicrmw_umin_i16_seq_cst:2840; LA64: # %bb.0:2841; LA64-NEXT: slli.d $a2, $a0, 32842; LA64-NEXT: bstrins.d $a0, $zero, 1, 02843; LA64-NEXT: lu12i.w $a3, 152844; LA64-NEXT: ori $a3, $a3, 40952845; LA64-NEXT: sll.w $a3, $a3, $a22846; LA64-NEXT: bstrpick.d $a1, $a1, 15, 02847; LA64-NEXT: sll.w $a1, $a1, $a22848; LA64-NEXT: .LBB53_1: # =>This Inner Loop Header: Depth=12849; LA64-NEXT: ll.w $a4, $a0, 02850; LA64-NEXT: and $a6, $a4, $a32851; LA64-NEXT: move $a5, $a42852; LA64-NEXT: bgeu $a1, $a6, .LBB53_32853; LA64-NEXT: # %bb.2: # in Loop: Header=BB53_1 Depth=12854; LA64-NEXT: xor $a5, $a4, $a12855; LA64-NEXT: and $a5, $a5, $a32856; LA64-NEXT: xor $a5, $a4, $a52857; LA64-NEXT: .LBB53_3: # in Loop: Header=BB53_1 Depth=12858; LA64-NEXT: sc.w $a5, $a0, 02859; LA64-NEXT: beq $a5, $zero, .LBB53_12860; LA64-NEXT: # %bb.4:2861; LA64-NEXT: srl.w $a0, $a4, $a22862; LA64-NEXT: ret2863 %1 = atomicrmw umin ptr %a, i16 %b seq_cst2864 ret i16 %12865}2866 2867define i32 @atomicrmw_umin_i32_seq_cst(ptr %a, i32 %b) nounwind {2868; LA32-LABEL: atomicrmw_umin_i32_seq_cst:2869; LA32: # %bb.0:2870; LA32-NEXT: .LBB54_1: # =>This Inner Loop Header: Depth=12871; LA32-NEXT: ll.w $a2, $a0, 02872; LA32-NEXT: move $a3, $a22873; LA32-NEXT: bgeu $a1, $a2, .LBB54_32874; LA32-NEXT: # %bb.2: # in Loop: Header=BB54_1 Depth=12875; LA32-NEXT: move $a3, $a12876; LA32-NEXT: .LBB54_3: # in Loop: Header=BB54_1 Depth=12877; LA32-NEXT: sc.w $a3, $a0, 02878; LA32-NEXT: beq $a3, $zero, .LBB54_12879; LA32-NEXT: # %bb.4:2880; LA32-NEXT: move $a0, $a22881; LA32-NEXT: ret2882;2883; LA64-LABEL: atomicrmw_umin_i32_seq_cst:2884; LA64: # %bb.0:2885; LA64-NEXT: ammin_db.wu $a2, $a1, $a02886; LA64-NEXT: move $a0, $a22887; LA64-NEXT: ret2888 %1 = atomicrmw umin ptr %a, i32 %b seq_cst2889 ret i32 %12890}2891 2892define i64 @atomicrmw_umin_i64_seq_cst(ptr %a, i64 %b) nounwind {2893; LA32-LABEL: atomicrmw_umin_i64_seq_cst:2894; LA32: # %bb.0:2895; LA32-NEXT: addi.w $sp, $sp, -322896; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill2897; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill2898; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill2899; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill2900; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill2901; LA32-NEXT: move $fp, $a02902; LA32-NEXT: ld.w $a5, $a0, 42903; LA32-NEXT: ld.w $a4, $a0, 02904; LA32-NEXT: move $s0, $a22905; LA32-NEXT: move $s1, $a12906; LA32-NEXT: addi.w $s2, $sp, 02907; LA32-NEXT: b .LBB55_22908; LA32-NEXT: .p2align 4, , 162909; LA32-NEXT: .LBB55_1: # %atomicrmw.start2910; LA32-NEXT: # in Loop: Header=BB55_2 Depth=12911; LA32-NEXT: st.w $a4, $sp, 02912; LA32-NEXT: st.w $a5, $sp, 42913; LA32-NEXT: ori $a4, $zero, 52914; LA32-NEXT: ori $a5, $zero, 52915; LA32-NEXT: move $a0, $fp2916; LA32-NEXT: move $a1, $s22917; LA32-NEXT: bl __atomic_compare_exchange_82918; LA32-NEXT: ld.w $a5, $sp, 42919; LA32-NEXT: ld.w $a4, $sp, 02920; LA32-NEXT: bne $a0, $zero, .LBB55_72921; LA32-NEXT: .LBB55_2: # %atomicrmw.start2922; LA32-NEXT: # =>This Inner Loop Header: Depth=12923; LA32-NEXT: beq $a5, $s0, .LBB55_42924; LA32-NEXT: # %bb.3: # %atomicrmw.start2925; LA32-NEXT: # in Loop: Header=BB55_2 Depth=12926; LA32-NEXT: sltu $a0, $s0, $a52927; LA32-NEXT: b .LBB55_52928; LA32-NEXT: .p2align 4, , 162929; LA32-NEXT: .LBB55_4: # in Loop: Header=BB55_2 Depth=12930; LA32-NEXT: sltu $a0, $s1, $a42931; LA32-NEXT: .LBB55_5: # %atomicrmw.start2932; LA32-NEXT: # in Loop: Header=BB55_2 Depth=12933; LA32-NEXT: xori $a0, $a0, 12934; LA32-NEXT: move $a2, $a42935; LA32-NEXT: move $a3, $a52936; LA32-NEXT: bne $a0, $zero, .LBB55_12937; LA32-NEXT: # %bb.6: # %atomicrmw.start2938; LA32-NEXT: # in Loop: Header=BB55_2 Depth=12939; LA32-NEXT: move $a2, $s12940; LA32-NEXT: move $a3, $s02941; LA32-NEXT: b .LBB55_12942; LA32-NEXT: .LBB55_7: # %atomicrmw.end2943; LA32-NEXT: move $a0, $a42944; LA32-NEXT: move $a1, $a52945; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload2946; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload2947; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload2948; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload2949; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload2950; LA32-NEXT: addi.w $sp, $sp, 322951; LA32-NEXT: ret2952;2953; LA64-LABEL: atomicrmw_umin_i64_seq_cst:2954; LA64: # %bb.0:2955; LA64-NEXT: ammin_db.du $a2, $a1, $a02956; LA64-NEXT: move $a0, $a22957; LA64-NEXT: ret2958 %1 = atomicrmw umin ptr %a, i64 %b seq_cst2959 ret i64 %12960}2961 2962define i8 @atomicrmw_max_i8_seq_cst(ptr %a, i8 %b) nounwind {2963; LA32-LABEL: atomicrmw_max_i8_seq_cst:2964; LA32: # %bb.0:2965; LA32-NEXT: addi.w $a2, $zero, -42966; LA32-NEXT: and $a2, $a0, $a22967; LA32-NEXT: slli.w $a0, $a0, 32968; LA32-NEXT: andi $a3, $a0, 242969; LA32-NEXT: ori $a4, $zero, 2552970; LA32-NEXT: sll.w $a4, $a4, $a02971; LA32-NEXT: slli.w $a1, $a1, 242972; LA32-NEXT: srai.w $a1, $a1, 242973; LA32-NEXT: sll.w $a1, $a1, $a02974; LA32-NEXT: xori $a3, $a3, 242975; LA32-NEXT: .LBB56_1: # =>This Inner Loop Header: Depth=12976; LA32-NEXT: ll.w $a5, $a2, 02977; LA32-NEXT: and $a7, $a5, $a42978; LA32-NEXT: move $a6, $a52979; LA32-NEXT: sll.w $a7, $a7, $a32980; LA32-NEXT: sra.w $a7, $a7, $a32981; LA32-NEXT: bge $a7, $a1, .LBB56_32982; LA32-NEXT: # %bb.2: # in Loop: Header=BB56_1 Depth=12983; LA32-NEXT: xor $a6, $a5, $a12984; LA32-NEXT: and $a6, $a6, $a42985; LA32-NEXT: xor $a6, $a5, $a62986; LA32-NEXT: .LBB56_3: # in Loop: Header=BB56_1 Depth=12987; LA32-NEXT: sc.w $a6, $a2, 02988; LA32-NEXT: beq $a6, $zero, .LBB56_12989; LA32-NEXT: # %bb.4:2990; LA32-NEXT: srl.w $a0, $a5, $a02991; LA32-NEXT: ret2992;2993; LA64-LABEL: atomicrmw_max_i8_seq_cst:2994; LA64: # %bb.0:2995; LA64-NEXT: slli.d $a2, $a0, 32996; LA64-NEXT: bstrins.d $a0, $zero, 1, 02997; LA64-NEXT: andi $a3, $a2, 242998; LA64-NEXT: ori $a4, $zero, 2552999; LA64-NEXT: sll.w $a4, $a4, $a23000; LA64-NEXT: ext.w.b $a1, $a13001; LA64-NEXT: sll.w $a1, $a1, $a23002; LA64-NEXT: xori $a3, $a3, 563003; LA64-NEXT: .LBB56_1: # =>This Inner Loop Header: Depth=13004; LA64-NEXT: ll.w $a5, $a0, 03005; LA64-NEXT: and $a7, $a5, $a43006; LA64-NEXT: move $a6, $a53007; LA64-NEXT: sll.w $a7, $a7, $a33008; LA64-NEXT: sra.w $a7, $a7, $a33009; LA64-NEXT: bge $a7, $a1, .LBB56_33010; LA64-NEXT: # %bb.2: # in Loop: Header=BB56_1 Depth=13011; LA64-NEXT: xor $a6, $a5, $a13012; LA64-NEXT: and $a6, $a6, $a43013; LA64-NEXT: xor $a6, $a5, $a63014; LA64-NEXT: .LBB56_3: # in Loop: Header=BB56_1 Depth=13015; LA64-NEXT: sc.w $a6, $a0, 03016; LA64-NEXT: beq $a6, $zero, .LBB56_13017; LA64-NEXT: # %bb.4:3018; LA64-NEXT: srl.w $a0, $a5, $a23019; LA64-NEXT: ret3020 %1 = atomicrmw max ptr %a, i8 %b seq_cst3021 ret i8 %13022}3023 3024define i16 @atomicrmw_max_i16_seq_cst(ptr %a, i16 %b) nounwind {3025; LA32-LABEL: atomicrmw_max_i16_seq_cst:3026; LA32: # %bb.0:3027; LA32-NEXT: addi.w $a2, $zero, -43028; LA32-NEXT: and $a2, $a0, $a23029; LA32-NEXT: slli.w $a0, $a0, 33030; LA32-NEXT: andi $a3, $a0, 243031; LA32-NEXT: lu12i.w $a4, 153032; LA32-NEXT: ori $a4, $a4, 40953033; LA32-NEXT: sll.w $a4, $a4, $a03034; LA32-NEXT: slli.w $a1, $a1, 163035; LA32-NEXT: srai.w $a1, $a1, 163036; LA32-NEXT: sll.w $a1, $a1, $a03037; LA32-NEXT: ori $a5, $zero, 163038; LA32-NEXT: sub.w $a3, $a5, $a33039; LA32-NEXT: .LBB57_1: # =>This Inner Loop Header: Depth=13040; LA32-NEXT: ll.w $a5, $a2, 03041; LA32-NEXT: and $a7, $a5, $a43042; LA32-NEXT: move $a6, $a53043; LA32-NEXT: sll.w $a7, $a7, $a33044; LA32-NEXT: sra.w $a7, $a7, $a33045; LA32-NEXT: bge $a7, $a1, .LBB57_33046; LA32-NEXT: # %bb.2: # in Loop: Header=BB57_1 Depth=13047; LA32-NEXT: xor $a6, $a5, $a13048; LA32-NEXT: and $a6, $a6, $a43049; LA32-NEXT: xor $a6, $a5, $a63050; LA32-NEXT: .LBB57_3: # in Loop: Header=BB57_1 Depth=13051; LA32-NEXT: sc.w $a6, $a2, 03052; LA32-NEXT: beq $a6, $zero, .LBB57_13053; LA32-NEXT: # %bb.4:3054; LA32-NEXT: srl.w $a0, $a5, $a03055; LA32-NEXT: ret3056;3057; LA64-LABEL: atomicrmw_max_i16_seq_cst:3058; LA64: # %bb.0:3059; LA64-NEXT: slli.d $a2, $a0, 33060; LA64-NEXT: bstrins.d $a0, $zero, 1, 03061; LA64-NEXT: andi $a3, $a2, 243062; LA64-NEXT: lu12i.w $a4, 153063; LA64-NEXT: ori $a4, $a4, 40953064; LA64-NEXT: sll.w $a4, $a4, $a23065; LA64-NEXT: ext.w.h $a1, $a13066; LA64-NEXT: sll.w $a1, $a1, $a23067; LA64-NEXT: ori $a5, $zero, 483068; LA64-NEXT: sub.d $a3, $a5, $a33069; LA64-NEXT: .LBB57_1: # =>This Inner Loop Header: Depth=13070; LA64-NEXT: ll.w $a5, $a0, 03071; LA64-NEXT: and $a7, $a5, $a43072; LA64-NEXT: move $a6, $a53073; LA64-NEXT: sll.w $a7, $a7, $a33074; LA64-NEXT: sra.w $a7, $a7, $a33075; LA64-NEXT: bge $a7, $a1, .LBB57_33076; LA64-NEXT: # %bb.2: # in Loop: Header=BB57_1 Depth=13077; LA64-NEXT: xor $a6, $a5, $a13078; LA64-NEXT: and $a6, $a6, $a43079; LA64-NEXT: xor $a6, $a5, $a63080; LA64-NEXT: .LBB57_3: # in Loop: Header=BB57_1 Depth=13081; LA64-NEXT: sc.w $a6, $a0, 03082; LA64-NEXT: beq $a6, $zero, .LBB57_13083; LA64-NEXT: # %bb.4:3084; LA64-NEXT: srl.w $a0, $a5, $a23085; LA64-NEXT: ret3086 %1 = atomicrmw max ptr %a, i16 %b seq_cst3087 ret i16 %13088}3089 3090define i32 @atomicrmw_max_i32_seq_cst(ptr %a, i32 %b) nounwind {3091; LA32-LABEL: atomicrmw_max_i32_seq_cst:3092; LA32: # %bb.0:3093; LA32-NEXT: .LBB58_1: # =>This Inner Loop Header: Depth=13094; LA32-NEXT: ll.w $a2, $a0, 03095; LA32-NEXT: move $a3, $a23096; LA32-NEXT: bge $a2, $a1, .LBB58_33097; LA32-NEXT: # %bb.2: # in Loop: Header=BB58_1 Depth=13098; LA32-NEXT: move $a3, $a13099; LA32-NEXT: .LBB58_3: # in Loop: Header=BB58_1 Depth=13100; LA32-NEXT: sc.w $a3, $a0, 03101; LA32-NEXT: beq $a3, $zero, .LBB58_13102; LA32-NEXT: # %bb.4:3103; LA32-NEXT: move $a0, $a23104; LA32-NEXT: ret3105;3106; LA64-LABEL: atomicrmw_max_i32_seq_cst:3107; LA64: # %bb.0:3108; LA64-NEXT: ammax_db.w $a2, $a1, $a03109; LA64-NEXT: move $a0, $a23110; LA64-NEXT: ret3111 %1 = atomicrmw max ptr %a, i32 %b seq_cst3112 ret i32 %13113}3114 3115define i64 @atomicrmw_max_i64_seq_cst(ptr %a, i64 %b) nounwind {3116; LA32-LABEL: atomicrmw_max_i64_seq_cst:3117; LA32: # %bb.0:3118; LA32-NEXT: addi.w $sp, $sp, -323119; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill3120; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill3121; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill3122; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill3123; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill3124; LA32-NEXT: move $fp, $a03125; LA32-NEXT: ld.w $a5, $a0, 43126; LA32-NEXT: ld.w $a4, $a0, 03127; LA32-NEXT: move $s0, $a23128; LA32-NEXT: move $s1, $a13129; LA32-NEXT: addi.w $s2, $sp, 03130; LA32-NEXT: b .LBB59_23131; LA32-NEXT: .p2align 4, , 163132; LA32-NEXT: .LBB59_1: # %atomicrmw.start3133; LA32-NEXT: # in Loop: Header=BB59_2 Depth=13134; LA32-NEXT: st.w $a4, $sp, 03135; LA32-NEXT: st.w $a5, $sp, 43136; LA32-NEXT: ori $a4, $zero, 53137; LA32-NEXT: ori $a5, $zero, 53138; LA32-NEXT: move $a0, $fp3139; LA32-NEXT: move $a1, $s23140; LA32-NEXT: bl __atomic_compare_exchange_83141; LA32-NEXT: ld.w $a5, $sp, 43142; LA32-NEXT: ld.w $a4, $sp, 03143; LA32-NEXT: bne $a0, $zero, .LBB59_73144; LA32-NEXT: .LBB59_2: # %atomicrmw.start3145; LA32-NEXT: # =>This Inner Loop Header: Depth=13146; LA32-NEXT: beq $a5, $s0, .LBB59_43147; LA32-NEXT: # %bb.3: # %atomicrmw.start3148; LA32-NEXT: # in Loop: Header=BB59_2 Depth=13149; LA32-NEXT: slt $a0, $s0, $a53150; LA32-NEXT: b .LBB59_53151; LA32-NEXT: .p2align 4, , 163152; LA32-NEXT: .LBB59_4: # in Loop: Header=BB59_2 Depth=13153; LA32-NEXT: sltu $a0, $s1, $a43154; LA32-NEXT: .LBB59_5: # %atomicrmw.start3155; LA32-NEXT: # in Loop: Header=BB59_2 Depth=13156; LA32-NEXT: move $a2, $a43157; LA32-NEXT: move $a3, $a53158; LA32-NEXT: bne $a0, $zero, .LBB59_13159; LA32-NEXT: # %bb.6: # %atomicrmw.start3160; LA32-NEXT: # in Loop: Header=BB59_2 Depth=13161; LA32-NEXT: move $a2, $s13162; LA32-NEXT: move $a3, $s03163; LA32-NEXT: b .LBB59_13164; LA32-NEXT: .LBB59_7: # %atomicrmw.end3165; LA32-NEXT: move $a0, $a43166; LA32-NEXT: move $a1, $a53167; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload3168; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload3169; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload3170; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload3171; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload3172; LA32-NEXT: addi.w $sp, $sp, 323173; LA32-NEXT: ret3174;3175; LA64-LABEL: atomicrmw_max_i64_seq_cst:3176; LA64: # %bb.0:3177; LA64-NEXT: ammax_db.d $a2, $a1, $a03178; LA64-NEXT: move $a0, $a23179; LA64-NEXT: ret3180 %1 = atomicrmw max ptr %a, i64 %b seq_cst3181 ret i64 %13182}3183 3184define i8 @atomicrmw_min_i8_seq_cst(ptr %a, i8 %b) nounwind {3185; LA32-LABEL: atomicrmw_min_i8_seq_cst:3186; LA32: # %bb.0:3187; LA32-NEXT: addi.w $a2, $zero, -43188; LA32-NEXT: and $a2, $a0, $a23189; LA32-NEXT: slli.w $a0, $a0, 33190; LA32-NEXT: andi $a3, $a0, 243191; LA32-NEXT: ori $a4, $zero, 2553192; LA32-NEXT: sll.w $a4, $a4, $a03193; LA32-NEXT: slli.w $a1, $a1, 243194; LA32-NEXT: srai.w $a1, $a1, 243195; LA32-NEXT: sll.w $a1, $a1, $a03196; LA32-NEXT: xori $a3, $a3, 243197; LA32-NEXT: .LBB60_1: # =>This Inner Loop Header: Depth=13198; LA32-NEXT: ll.w $a5, $a2, 03199; LA32-NEXT: and $a7, $a5, $a43200; LA32-NEXT: move $a6, $a53201; LA32-NEXT: sll.w $a7, $a7, $a33202; LA32-NEXT: sra.w $a7, $a7, $a33203; LA32-NEXT: bge $a1, $a7, .LBB60_33204; LA32-NEXT: # %bb.2: # in Loop: Header=BB60_1 Depth=13205; LA32-NEXT: xor $a6, $a5, $a13206; LA32-NEXT: and $a6, $a6, $a43207; LA32-NEXT: xor $a6, $a5, $a63208; LA32-NEXT: .LBB60_3: # in Loop: Header=BB60_1 Depth=13209; LA32-NEXT: sc.w $a6, $a2, 03210; LA32-NEXT: beq $a6, $zero, .LBB60_13211; LA32-NEXT: # %bb.4:3212; LA32-NEXT: srl.w $a0, $a5, $a03213; LA32-NEXT: ret3214;3215; LA64-LABEL: atomicrmw_min_i8_seq_cst:3216; LA64: # %bb.0:3217; LA64-NEXT: slli.d $a2, $a0, 33218; LA64-NEXT: bstrins.d $a0, $zero, 1, 03219; LA64-NEXT: andi $a3, $a2, 243220; LA64-NEXT: ori $a4, $zero, 2553221; LA64-NEXT: sll.w $a4, $a4, $a23222; LA64-NEXT: ext.w.b $a1, $a13223; LA64-NEXT: sll.w $a1, $a1, $a23224; LA64-NEXT: xori $a3, $a3, 563225; LA64-NEXT: .LBB60_1: # =>This Inner Loop Header: Depth=13226; LA64-NEXT: ll.w $a5, $a0, 03227; LA64-NEXT: and $a7, $a5, $a43228; LA64-NEXT: move $a6, $a53229; LA64-NEXT: sll.w $a7, $a7, $a33230; LA64-NEXT: sra.w $a7, $a7, $a33231; LA64-NEXT: bge $a1, $a7, .LBB60_33232; LA64-NEXT: # %bb.2: # in Loop: Header=BB60_1 Depth=13233; LA64-NEXT: xor $a6, $a5, $a13234; LA64-NEXT: and $a6, $a6, $a43235; LA64-NEXT: xor $a6, $a5, $a63236; LA64-NEXT: .LBB60_3: # in Loop: Header=BB60_1 Depth=13237; LA64-NEXT: sc.w $a6, $a0, 03238; LA64-NEXT: beq $a6, $zero, .LBB60_13239; LA64-NEXT: # %bb.4:3240; LA64-NEXT: srl.w $a0, $a5, $a23241; LA64-NEXT: ret3242 %1 = atomicrmw min ptr %a, i8 %b seq_cst3243 ret i8 %13244}3245 3246define i16 @atomicrmw_min_i16_seq_cst(ptr %a, i16 %b) nounwind {3247; LA32-LABEL: atomicrmw_min_i16_seq_cst:3248; LA32: # %bb.0:3249; LA32-NEXT: addi.w $a2, $zero, -43250; LA32-NEXT: and $a2, $a0, $a23251; LA32-NEXT: slli.w $a0, $a0, 33252; LA32-NEXT: andi $a3, $a0, 243253; LA32-NEXT: lu12i.w $a4, 153254; LA32-NEXT: ori $a4, $a4, 40953255; LA32-NEXT: sll.w $a4, $a4, $a03256; LA32-NEXT: slli.w $a1, $a1, 163257; LA32-NEXT: srai.w $a1, $a1, 163258; LA32-NEXT: sll.w $a1, $a1, $a03259; LA32-NEXT: ori $a5, $zero, 163260; LA32-NEXT: sub.w $a3, $a5, $a33261; LA32-NEXT: .LBB61_1: # =>This Inner Loop Header: Depth=13262; LA32-NEXT: ll.w $a5, $a2, 03263; LA32-NEXT: and $a7, $a5, $a43264; LA32-NEXT: move $a6, $a53265; LA32-NEXT: sll.w $a7, $a7, $a33266; LA32-NEXT: sra.w $a7, $a7, $a33267; LA32-NEXT: bge $a1, $a7, .LBB61_33268; LA32-NEXT: # %bb.2: # in Loop: Header=BB61_1 Depth=13269; LA32-NEXT: xor $a6, $a5, $a13270; LA32-NEXT: and $a6, $a6, $a43271; LA32-NEXT: xor $a6, $a5, $a63272; LA32-NEXT: .LBB61_3: # in Loop: Header=BB61_1 Depth=13273; LA32-NEXT: sc.w $a6, $a2, 03274; LA32-NEXT: beq $a6, $zero, .LBB61_13275; LA32-NEXT: # %bb.4:3276; LA32-NEXT: srl.w $a0, $a5, $a03277; LA32-NEXT: ret3278;3279; LA64-LABEL: atomicrmw_min_i16_seq_cst:3280; LA64: # %bb.0:3281; LA64-NEXT: slli.d $a2, $a0, 33282; LA64-NEXT: bstrins.d $a0, $zero, 1, 03283; LA64-NEXT: andi $a3, $a2, 243284; LA64-NEXT: lu12i.w $a4, 153285; LA64-NEXT: ori $a4, $a4, 40953286; LA64-NEXT: sll.w $a4, $a4, $a23287; LA64-NEXT: ext.w.h $a1, $a13288; LA64-NEXT: sll.w $a1, $a1, $a23289; LA64-NEXT: ori $a5, $zero, 483290; LA64-NEXT: sub.d $a3, $a5, $a33291; LA64-NEXT: .LBB61_1: # =>This Inner Loop Header: Depth=13292; LA64-NEXT: ll.w $a5, $a0, 03293; LA64-NEXT: and $a7, $a5, $a43294; LA64-NEXT: move $a6, $a53295; LA64-NEXT: sll.w $a7, $a7, $a33296; LA64-NEXT: sra.w $a7, $a7, $a33297; LA64-NEXT: bge $a1, $a7, .LBB61_33298; LA64-NEXT: # %bb.2: # in Loop: Header=BB61_1 Depth=13299; LA64-NEXT: xor $a6, $a5, $a13300; LA64-NEXT: and $a6, $a6, $a43301; LA64-NEXT: xor $a6, $a5, $a63302; LA64-NEXT: .LBB61_3: # in Loop: Header=BB61_1 Depth=13303; LA64-NEXT: sc.w $a6, $a0, 03304; LA64-NEXT: beq $a6, $zero, .LBB61_13305; LA64-NEXT: # %bb.4:3306; LA64-NEXT: srl.w $a0, $a5, $a23307; LA64-NEXT: ret3308 %1 = atomicrmw min ptr %a, i16 %b seq_cst3309 ret i16 %13310}3311 3312define i32 @atomicrmw_min_i32_seq_cst(ptr %a, i32 %b) nounwind {3313; LA32-LABEL: atomicrmw_min_i32_seq_cst:3314; LA32: # %bb.0:3315; LA32-NEXT: .LBB62_1: # =>This Inner Loop Header: Depth=13316; LA32-NEXT: ll.w $a2, $a0, 03317; LA32-NEXT: move $a3, $a23318; LA32-NEXT: bge $a1, $a2, .LBB62_33319; LA32-NEXT: # %bb.2: # in Loop: Header=BB62_1 Depth=13320; LA32-NEXT: move $a3, $a13321; LA32-NEXT: .LBB62_3: # in Loop: Header=BB62_1 Depth=13322; LA32-NEXT: sc.w $a3, $a0, 03323; LA32-NEXT: beq $a3, $zero, .LBB62_13324; LA32-NEXT: # %bb.4:3325; LA32-NEXT: move $a0, $a23326; LA32-NEXT: ret3327;3328; LA64-LABEL: atomicrmw_min_i32_seq_cst:3329; LA64: # %bb.0:3330; LA64-NEXT: ammin_db.w $a2, $a1, $a03331; LA64-NEXT: move $a0, $a23332; LA64-NEXT: ret3333 %1 = atomicrmw min ptr %a, i32 %b seq_cst3334 ret i32 %13335}3336 3337define i64 @atomicrmw_min_i64_seq_cst(ptr %a, i64 %b) nounwind {3338; LA32-LABEL: atomicrmw_min_i64_seq_cst:3339; LA32: # %bb.0:3340; LA32-NEXT: addi.w $sp, $sp, -323341; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill3342; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill3343; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill3344; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill3345; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill3346; LA32-NEXT: move $fp, $a03347; LA32-NEXT: ld.w $a5, $a0, 43348; LA32-NEXT: ld.w $a4, $a0, 03349; LA32-NEXT: move $s0, $a23350; LA32-NEXT: move $s1, $a13351; LA32-NEXT: addi.w $s2, $sp, 03352; LA32-NEXT: b .LBB63_23353; LA32-NEXT: .p2align 4, , 163354; LA32-NEXT: .LBB63_1: # %atomicrmw.start3355; LA32-NEXT: # in Loop: Header=BB63_2 Depth=13356; LA32-NEXT: st.w $a4, $sp, 03357; LA32-NEXT: st.w $a5, $sp, 43358; LA32-NEXT: ori $a4, $zero, 53359; LA32-NEXT: ori $a5, $zero, 53360; LA32-NEXT: move $a0, $fp3361; LA32-NEXT: move $a1, $s23362; LA32-NEXT: bl __atomic_compare_exchange_83363; LA32-NEXT: ld.w $a5, $sp, 43364; LA32-NEXT: ld.w $a4, $sp, 03365; LA32-NEXT: bne $a0, $zero, .LBB63_73366; LA32-NEXT: .LBB63_2: # %atomicrmw.start3367; LA32-NEXT: # =>This Inner Loop Header: Depth=13368; LA32-NEXT: beq $a5, $s0, .LBB63_43369; LA32-NEXT: # %bb.3: # %atomicrmw.start3370; LA32-NEXT: # in Loop: Header=BB63_2 Depth=13371; LA32-NEXT: slt $a0, $s0, $a53372; LA32-NEXT: b .LBB63_53373; LA32-NEXT: .p2align 4, , 163374; LA32-NEXT: .LBB63_4: # in Loop: Header=BB63_2 Depth=13375; LA32-NEXT: sltu $a0, $s1, $a43376; LA32-NEXT: .LBB63_5: # %atomicrmw.start3377; LA32-NEXT: # in Loop: Header=BB63_2 Depth=13378; LA32-NEXT: xori $a0, $a0, 13379; LA32-NEXT: move $a2, $a43380; LA32-NEXT: move $a3, $a53381; LA32-NEXT: bne $a0, $zero, .LBB63_13382; LA32-NEXT: # %bb.6: # %atomicrmw.start3383; LA32-NEXT: # in Loop: Header=BB63_2 Depth=13384; LA32-NEXT: move $a2, $s13385; LA32-NEXT: move $a3, $s03386; LA32-NEXT: b .LBB63_13387; LA32-NEXT: .LBB63_7: # %atomicrmw.end3388; LA32-NEXT: move $a0, $a43389; LA32-NEXT: move $a1, $a53390; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload3391; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload3392; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload3393; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload3394; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload3395; LA32-NEXT: addi.w $sp, $sp, 323396; LA32-NEXT: ret3397;3398; LA64-LABEL: atomicrmw_min_i64_seq_cst:3399; LA64: # %bb.0:3400; LA64-NEXT: ammin_db.d $a2, $a1, $a03401; LA64-NEXT: move $a0, $a23402; LA64-NEXT: ret3403 %1 = atomicrmw min ptr %a, i64 %b seq_cst3404 ret i64 %13405}3406 3407define i8 @atomicrmw_umax_i8_monotonic(ptr %a, i8 %b) nounwind {3408; LA32-LABEL: atomicrmw_umax_i8_monotonic:3409; LA32: # %bb.0:3410; LA32-NEXT: addi.w $a2, $zero, -43411; LA32-NEXT: and $a2, $a0, $a23412; LA32-NEXT: slli.w $a0, $a0, 33413; LA32-NEXT: ori $a3, $zero, 2553414; LA32-NEXT: sll.w $a3, $a3, $a03415; LA32-NEXT: andi $a1, $a1, 2553416; LA32-NEXT: sll.w $a1, $a1, $a03417; LA32-NEXT: .LBB64_1: # =>This Inner Loop Header: Depth=13418; LA32-NEXT: ll.w $a4, $a2, 03419; LA32-NEXT: and $a6, $a4, $a33420; LA32-NEXT: move $a5, $a43421; LA32-NEXT: bgeu $a6, $a1, .LBB64_33422; LA32-NEXT: # %bb.2: # in Loop: Header=BB64_1 Depth=13423; LA32-NEXT: xor $a5, $a4, $a13424; LA32-NEXT: and $a5, $a5, $a33425; LA32-NEXT: xor $a5, $a4, $a53426; LA32-NEXT: .LBB64_3: # in Loop: Header=BB64_1 Depth=13427; LA32-NEXT: sc.w $a5, $a2, 03428; LA32-NEXT: beq $a5, $zero, .LBB64_13429; LA32-NEXT: # %bb.4:3430; LA32-NEXT: srl.w $a0, $a4, $a03431; LA32-NEXT: ret3432;3433; LA64-LABEL: atomicrmw_umax_i8_monotonic:3434; LA64: # %bb.0:3435; LA64-NEXT: slli.d $a2, $a0, 33436; LA64-NEXT: bstrins.d $a0, $zero, 1, 03437; LA64-NEXT: ori $a3, $zero, 2553438; LA64-NEXT: sll.w $a3, $a3, $a23439; LA64-NEXT: andi $a1, $a1, 2553440; LA64-NEXT: sll.w $a1, $a1, $a23441; LA64-NEXT: .LBB64_1: # =>This Inner Loop Header: Depth=13442; LA64-NEXT: ll.w $a4, $a0, 03443; LA64-NEXT: and $a6, $a4, $a33444; LA64-NEXT: move $a5, $a43445; LA64-NEXT: bgeu $a6, $a1, .LBB64_33446; LA64-NEXT: # %bb.2: # in Loop: Header=BB64_1 Depth=13447; LA64-NEXT: xor $a5, $a4, $a13448; LA64-NEXT: and $a5, $a5, $a33449; LA64-NEXT: xor $a5, $a4, $a53450; LA64-NEXT: .LBB64_3: # in Loop: Header=BB64_1 Depth=13451; LA64-NEXT: sc.w $a5, $a0, 03452; LA64-NEXT: beq $a5, $zero, .LBB64_13453; LA64-NEXT: # %bb.4:3454; LA64-NEXT: srl.w $a0, $a4, $a23455; LA64-NEXT: ret3456 %1 = atomicrmw umax ptr %a, i8 %b monotonic3457 ret i8 %13458}3459 3460define i16 @atomicrmw_umax_i16_monotonic(ptr %a, i16 %b) nounwind {3461; LA32-LABEL: atomicrmw_umax_i16_monotonic:3462; LA32: # %bb.0:3463; LA32-NEXT: addi.w $a2, $zero, -43464; LA32-NEXT: and $a2, $a0, $a23465; LA32-NEXT: slli.w $a0, $a0, 33466; LA32-NEXT: lu12i.w $a3, 153467; LA32-NEXT: ori $a3, $a3, 40953468; LA32-NEXT: sll.w $a4, $a3, $a03469; LA32-NEXT: and $a1, $a1, $a33470; LA32-NEXT: sll.w $a1, $a1, $a03471; LA32-NEXT: .LBB65_1: # =>This Inner Loop Header: Depth=13472; LA32-NEXT: ll.w $a3, $a2, 03473; LA32-NEXT: and $a6, $a3, $a43474; LA32-NEXT: move $a5, $a33475; LA32-NEXT: bgeu $a6, $a1, .LBB65_33476; LA32-NEXT: # %bb.2: # in Loop: Header=BB65_1 Depth=13477; LA32-NEXT: xor $a5, $a3, $a13478; LA32-NEXT: and $a5, $a5, $a43479; LA32-NEXT: xor $a5, $a3, $a53480; LA32-NEXT: .LBB65_3: # in Loop: Header=BB65_1 Depth=13481; LA32-NEXT: sc.w $a5, $a2, 03482; LA32-NEXT: beq $a5, $zero, .LBB65_13483; LA32-NEXT: # %bb.4:3484; LA32-NEXT: srl.w $a0, $a3, $a03485; LA32-NEXT: ret3486;3487; LA64-LABEL: atomicrmw_umax_i16_monotonic:3488; LA64: # %bb.0:3489; LA64-NEXT: slli.d $a2, $a0, 33490; LA64-NEXT: bstrins.d $a0, $zero, 1, 03491; LA64-NEXT: lu12i.w $a3, 153492; LA64-NEXT: ori $a3, $a3, 40953493; LA64-NEXT: sll.w $a3, $a3, $a23494; LA64-NEXT: bstrpick.d $a1, $a1, 15, 03495; LA64-NEXT: sll.w $a1, $a1, $a23496; LA64-NEXT: .LBB65_1: # =>This Inner Loop Header: Depth=13497; LA64-NEXT: ll.w $a4, $a0, 03498; LA64-NEXT: and $a6, $a4, $a33499; LA64-NEXT: move $a5, $a43500; LA64-NEXT: bgeu $a6, $a1, .LBB65_33501; LA64-NEXT: # %bb.2: # in Loop: Header=BB65_1 Depth=13502; LA64-NEXT: xor $a5, $a4, $a13503; LA64-NEXT: and $a5, $a5, $a33504; LA64-NEXT: xor $a5, $a4, $a53505; LA64-NEXT: .LBB65_3: # in Loop: Header=BB65_1 Depth=13506; LA64-NEXT: sc.w $a5, $a0, 03507; LA64-NEXT: beq $a5, $zero, .LBB65_13508; LA64-NEXT: # %bb.4:3509; LA64-NEXT: srl.w $a0, $a4, $a23510; LA64-NEXT: ret3511 %1 = atomicrmw umax ptr %a, i16 %b monotonic3512 ret i16 %13513}3514 3515define i32 @atomicrmw_umax_i32_monotonic(ptr %a, i32 %b) nounwind {3516; LA32-LABEL: atomicrmw_umax_i32_monotonic:3517; LA32: # %bb.0:3518; LA32-NEXT: .LBB66_1: # =>This Inner Loop Header: Depth=13519; LA32-NEXT: ll.w $a2, $a0, 03520; LA32-NEXT: move $a3, $a23521; LA32-NEXT: bgeu $a2, $a1, .LBB66_33522; LA32-NEXT: # %bb.2: # in Loop: Header=BB66_1 Depth=13523; LA32-NEXT: move $a3, $a13524; LA32-NEXT: .LBB66_3: # in Loop: Header=BB66_1 Depth=13525; LA32-NEXT: sc.w $a3, $a0, 03526; LA32-NEXT: beq $a3, $zero, .LBB66_13527; LA32-NEXT: # %bb.4:3528; LA32-NEXT: move $a0, $a23529; LA32-NEXT: ret3530;3531; LA64-LABEL: atomicrmw_umax_i32_monotonic:3532; LA64: # %bb.0:3533; LA64-NEXT: ammax.wu $a2, $a1, $a03534; LA64-NEXT: move $a0, $a23535; LA64-NEXT: ret3536 %1 = atomicrmw umax ptr %a, i32 %b monotonic3537 ret i32 %13538}3539 3540define i64 @atomicrmw_umax_i64_monotonic(ptr %a, i64 %b) nounwind {3541; LA32-LABEL: atomicrmw_umax_i64_monotonic:3542; LA32: # %bb.0:3543; LA32-NEXT: addi.w $sp, $sp, -323544; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill3545; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill3546; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill3547; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill3548; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill3549; LA32-NEXT: move $fp, $a03550; LA32-NEXT: ld.w $a5, $a0, 43551; LA32-NEXT: ld.w $a4, $a0, 03552; LA32-NEXT: move $s0, $a23553; LA32-NEXT: move $s1, $a13554; LA32-NEXT: addi.w $s2, $sp, 03555; LA32-NEXT: b .LBB67_23556; LA32-NEXT: .p2align 4, , 163557; LA32-NEXT: .LBB67_1: # %atomicrmw.start3558; LA32-NEXT: # in Loop: Header=BB67_2 Depth=13559; LA32-NEXT: st.w $a4, $sp, 03560; LA32-NEXT: st.w $a5, $sp, 43561; LA32-NEXT: move $a0, $fp3562; LA32-NEXT: move $a1, $s23563; LA32-NEXT: move $a4, $zero3564; LA32-NEXT: move $a5, $zero3565; LA32-NEXT: bl __atomic_compare_exchange_83566; LA32-NEXT: ld.w $a5, $sp, 43567; LA32-NEXT: ld.w $a4, $sp, 03568; LA32-NEXT: bne $a0, $zero, .LBB67_73569; LA32-NEXT: .LBB67_2: # %atomicrmw.start3570; LA32-NEXT: # =>This Inner Loop Header: Depth=13571; LA32-NEXT: beq $a5, $s0, .LBB67_43572; LA32-NEXT: # %bb.3: # %atomicrmw.start3573; LA32-NEXT: # in Loop: Header=BB67_2 Depth=13574; LA32-NEXT: sltu $a0, $s0, $a53575; LA32-NEXT: b .LBB67_53576; LA32-NEXT: .p2align 4, , 163577; LA32-NEXT: .LBB67_4: # in Loop: Header=BB67_2 Depth=13578; LA32-NEXT: sltu $a0, $s1, $a43579; LA32-NEXT: .LBB67_5: # %atomicrmw.start3580; LA32-NEXT: # in Loop: Header=BB67_2 Depth=13581; LA32-NEXT: move $a2, $a43582; LA32-NEXT: move $a3, $a53583; LA32-NEXT: bne $a0, $zero, .LBB67_13584; LA32-NEXT: # %bb.6: # %atomicrmw.start3585; LA32-NEXT: # in Loop: Header=BB67_2 Depth=13586; LA32-NEXT: move $a2, $s13587; LA32-NEXT: move $a3, $s03588; LA32-NEXT: b .LBB67_13589; LA32-NEXT: .LBB67_7: # %atomicrmw.end3590; LA32-NEXT: move $a0, $a43591; LA32-NEXT: move $a1, $a53592; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload3593; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload3594; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload3595; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload3596; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload3597; LA32-NEXT: addi.w $sp, $sp, 323598; LA32-NEXT: ret3599;3600; LA64-LABEL: atomicrmw_umax_i64_monotonic:3601; LA64: # %bb.0:3602; LA64-NEXT: ammax.du $a2, $a1, $a03603; LA64-NEXT: move $a0, $a23604; LA64-NEXT: ret3605 %1 = atomicrmw umax ptr %a, i64 %b monotonic3606 ret i64 %13607}3608 3609define i8 @atomicrmw_umin_i8_monotonic(ptr %a, i8 %b) nounwind {3610; LA32-LABEL: atomicrmw_umin_i8_monotonic:3611; LA32: # %bb.0:3612; LA32-NEXT: addi.w $a2, $zero, -43613; LA32-NEXT: and $a2, $a0, $a23614; LA32-NEXT: slli.w $a0, $a0, 33615; LA32-NEXT: ori $a3, $zero, 2553616; LA32-NEXT: sll.w $a3, $a3, $a03617; LA32-NEXT: andi $a1, $a1, 2553618; LA32-NEXT: sll.w $a1, $a1, $a03619; LA32-NEXT: .LBB68_1: # =>This Inner Loop Header: Depth=13620; LA32-NEXT: ll.w $a4, $a2, 03621; LA32-NEXT: and $a6, $a4, $a33622; LA32-NEXT: move $a5, $a43623; LA32-NEXT: bgeu $a1, $a6, .LBB68_33624; LA32-NEXT: # %bb.2: # in Loop: Header=BB68_1 Depth=13625; LA32-NEXT: xor $a5, $a4, $a13626; LA32-NEXT: and $a5, $a5, $a33627; LA32-NEXT: xor $a5, $a4, $a53628; LA32-NEXT: .LBB68_3: # in Loop: Header=BB68_1 Depth=13629; LA32-NEXT: sc.w $a5, $a2, 03630; LA32-NEXT: beq $a5, $zero, .LBB68_13631; LA32-NEXT: # %bb.4:3632; LA32-NEXT: srl.w $a0, $a4, $a03633; LA32-NEXT: ret3634;3635; LA64-LABEL: atomicrmw_umin_i8_monotonic:3636; LA64: # %bb.0:3637; LA64-NEXT: slli.d $a2, $a0, 33638; LA64-NEXT: bstrins.d $a0, $zero, 1, 03639; LA64-NEXT: ori $a3, $zero, 2553640; LA64-NEXT: sll.w $a3, $a3, $a23641; LA64-NEXT: andi $a1, $a1, 2553642; LA64-NEXT: sll.w $a1, $a1, $a23643; LA64-NEXT: .LBB68_1: # =>This Inner Loop Header: Depth=13644; LA64-NEXT: ll.w $a4, $a0, 03645; LA64-NEXT: and $a6, $a4, $a33646; LA64-NEXT: move $a5, $a43647; LA64-NEXT: bgeu $a1, $a6, .LBB68_33648; LA64-NEXT: # %bb.2: # in Loop: Header=BB68_1 Depth=13649; LA64-NEXT: xor $a5, $a4, $a13650; LA64-NEXT: and $a5, $a5, $a33651; LA64-NEXT: xor $a5, $a4, $a53652; LA64-NEXT: .LBB68_3: # in Loop: Header=BB68_1 Depth=13653; LA64-NEXT: sc.w $a5, $a0, 03654; LA64-NEXT: beq $a5, $zero, .LBB68_13655; LA64-NEXT: # %bb.4:3656; LA64-NEXT: srl.w $a0, $a4, $a23657; LA64-NEXT: ret3658 %1 = atomicrmw umin ptr %a, i8 %b monotonic3659 ret i8 %13660}3661 3662define i16 @atomicrmw_umin_i16_monotonic(ptr %a, i16 %b) nounwind {3663; LA32-LABEL: atomicrmw_umin_i16_monotonic:3664; LA32: # %bb.0:3665; LA32-NEXT: addi.w $a2, $zero, -43666; LA32-NEXT: and $a2, $a0, $a23667; LA32-NEXT: slli.w $a0, $a0, 33668; LA32-NEXT: lu12i.w $a3, 153669; LA32-NEXT: ori $a3, $a3, 40953670; LA32-NEXT: sll.w $a4, $a3, $a03671; LA32-NEXT: and $a1, $a1, $a33672; LA32-NEXT: sll.w $a1, $a1, $a03673; LA32-NEXT: .LBB69_1: # =>This Inner Loop Header: Depth=13674; LA32-NEXT: ll.w $a3, $a2, 03675; LA32-NEXT: and $a6, $a3, $a43676; LA32-NEXT: move $a5, $a33677; LA32-NEXT: bgeu $a1, $a6, .LBB69_33678; LA32-NEXT: # %bb.2: # in Loop: Header=BB69_1 Depth=13679; LA32-NEXT: xor $a5, $a3, $a13680; LA32-NEXT: and $a5, $a5, $a43681; LA32-NEXT: xor $a5, $a3, $a53682; LA32-NEXT: .LBB69_3: # in Loop: Header=BB69_1 Depth=13683; LA32-NEXT: sc.w $a5, $a2, 03684; LA32-NEXT: beq $a5, $zero, .LBB69_13685; LA32-NEXT: # %bb.4:3686; LA32-NEXT: srl.w $a0, $a3, $a03687; LA32-NEXT: ret3688;3689; LA64-LABEL: atomicrmw_umin_i16_monotonic:3690; LA64: # %bb.0:3691; LA64-NEXT: slli.d $a2, $a0, 33692; LA64-NEXT: bstrins.d $a0, $zero, 1, 03693; LA64-NEXT: lu12i.w $a3, 153694; LA64-NEXT: ori $a3, $a3, 40953695; LA64-NEXT: sll.w $a3, $a3, $a23696; LA64-NEXT: bstrpick.d $a1, $a1, 15, 03697; LA64-NEXT: sll.w $a1, $a1, $a23698; LA64-NEXT: .LBB69_1: # =>This Inner Loop Header: Depth=13699; LA64-NEXT: ll.w $a4, $a0, 03700; LA64-NEXT: and $a6, $a4, $a33701; LA64-NEXT: move $a5, $a43702; LA64-NEXT: bgeu $a1, $a6, .LBB69_33703; LA64-NEXT: # %bb.2: # in Loop: Header=BB69_1 Depth=13704; LA64-NEXT: xor $a5, $a4, $a13705; LA64-NEXT: and $a5, $a5, $a33706; LA64-NEXT: xor $a5, $a4, $a53707; LA64-NEXT: .LBB69_3: # in Loop: Header=BB69_1 Depth=13708; LA64-NEXT: sc.w $a5, $a0, 03709; LA64-NEXT: beq $a5, $zero, .LBB69_13710; LA64-NEXT: # %bb.4:3711; LA64-NEXT: srl.w $a0, $a4, $a23712; LA64-NEXT: ret3713 %1 = atomicrmw umin ptr %a, i16 %b monotonic3714 ret i16 %13715}3716 3717define i32 @atomicrmw_umin_i32_monotonic(ptr %a, i32 %b) nounwind {3718; LA32-LABEL: atomicrmw_umin_i32_monotonic:3719; LA32: # %bb.0:3720; LA32-NEXT: .LBB70_1: # =>This Inner Loop Header: Depth=13721; LA32-NEXT: ll.w $a2, $a0, 03722; LA32-NEXT: move $a3, $a23723; LA32-NEXT: bgeu $a1, $a2, .LBB70_33724; LA32-NEXT: # %bb.2: # in Loop: Header=BB70_1 Depth=13725; LA32-NEXT: move $a3, $a13726; LA32-NEXT: .LBB70_3: # in Loop: Header=BB70_1 Depth=13727; LA32-NEXT: sc.w $a3, $a0, 03728; LA32-NEXT: beq $a3, $zero, .LBB70_13729; LA32-NEXT: # %bb.4:3730; LA32-NEXT: move $a0, $a23731; LA32-NEXT: ret3732;3733; LA64-LABEL: atomicrmw_umin_i32_monotonic:3734; LA64: # %bb.0:3735; LA64-NEXT: ammin.wu $a2, $a1, $a03736; LA64-NEXT: move $a0, $a23737; LA64-NEXT: ret3738 %1 = atomicrmw umin ptr %a, i32 %b monotonic3739 ret i32 %13740}3741 3742define i64 @atomicrmw_umin_i64_monotonic(ptr %a, i64 %b) nounwind {3743; LA32-LABEL: atomicrmw_umin_i64_monotonic:3744; LA32: # %bb.0:3745; LA32-NEXT: addi.w $sp, $sp, -323746; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill3747; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill3748; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill3749; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill3750; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill3751; LA32-NEXT: move $fp, $a03752; LA32-NEXT: ld.w $a5, $a0, 43753; LA32-NEXT: ld.w $a4, $a0, 03754; LA32-NEXT: move $s0, $a23755; LA32-NEXT: move $s1, $a13756; LA32-NEXT: addi.w $s2, $sp, 03757; LA32-NEXT: b .LBB71_23758; LA32-NEXT: .p2align 4, , 163759; LA32-NEXT: .LBB71_1: # %atomicrmw.start3760; LA32-NEXT: # in Loop: Header=BB71_2 Depth=13761; LA32-NEXT: st.w $a4, $sp, 03762; LA32-NEXT: st.w $a5, $sp, 43763; LA32-NEXT: move $a0, $fp3764; LA32-NEXT: move $a1, $s23765; LA32-NEXT: move $a4, $zero3766; LA32-NEXT: move $a5, $zero3767; LA32-NEXT: bl __atomic_compare_exchange_83768; LA32-NEXT: ld.w $a5, $sp, 43769; LA32-NEXT: ld.w $a4, $sp, 03770; LA32-NEXT: bne $a0, $zero, .LBB71_73771; LA32-NEXT: .LBB71_2: # %atomicrmw.start3772; LA32-NEXT: # =>This Inner Loop Header: Depth=13773; LA32-NEXT: beq $a5, $s0, .LBB71_43774; LA32-NEXT: # %bb.3: # %atomicrmw.start3775; LA32-NEXT: # in Loop: Header=BB71_2 Depth=13776; LA32-NEXT: sltu $a0, $s0, $a53777; LA32-NEXT: b .LBB71_53778; LA32-NEXT: .p2align 4, , 163779; LA32-NEXT: .LBB71_4: # in Loop: Header=BB71_2 Depth=13780; LA32-NEXT: sltu $a0, $s1, $a43781; LA32-NEXT: .LBB71_5: # %atomicrmw.start3782; LA32-NEXT: # in Loop: Header=BB71_2 Depth=13783; LA32-NEXT: xori $a0, $a0, 13784; LA32-NEXT: move $a2, $a43785; LA32-NEXT: move $a3, $a53786; LA32-NEXT: bne $a0, $zero, .LBB71_13787; LA32-NEXT: # %bb.6: # %atomicrmw.start3788; LA32-NEXT: # in Loop: Header=BB71_2 Depth=13789; LA32-NEXT: move $a2, $s13790; LA32-NEXT: move $a3, $s03791; LA32-NEXT: b .LBB71_13792; LA32-NEXT: .LBB71_7: # %atomicrmw.end3793; LA32-NEXT: move $a0, $a43794; LA32-NEXT: move $a1, $a53795; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload3796; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload3797; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload3798; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload3799; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload3800; LA32-NEXT: addi.w $sp, $sp, 323801; LA32-NEXT: ret3802;3803; LA64-LABEL: atomicrmw_umin_i64_monotonic:3804; LA64: # %bb.0:3805; LA64-NEXT: ammin.du $a2, $a1, $a03806; LA64-NEXT: move $a0, $a23807; LA64-NEXT: ret3808 %1 = atomicrmw umin ptr %a, i64 %b monotonic3809 ret i64 %13810}3811 3812define i8 @atomicrmw_max_i8_monotonic(ptr %a, i8 %b) nounwind {3813; LA32-LABEL: atomicrmw_max_i8_monotonic:3814; LA32: # %bb.0:3815; LA32-NEXT: addi.w $a2, $zero, -43816; LA32-NEXT: and $a2, $a0, $a23817; LA32-NEXT: slli.w $a0, $a0, 33818; LA32-NEXT: andi $a3, $a0, 243819; LA32-NEXT: ori $a4, $zero, 2553820; LA32-NEXT: sll.w $a4, $a4, $a03821; LA32-NEXT: slli.w $a1, $a1, 243822; LA32-NEXT: srai.w $a1, $a1, 243823; LA32-NEXT: sll.w $a1, $a1, $a03824; LA32-NEXT: xori $a3, $a3, 243825; LA32-NEXT: .LBB72_1: # =>This Inner Loop Header: Depth=13826; LA32-NEXT: ll.w $a5, $a2, 03827; LA32-NEXT: and $a7, $a5, $a43828; LA32-NEXT: move $a6, $a53829; LA32-NEXT: sll.w $a7, $a7, $a33830; LA32-NEXT: sra.w $a7, $a7, $a33831; LA32-NEXT: bge $a7, $a1, .LBB72_33832; LA32-NEXT: # %bb.2: # in Loop: Header=BB72_1 Depth=13833; LA32-NEXT: xor $a6, $a5, $a13834; LA32-NEXT: and $a6, $a6, $a43835; LA32-NEXT: xor $a6, $a5, $a63836; LA32-NEXT: .LBB72_3: # in Loop: Header=BB72_1 Depth=13837; LA32-NEXT: sc.w $a6, $a2, 03838; LA32-NEXT: beq $a6, $zero, .LBB72_13839; LA32-NEXT: # %bb.4:3840; LA32-NEXT: srl.w $a0, $a5, $a03841; LA32-NEXT: ret3842;3843; LA64-LABEL: atomicrmw_max_i8_monotonic:3844; LA64: # %bb.0:3845; LA64-NEXT: slli.d $a2, $a0, 33846; LA64-NEXT: bstrins.d $a0, $zero, 1, 03847; LA64-NEXT: andi $a3, $a2, 243848; LA64-NEXT: ori $a4, $zero, 2553849; LA64-NEXT: sll.w $a4, $a4, $a23850; LA64-NEXT: ext.w.b $a1, $a13851; LA64-NEXT: sll.w $a1, $a1, $a23852; LA64-NEXT: xori $a3, $a3, 563853; LA64-NEXT: .LBB72_1: # =>This Inner Loop Header: Depth=13854; LA64-NEXT: ll.w $a5, $a0, 03855; LA64-NEXT: and $a7, $a5, $a43856; LA64-NEXT: move $a6, $a53857; LA64-NEXT: sll.w $a7, $a7, $a33858; LA64-NEXT: sra.w $a7, $a7, $a33859; LA64-NEXT: bge $a7, $a1, .LBB72_33860; LA64-NEXT: # %bb.2: # in Loop: Header=BB72_1 Depth=13861; LA64-NEXT: xor $a6, $a5, $a13862; LA64-NEXT: and $a6, $a6, $a43863; LA64-NEXT: xor $a6, $a5, $a63864; LA64-NEXT: .LBB72_3: # in Loop: Header=BB72_1 Depth=13865; LA64-NEXT: sc.w $a6, $a0, 03866; LA64-NEXT: beq $a6, $zero, .LBB72_13867; LA64-NEXT: # %bb.4:3868; LA64-NEXT: srl.w $a0, $a5, $a23869; LA64-NEXT: ret3870 %1 = atomicrmw max ptr %a, i8 %b monotonic3871 ret i8 %13872}3873 3874define i16 @atomicrmw_max_i16_monotonic(ptr %a, i16 %b) nounwind {3875; LA32-LABEL: atomicrmw_max_i16_monotonic:3876; LA32: # %bb.0:3877; LA32-NEXT: addi.w $a2, $zero, -43878; LA32-NEXT: and $a2, $a0, $a23879; LA32-NEXT: slli.w $a0, $a0, 33880; LA32-NEXT: andi $a3, $a0, 243881; LA32-NEXT: lu12i.w $a4, 153882; LA32-NEXT: ori $a4, $a4, 40953883; LA32-NEXT: sll.w $a4, $a4, $a03884; LA32-NEXT: slli.w $a1, $a1, 163885; LA32-NEXT: srai.w $a1, $a1, 163886; LA32-NEXT: sll.w $a1, $a1, $a03887; LA32-NEXT: ori $a5, $zero, 163888; LA32-NEXT: sub.w $a3, $a5, $a33889; LA32-NEXT: .LBB73_1: # =>This Inner Loop Header: Depth=13890; LA32-NEXT: ll.w $a5, $a2, 03891; LA32-NEXT: and $a7, $a5, $a43892; LA32-NEXT: move $a6, $a53893; LA32-NEXT: sll.w $a7, $a7, $a33894; LA32-NEXT: sra.w $a7, $a7, $a33895; LA32-NEXT: bge $a7, $a1, .LBB73_33896; LA32-NEXT: # %bb.2: # in Loop: Header=BB73_1 Depth=13897; LA32-NEXT: xor $a6, $a5, $a13898; LA32-NEXT: and $a6, $a6, $a43899; LA32-NEXT: xor $a6, $a5, $a63900; LA32-NEXT: .LBB73_3: # in Loop: Header=BB73_1 Depth=13901; LA32-NEXT: sc.w $a6, $a2, 03902; LA32-NEXT: beq $a6, $zero, .LBB73_13903; LA32-NEXT: # %bb.4:3904; LA32-NEXT: srl.w $a0, $a5, $a03905; LA32-NEXT: ret3906;3907; LA64-LABEL: atomicrmw_max_i16_monotonic:3908; LA64: # %bb.0:3909; LA64-NEXT: slli.d $a2, $a0, 33910; LA64-NEXT: bstrins.d $a0, $zero, 1, 03911; LA64-NEXT: andi $a3, $a2, 243912; LA64-NEXT: lu12i.w $a4, 153913; LA64-NEXT: ori $a4, $a4, 40953914; LA64-NEXT: sll.w $a4, $a4, $a23915; LA64-NEXT: ext.w.h $a1, $a13916; LA64-NEXT: sll.w $a1, $a1, $a23917; LA64-NEXT: ori $a5, $zero, 483918; LA64-NEXT: sub.d $a3, $a5, $a33919; LA64-NEXT: .LBB73_1: # =>This Inner Loop Header: Depth=13920; LA64-NEXT: ll.w $a5, $a0, 03921; LA64-NEXT: and $a7, $a5, $a43922; LA64-NEXT: move $a6, $a53923; LA64-NEXT: sll.w $a7, $a7, $a33924; LA64-NEXT: sra.w $a7, $a7, $a33925; LA64-NEXT: bge $a7, $a1, .LBB73_33926; LA64-NEXT: # %bb.2: # in Loop: Header=BB73_1 Depth=13927; LA64-NEXT: xor $a6, $a5, $a13928; LA64-NEXT: and $a6, $a6, $a43929; LA64-NEXT: xor $a6, $a5, $a63930; LA64-NEXT: .LBB73_3: # in Loop: Header=BB73_1 Depth=13931; LA64-NEXT: sc.w $a6, $a0, 03932; LA64-NEXT: beq $a6, $zero, .LBB73_13933; LA64-NEXT: # %bb.4:3934; LA64-NEXT: srl.w $a0, $a5, $a23935; LA64-NEXT: ret3936 %1 = atomicrmw max ptr %a, i16 %b monotonic3937 ret i16 %13938}3939 3940define i32 @atomicrmw_max_i32_monotonic(ptr %a, i32 %b) nounwind {3941; LA32-LABEL: atomicrmw_max_i32_monotonic:3942; LA32: # %bb.0:3943; LA32-NEXT: .LBB74_1: # =>This Inner Loop Header: Depth=13944; LA32-NEXT: ll.w $a2, $a0, 03945; LA32-NEXT: move $a3, $a23946; LA32-NEXT: bge $a2, $a1, .LBB74_33947; LA32-NEXT: # %bb.2: # in Loop: Header=BB74_1 Depth=13948; LA32-NEXT: move $a3, $a13949; LA32-NEXT: .LBB74_3: # in Loop: Header=BB74_1 Depth=13950; LA32-NEXT: sc.w $a3, $a0, 03951; LA32-NEXT: beq $a3, $zero, .LBB74_13952; LA32-NEXT: # %bb.4:3953; LA32-NEXT: move $a0, $a23954; LA32-NEXT: ret3955;3956; LA64-LABEL: atomicrmw_max_i32_monotonic:3957; LA64: # %bb.0:3958; LA64-NEXT: ammax.w $a2, $a1, $a03959; LA64-NEXT: move $a0, $a23960; LA64-NEXT: ret3961 %1 = atomicrmw max ptr %a, i32 %b monotonic3962 ret i32 %13963}3964 3965define i64 @atomicrmw_max_i64_monotonic(ptr %a, i64 %b) nounwind {3966; LA32-LABEL: atomicrmw_max_i64_monotonic:3967; LA32: # %bb.0:3968; LA32-NEXT: addi.w $sp, $sp, -323969; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill3970; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill3971; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill3972; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill3973; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill3974; LA32-NEXT: move $fp, $a03975; LA32-NEXT: ld.w $a5, $a0, 43976; LA32-NEXT: ld.w $a4, $a0, 03977; LA32-NEXT: move $s0, $a23978; LA32-NEXT: move $s1, $a13979; LA32-NEXT: addi.w $s2, $sp, 03980; LA32-NEXT: b .LBB75_23981; LA32-NEXT: .p2align 4, , 163982; LA32-NEXT: .LBB75_1: # %atomicrmw.start3983; LA32-NEXT: # in Loop: Header=BB75_2 Depth=13984; LA32-NEXT: st.w $a4, $sp, 03985; LA32-NEXT: st.w $a5, $sp, 43986; LA32-NEXT: move $a0, $fp3987; LA32-NEXT: move $a1, $s23988; LA32-NEXT: move $a4, $zero3989; LA32-NEXT: move $a5, $zero3990; LA32-NEXT: bl __atomic_compare_exchange_83991; LA32-NEXT: ld.w $a5, $sp, 43992; LA32-NEXT: ld.w $a4, $sp, 03993; LA32-NEXT: bne $a0, $zero, .LBB75_73994; LA32-NEXT: .LBB75_2: # %atomicrmw.start3995; LA32-NEXT: # =>This Inner Loop Header: Depth=13996; LA32-NEXT: beq $a5, $s0, .LBB75_43997; LA32-NEXT: # %bb.3: # %atomicrmw.start3998; LA32-NEXT: # in Loop: Header=BB75_2 Depth=13999; LA32-NEXT: slt $a0, $s0, $a54000; LA32-NEXT: b .LBB75_54001; LA32-NEXT: .p2align 4, , 164002; LA32-NEXT: .LBB75_4: # in Loop: Header=BB75_2 Depth=14003; LA32-NEXT: sltu $a0, $s1, $a44004; LA32-NEXT: .LBB75_5: # %atomicrmw.start4005; LA32-NEXT: # in Loop: Header=BB75_2 Depth=14006; LA32-NEXT: move $a2, $a44007; LA32-NEXT: move $a3, $a54008; LA32-NEXT: bne $a0, $zero, .LBB75_14009; LA32-NEXT: # %bb.6: # %atomicrmw.start4010; LA32-NEXT: # in Loop: Header=BB75_2 Depth=14011; LA32-NEXT: move $a2, $s14012; LA32-NEXT: move $a3, $s04013; LA32-NEXT: b .LBB75_14014; LA32-NEXT: .LBB75_7: # %atomicrmw.end4015; LA32-NEXT: move $a0, $a44016; LA32-NEXT: move $a1, $a54017; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload4018; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload4019; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload4020; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload4021; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload4022; LA32-NEXT: addi.w $sp, $sp, 324023; LA32-NEXT: ret4024;4025; LA64-LABEL: atomicrmw_max_i64_monotonic:4026; LA64: # %bb.0:4027; LA64-NEXT: ammax.d $a2, $a1, $a04028; LA64-NEXT: move $a0, $a24029; LA64-NEXT: ret4030 %1 = atomicrmw max ptr %a, i64 %b monotonic4031 ret i64 %14032}4033 4034define i8 @atomicrmw_min_i8_monotonic(ptr %a, i8 %b) nounwind {4035; LA32-LABEL: atomicrmw_min_i8_monotonic:4036; LA32: # %bb.0:4037; LA32-NEXT: addi.w $a2, $zero, -44038; LA32-NEXT: and $a2, $a0, $a24039; LA32-NEXT: slli.w $a0, $a0, 34040; LA32-NEXT: andi $a3, $a0, 244041; LA32-NEXT: ori $a4, $zero, 2554042; LA32-NEXT: sll.w $a4, $a4, $a04043; LA32-NEXT: slli.w $a1, $a1, 244044; LA32-NEXT: srai.w $a1, $a1, 244045; LA32-NEXT: sll.w $a1, $a1, $a04046; LA32-NEXT: xori $a3, $a3, 244047; LA32-NEXT: .LBB76_1: # =>This Inner Loop Header: Depth=14048; LA32-NEXT: ll.w $a5, $a2, 04049; LA32-NEXT: and $a7, $a5, $a44050; LA32-NEXT: move $a6, $a54051; LA32-NEXT: sll.w $a7, $a7, $a34052; LA32-NEXT: sra.w $a7, $a7, $a34053; LA32-NEXT: bge $a1, $a7, .LBB76_34054; LA32-NEXT: # %bb.2: # in Loop: Header=BB76_1 Depth=14055; LA32-NEXT: xor $a6, $a5, $a14056; LA32-NEXT: and $a6, $a6, $a44057; LA32-NEXT: xor $a6, $a5, $a64058; LA32-NEXT: .LBB76_3: # in Loop: Header=BB76_1 Depth=14059; LA32-NEXT: sc.w $a6, $a2, 04060; LA32-NEXT: beq $a6, $zero, .LBB76_14061; LA32-NEXT: # %bb.4:4062; LA32-NEXT: srl.w $a0, $a5, $a04063; LA32-NEXT: ret4064;4065; LA64-LABEL: atomicrmw_min_i8_monotonic:4066; LA64: # %bb.0:4067; LA64-NEXT: slli.d $a2, $a0, 34068; LA64-NEXT: bstrins.d $a0, $zero, 1, 04069; LA64-NEXT: andi $a3, $a2, 244070; LA64-NEXT: ori $a4, $zero, 2554071; LA64-NEXT: sll.w $a4, $a4, $a24072; LA64-NEXT: ext.w.b $a1, $a14073; LA64-NEXT: sll.w $a1, $a1, $a24074; LA64-NEXT: xori $a3, $a3, 564075; LA64-NEXT: .LBB76_1: # =>This Inner Loop Header: Depth=14076; LA64-NEXT: ll.w $a5, $a0, 04077; LA64-NEXT: and $a7, $a5, $a44078; LA64-NEXT: move $a6, $a54079; LA64-NEXT: sll.w $a7, $a7, $a34080; LA64-NEXT: sra.w $a7, $a7, $a34081; LA64-NEXT: bge $a1, $a7, .LBB76_34082; LA64-NEXT: # %bb.2: # in Loop: Header=BB76_1 Depth=14083; LA64-NEXT: xor $a6, $a5, $a14084; LA64-NEXT: and $a6, $a6, $a44085; LA64-NEXT: xor $a6, $a5, $a64086; LA64-NEXT: .LBB76_3: # in Loop: Header=BB76_1 Depth=14087; LA64-NEXT: sc.w $a6, $a0, 04088; LA64-NEXT: beq $a6, $zero, .LBB76_14089; LA64-NEXT: # %bb.4:4090; LA64-NEXT: srl.w $a0, $a5, $a24091; LA64-NEXT: ret4092 %1 = atomicrmw min ptr %a, i8 %b monotonic4093 ret i8 %14094}4095 4096define i16 @atomicrmw_min_i16_monotonic(ptr %a, i16 %b) nounwind {4097; LA32-LABEL: atomicrmw_min_i16_monotonic:4098; LA32: # %bb.0:4099; LA32-NEXT: addi.w $a2, $zero, -44100; LA32-NEXT: and $a2, $a0, $a24101; LA32-NEXT: slli.w $a0, $a0, 34102; LA32-NEXT: andi $a3, $a0, 244103; LA32-NEXT: lu12i.w $a4, 154104; LA32-NEXT: ori $a4, $a4, 40954105; LA32-NEXT: sll.w $a4, $a4, $a04106; LA32-NEXT: slli.w $a1, $a1, 164107; LA32-NEXT: srai.w $a1, $a1, 164108; LA32-NEXT: sll.w $a1, $a1, $a04109; LA32-NEXT: ori $a5, $zero, 164110; LA32-NEXT: sub.w $a3, $a5, $a34111; LA32-NEXT: .LBB77_1: # =>This Inner Loop Header: Depth=14112; LA32-NEXT: ll.w $a5, $a2, 04113; LA32-NEXT: and $a7, $a5, $a44114; LA32-NEXT: move $a6, $a54115; LA32-NEXT: sll.w $a7, $a7, $a34116; LA32-NEXT: sra.w $a7, $a7, $a34117; LA32-NEXT: bge $a1, $a7, .LBB77_34118; LA32-NEXT: # %bb.2: # in Loop: Header=BB77_1 Depth=14119; LA32-NEXT: xor $a6, $a5, $a14120; LA32-NEXT: and $a6, $a6, $a44121; LA32-NEXT: xor $a6, $a5, $a64122; LA32-NEXT: .LBB77_3: # in Loop: Header=BB77_1 Depth=14123; LA32-NEXT: sc.w $a6, $a2, 04124; LA32-NEXT: beq $a6, $zero, .LBB77_14125; LA32-NEXT: # %bb.4:4126; LA32-NEXT: srl.w $a0, $a5, $a04127; LA32-NEXT: ret4128;4129; LA64-LABEL: atomicrmw_min_i16_monotonic:4130; LA64: # %bb.0:4131; LA64-NEXT: slli.d $a2, $a0, 34132; LA64-NEXT: bstrins.d $a0, $zero, 1, 04133; LA64-NEXT: andi $a3, $a2, 244134; LA64-NEXT: lu12i.w $a4, 154135; LA64-NEXT: ori $a4, $a4, 40954136; LA64-NEXT: sll.w $a4, $a4, $a24137; LA64-NEXT: ext.w.h $a1, $a14138; LA64-NEXT: sll.w $a1, $a1, $a24139; LA64-NEXT: ori $a5, $zero, 484140; LA64-NEXT: sub.d $a3, $a5, $a34141; LA64-NEXT: .LBB77_1: # =>This Inner Loop Header: Depth=14142; LA64-NEXT: ll.w $a5, $a0, 04143; LA64-NEXT: and $a7, $a5, $a44144; LA64-NEXT: move $a6, $a54145; LA64-NEXT: sll.w $a7, $a7, $a34146; LA64-NEXT: sra.w $a7, $a7, $a34147; LA64-NEXT: bge $a1, $a7, .LBB77_34148; LA64-NEXT: # %bb.2: # in Loop: Header=BB77_1 Depth=14149; LA64-NEXT: xor $a6, $a5, $a14150; LA64-NEXT: and $a6, $a6, $a44151; LA64-NEXT: xor $a6, $a5, $a64152; LA64-NEXT: .LBB77_3: # in Loop: Header=BB77_1 Depth=14153; LA64-NEXT: sc.w $a6, $a0, 04154; LA64-NEXT: beq $a6, $zero, .LBB77_14155; LA64-NEXT: # %bb.4:4156; LA64-NEXT: srl.w $a0, $a5, $a24157; LA64-NEXT: ret4158 %1 = atomicrmw min ptr %a, i16 %b monotonic4159 ret i16 %14160}4161 4162define i32 @atomicrmw_min_i32_monotonic(ptr %a, i32 %b) nounwind {4163; LA32-LABEL: atomicrmw_min_i32_monotonic:4164; LA32: # %bb.0:4165; LA32-NEXT: .LBB78_1: # =>This Inner Loop Header: Depth=14166; LA32-NEXT: ll.w $a2, $a0, 04167; LA32-NEXT: move $a3, $a24168; LA32-NEXT: bge $a1, $a2, .LBB78_34169; LA32-NEXT: # %bb.2: # in Loop: Header=BB78_1 Depth=14170; LA32-NEXT: move $a3, $a14171; LA32-NEXT: .LBB78_3: # in Loop: Header=BB78_1 Depth=14172; LA32-NEXT: sc.w $a3, $a0, 04173; LA32-NEXT: beq $a3, $zero, .LBB78_14174; LA32-NEXT: # %bb.4:4175; LA32-NEXT: move $a0, $a24176; LA32-NEXT: ret4177;4178; LA64-LABEL: atomicrmw_min_i32_monotonic:4179; LA64: # %bb.0:4180; LA64-NEXT: ammin.w $a2, $a1, $a04181; LA64-NEXT: move $a0, $a24182; LA64-NEXT: ret4183 %1 = atomicrmw min ptr %a, i32 %b monotonic4184 ret i32 %14185}4186 4187define i64 @atomicrmw_min_i64_monotonic(ptr %a, i64 %b) nounwind {4188; LA32-LABEL: atomicrmw_min_i64_monotonic:4189; LA32: # %bb.0:4190; LA32-NEXT: addi.w $sp, $sp, -324191; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill4192; LA32-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill4193; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill4194; LA32-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill4195; LA32-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill4196; LA32-NEXT: move $fp, $a04197; LA32-NEXT: ld.w $a5, $a0, 44198; LA32-NEXT: ld.w $a4, $a0, 04199; LA32-NEXT: move $s0, $a24200; LA32-NEXT: move $s1, $a14201; LA32-NEXT: addi.w $s2, $sp, 04202; LA32-NEXT: b .LBB79_24203; LA32-NEXT: .p2align 4, , 164204; LA32-NEXT: .LBB79_1: # %atomicrmw.start4205; LA32-NEXT: # in Loop: Header=BB79_2 Depth=14206; LA32-NEXT: st.w $a4, $sp, 04207; LA32-NEXT: st.w $a5, $sp, 44208; LA32-NEXT: move $a0, $fp4209; LA32-NEXT: move $a1, $s24210; LA32-NEXT: move $a4, $zero4211; LA32-NEXT: move $a5, $zero4212; LA32-NEXT: bl __atomic_compare_exchange_84213; LA32-NEXT: ld.w $a5, $sp, 44214; LA32-NEXT: ld.w $a4, $sp, 04215; LA32-NEXT: bne $a0, $zero, .LBB79_74216; LA32-NEXT: .LBB79_2: # %atomicrmw.start4217; LA32-NEXT: # =>This Inner Loop Header: Depth=14218; LA32-NEXT: beq $a5, $s0, .LBB79_44219; LA32-NEXT: # %bb.3: # %atomicrmw.start4220; LA32-NEXT: # in Loop: Header=BB79_2 Depth=14221; LA32-NEXT: slt $a0, $s0, $a54222; LA32-NEXT: b .LBB79_54223; LA32-NEXT: .p2align 4, , 164224; LA32-NEXT: .LBB79_4: # in Loop: Header=BB79_2 Depth=14225; LA32-NEXT: sltu $a0, $s1, $a44226; LA32-NEXT: .LBB79_5: # %atomicrmw.start4227; LA32-NEXT: # in Loop: Header=BB79_2 Depth=14228; LA32-NEXT: xori $a0, $a0, 14229; LA32-NEXT: move $a2, $a44230; LA32-NEXT: move $a3, $a54231; LA32-NEXT: bne $a0, $zero, .LBB79_14232; LA32-NEXT: # %bb.6: # %atomicrmw.start4233; LA32-NEXT: # in Loop: Header=BB79_2 Depth=14234; LA32-NEXT: move $a2, $s14235; LA32-NEXT: move $a3, $s04236; LA32-NEXT: b .LBB79_14237; LA32-NEXT: .LBB79_7: # %atomicrmw.end4238; LA32-NEXT: move $a0, $a44239; LA32-NEXT: move $a1, $a54240; LA32-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload4241; LA32-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload4242; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload4243; LA32-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload4244; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload4245; LA32-NEXT: addi.w $sp, $sp, 324246; LA32-NEXT: ret4247;4248; LA64-LABEL: atomicrmw_min_i64_monotonic:4249; LA64: # %bb.0:4250; LA64-NEXT: ammin.d $a2, $a1, $a04251; LA64-NEXT: move $a0, $a24252; LA64-NEXT: ret4253 %1 = atomicrmw min ptr %a, i64 %b monotonic4254 ret i64 %14255}4256