135216779SYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 235216779SYingwei Zheng; RUN: llc -O3 -mtriple=riscv32 -mattr=+a -verify-machineinstrs < %s \ 335216779SYingwei Zheng; RUN: | FileCheck -check-prefixes=RV32 %s 435216779SYingwei Zheng; RUN: llc -O3 -mtriple=riscv64 -mattr=+a -verify-machineinstrs < %s \ 535216779SYingwei Zheng; RUN: | FileCheck -check-prefixes=RV64 %s 635216779SYingwei Zheng 735216779SYingwei Zhengdefine void @amoswap_w_discard(ptr %a, i32 %b) nounwind { 835216779SYingwei Zheng; RV32-LABEL: amoswap_w_discard: 935216779SYingwei Zheng; RV32: # %bb.0: 1093fde2eaSYingwei Zheng; RV32-NEXT: amoswap.w.aqrl zero, a1, (a0) 1135216779SYingwei Zheng; RV32-NEXT: ret 1235216779SYingwei Zheng; 1335216779SYingwei Zheng; RV64-LABEL: amoswap_w_discard: 1435216779SYingwei Zheng; RV64: # %bb.0: 1593fde2eaSYingwei Zheng; RV64-NEXT: amoswap.w.aqrl zero, a1, (a0) 1635216779SYingwei Zheng; RV64-NEXT: ret 1735216779SYingwei Zheng %1 = atomicrmw xchg ptr %a, i32 %b seq_cst 1835216779SYingwei Zheng ret void 1935216779SYingwei Zheng} 2035216779SYingwei Zheng 2135216779SYingwei Zhengdefine void @amoswap_d_discard(ptr %a, i64 %b) nounwind { 2235216779SYingwei Zheng; RV32-LABEL: amoswap_d_discard: 2335216779SYingwei Zheng; RV32: # %bb.0: 2435216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -16 2535216779SYingwei Zheng; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2635216779SYingwei Zheng; RV32-NEXT: li a3, 5 27eabaee0cSFangrui Song; RV32-NEXT: call __atomic_exchange_8 2835216779SYingwei Zheng; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2935216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 16 3035216779SYingwei Zheng; RV32-NEXT: ret 3135216779SYingwei Zheng; 3235216779SYingwei Zheng; RV64-LABEL: amoswap_d_discard: 3335216779SYingwei Zheng; RV64: # %bb.0: 3493fde2eaSYingwei Zheng; RV64-NEXT: amoswap.d.aqrl zero, a1, (a0) 3535216779SYingwei Zheng; RV64-NEXT: ret 3635216779SYingwei Zheng %1 = atomicrmw xchg ptr %a, i64 %b seq_cst 3735216779SYingwei Zheng ret void 3835216779SYingwei Zheng} 3935216779SYingwei Zheng 4035216779SYingwei Zhengdefine void @amoadd_w_discard(ptr %a, i32 %b) nounwind { 4135216779SYingwei Zheng; RV32-LABEL: amoadd_w_discard: 4235216779SYingwei Zheng; RV32: # %bb.0: 4393fde2eaSYingwei Zheng; RV32-NEXT: amoadd.w.aqrl zero, a1, (a0) 4435216779SYingwei Zheng; RV32-NEXT: ret 4535216779SYingwei Zheng; 4635216779SYingwei Zheng; RV64-LABEL: amoadd_w_discard: 4735216779SYingwei Zheng; RV64: # %bb.0: 4893fde2eaSYingwei Zheng; RV64-NEXT: amoadd.w.aqrl zero, a1, (a0) 4935216779SYingwei Zheng; RV64-NEXT: ret 5035216779SYingwei Zheng %1 = atomicrmw add ptr %a, i32 %b seq_cst 5135216779SYingwei Zheng ret void 5235216779SYingwei Zheng} 5335216779SYingwei Zheng 5435216779SYingwei Zhengdefine void @amoadd_d_discard(ptr %a, i64 %b) nounwind { 5535216779SYingwei Zheng; RV32-LABEL: amoadd_d_discard: 5635216779SYingwei Zheng; RV32: # %bb.0: 5735216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -16 5835216779SYingwei Zheng; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5935216779SYingwei Zheng; RV32-NEXT: li a3, 5 60eabaee0cSFangrui Song; RV32-NEXT: call __atomic_fetch_add_8 6135216779SYingwei Zheng; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6235216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 16 6335216779SYingwei Zheng; RV32-NEXT: ret 6435216779SYingwei Zheng; 6535216779SYingwei Zheng; RV64-LABEL: amoadd_d_discard: 6635216779SYingwei Zheng; RV64: # %bb.0: 6793fde2eaSYingwei Zheng; RV64-NEXT: amoadd.d.aqrl zero, a1, (a0) 6835216779SYingwei Zheng; RV64-NEXT: ret 6935216779SYingwei Zheng %1 = atomicrmw add ptr %a, i64 %b seq_cst 7035216779SYingwei Zheng ret void 7135216779SYingwei Zheng} 7235216779SYingwei Zheng 7335216779SYingwei Zhengdefine void @amoand_w_discard(ptr %a, i32 %b) nounwind { 7435216779SYingwei Zheng; RV32-LABEL: amoand_w_discard: 7535216779SYingwei Zheng; RV32: # %bb.0: 7693fde2eaSYingwei Zheng; RV32-NEXT: amoand.w.aqrl zero, a1, (a0) 7735216779SYingwei Zheng; RV32-NEXT: ret 7835216779SYingwei Zheng; 7935216779SYingwei Zheng; RV64-LABEL: amoand_w_discard: 8035216779SYingwei Zheng; RV64: # %bb.0: 8193fde2eaSYingwei Zheng; RV64-NEXT: amoand.w.aqrl zero, a1, (a0) 8235216779SYingwei Zheng; RV64-NEXT: ret 8335216779SYingwei Zheng %1 = atomicrmw and ptr %a, i32 %b seq_cst 8435216779SYingwei Zheng ret void 8535216779SYingwei Zheng} 8635216779SYingwei Zheng 8735216779SYingwei Zhengdefine void @amoand_d_discard(ptr %a, i64 %b) nounwind { 8835216779SYingwei Zheng; RV32-LABEL: amoand_d_discard: 8935216779SYingwei Zheng; RV32: # %bb.0: 9035216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -16 9135216779SYingwei Zheng; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 9235216779SYingwei Zheng; RV32-NEXT: li a3, 5 93eabaee0cSFangrui Song; RV32-NEXT: call __atomic_fetch_and_8 9435216779SYingwei Zheng; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 9535216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 16 9635216779SYingwei Zheng; RV32-NEXT: ret 9735216779SYingwei Zheng; 9835216779SYingwei Zheng; RV64-LABEL: amoand_d_discard: 9935216779SYingwei Zheng; RV64: # %bb.0: 10093fde2eaSYingwei Zheng; RV64-NEXT: amoand.d.aqrl zero, a1, (a0) 10135216779SYingwei Zheng; RV64-NEXT: ret 10235216779SYingwei Zheng %1 = atomicrmw and ptr %a, i64 %b seq_cst 10335216779SYingwei Zheng ret void 10435216779SYingwei Zheng} 10535216779SYingwei Zheng 10635216779SYingwei Zhengdefine void @amoor_w_discard(ptr %a, i32 %b) nounwind { 10735216779SYingwei Zheng; RV32-LABEL: amoor_w_discard: 10835216779SYingwei Zheng; RV32: # %bb.0: 10993fde2eaSYingwei Zheng; RV32-NEXT: amoor.w.aqrl zero, a1, (a0) 11035216779SYingwei Zheng; RV32-NEXT: ret 11135216779SYingwei Zheng; 11235216779SYingwei Zheng; RV64-LABEL: amoor_w_discard: 11335216779SYingwei Zheng; RV64: # %bb.0: 11493fde2eaSYingwei Zheng; RV64-NEXT: amoor.w.aqrl zero, a1, (a0) 11535216779SYingwei Zheng; RV64-NEXT: ret 11635216779SYingwei Zheng %1 = atomicrmw or ptr %a, i32 %b seq_cst 11735216779SYingwei Zheng ret void 11835216779SYingwei Zheng} 11935216779SYingwei Zheng 12035216779SYingwei Zhengdefine void @amoor_d_discard(ptr %a, i64 %b) nounwind { 12135216779SYingwei Zheng; RV32-LABEL: amoor_d_discard: 12235216779SYingwei Zheng; RV32: # %bb.0: 12335216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -16 12435216779SYingwei Zheng; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 12535216779SYingwei Zheng; RV32-NEXT: li a3, 5 126eabaee0cSFangrui Song; RV32-NEXT: call __atomic_fetch_or_8 12735216779SYingwei Zheng; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 12835216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 16 12935216779SYingwei Zheng; RV32-NEXT: ret 13035216779SYingwei Zheng; 13135216779SYingwei Zheng; RV64-LABEL: amoor_d_discard: 13235216779SYingwei Zheng; RV64: # %bb.0: 13393fde2eaSYingwei Zheng; RV64-NEXT: amoor.d.aqrl zero, a1, (a0) 13435216779SYingwei Zheng; RV64-NEXT: ret 13535216779SYingwei Zheng %1 = atomicrmw or ptr %a, i64 %b seq_cst 13635216779SYingwei Zheng ret void 13735216779SYingwei Zheng} 13835216779SYingwei Zheng 13935216779SYingwei Zhengdefine void @amoxor_w_discard(ptr %a, i32 %b) nounwind { 14035216779SYingwei Zheng; RV32-LABEL: amoxor_w_discard: 14135216779SYingwei Zheng; RV32: # %bb.0: 14293fde2eaSYingwei Zheng; RV32-NEXT: amoor.w.aqrl zero, a1, (a0) 14335216779SYingwei Zheng; RV32-NEXT: ret 14435216779SYingwei Zheng; 14535216779SYingwei Zheng; RV64-LABEL: amoxor_w_discard: 14635216779SYingwei Zheng; RV64: # %bb.0: 14793fde2eaSYingwei Zheng; RV64-NEXT: amoor.w.aqrl zero, a1, (a0) 14835216779SYingwei Zheng; RV64-NEXT: ret 14935216779SYingwei Zheng %1 = atomicrmw or ptr %a, i32 %b seq_cst 15035216779SYingwei Zheng ret void 15135216779SYingwei Zheng} 15235216779SYingwei Zheng 15335216779SYingwei Zhengdefine void @amoxor_d_discard(ptr %a, i64 %b) nounwind { 15435216779SYingwei Zheng; RV32-LABEL: amoxor_d_discard: 15535216779SYingwei Zheng; RV32: # %bb.0: 15635216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -16 15735216779SYingwei Zheng; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 15835216779SYingwei Zheng; RV32-NEXT: li a3, 5 159eabaee0cSFangrui Song; RV32-NEXT: call __atomic_fetch_or_8 16035216779SYingwei Zheng; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 16135216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 16 16235216779SYingwei Zheng; RV32-NEXT: ret 16335216779SYingwei Zheng; 16435216779SYingwei Zheng; RV64-LABEL: amoxor_d_discard: 16535216779SYingwei Zheng; RV64: # %bb.0: 16693fde2eaSYingwei Zheng; RV64-NEXT: amoor.d.aqrl zero, a1, (a0) 16735216779SYingwei Zheng; RV64-NEXT: ret 16835216779SYingwei Zheng %1 = atomicrmw or ptr %a, i64 %b seq_cst 16935216779SYingwei Zheng ret void 17035216779SYingwei Zheng} 17135216779SYingwei Zheng 17235216779SYingwei Zhengdefine void @amomax_w_discard(ptr %a, i32 %b) nounwind { 17335216779SYingwei Zheng; RV32-LABEL: amomax_w_discard: 17435216779SYingwei Zheng; RV32: # %bb.0: 17593fde2eaSYingwei Zheng; RV32-NEXT: amomax.w.aqrl zero, a1, (a0) 17635216779SYingwei Zheng; RV32-NEXT: ret 17735216779SYingwei Zheng; 17835216779SYingwei Zheng; RV64-LABEL: amomax_w_discard: 17935216779SYingwei Zheng; RV64: # %bb.0: 18093fde2eaSYingwei Zheng; RV64-NEXT: amomax.w.aqrl zero, a1, (a0) 18135216779SYingwei Zheng; RV64-NEXT: ret 18235216779SYingwei Zheng %1 = atomicrmw max ptr %a, i32 %b seq_cst 18335216779SYingwei Zheng ret void 18435216779SYingwei Zheng} 18535216779SYingwei Zheng 18635216779SYingwei Zhengdefine void @amomax_d_discard(ptr %a, i64 %b) nounwind { 18735216779SYingwei Zheng; RV32-LABEL: amomax_d_discard: 18835216779SYingwei Zheng; RV32: # %bb.0: 18935216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -32 19035216779SYingwei Zheng; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 19135216779SYingwei Zheng; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 19235216779SYingwei Zheng; RV32-NEXT: sw s1, 20(sp) # 4-byte Folded Spill 19335216779SYingwei Zheng; RV32-NEXT: sw s2, 16(sp) # 4-byte Folded Spill 194*9122c523SPengcheng Wang; RV32-NEXT: mv s0, a2 195*9122c523SPengcheng Wang; RV32-NEXT: mv s1, a0 19614c4f28eSAlex Bradbury; RV32-NEXT: lw a4, 0(a0) 19714c4f28eSAlex Bradbury; RV32-NEXT: lw a5, 4(a0) 19835216779SYingwei Zheng; RV32-NEXT: mv s2, a1 19935216779SYingwei Zheng; RV32-NEXT: j .LBB11_2 20035216779SYingwei Zheng; RV32-NEXT: .LBB11_1: # %atomicrmw.start 20135216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB11_2 Depth=1 20214c4f28eSAlex Bradbury; RV32-NEXT: sw a4, 8(sp) 20314c4f28eSAlex Bradbury; RV32-NEXT: sw a5, 12(sp) 20435216779SYingwei Zheng; RV32-NEXT: addi a1, sp, 8 20535216779SYingwei Zheng; RV32-NEXT: li a4, 5 20635216779SYingwei Zheng; RV32-NEXT: li a5, 5 207*9122c523SPengcheng Wang; RV32-NEXT: mv a0, s1 208eabaee0cSFangrui Song; RV32-NEXT: call __atomic_compare_exchange_8 20914c4f28eSAlex Bradbury; RV32-NEXT: lw a4, 8(sp) 21014c4f28eSAlex Bradbury; RV32-NEXT: lw a5, 12(sp) 21135216779SYingwei Zheng; RV32-NEXT: bnez a0, .LBB11_6 21235216779SYingwei Zheng; RV32-NEXT: .LBB11_2: # %atomicrmw.start 21335216779SYingwei Zheng; RV32-NEXT: # =>This Inner Loop Header: Depth=1 214*9122c523SPengcheng Wang; RV32-NEXT: beq a5, s0, .LBB11_4 21535216779SYingwei Zheng; RV32-NEXT: # %bb.3: # %atomicrmw.start 21635216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB11_2 Depth=1 217*9122c523SPengcheng Wang; RV32-NEXT: slt a0, s0, a5 21814c4f28eSAlex Bradbury; RV32-NEXT: mv a2, a4 21914c4f28eSAlex Bradbury; RV32-NEXT: mv a3, a5 22035216779SYingwei Zheng; RV32-NEXT: bnez a0, .LBB11_1 22135216779SYingwei Zheng; RV32-NEXT: j .LBB11_5 22235216779SYingwei Zheng; RV32-NEXT: .LBB11_4: # in Loop: Header=BB11_2 Depth=1 22314c4f28eSAlex Bradbury; RV32-NEXT: sltu a0, s2, a4 22414c4f28eSAlex Bradbury; RV32-NEXT: mv a2, a4 22514c4f28eSAlex Bradbury; RV32-NEXT: mv a3, a5 22635216779SYingwei Zheng; RV32-NEXT: bnez a0, .LBB11_1 22735216779SYingwei Zheng; RV32-NEXT: .LBB11_5: # %atomicrmw.start 22835216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB11_2 Depth=1 22935216779SYingwei Zheng; RV32-NEXT: mv a2, s2 230*9122c523SPengcheng Wang; RV32-NEXT: mv a3, s0 23135216779SYingwei Zheng; RV32-NEXT: j .LBB11_1 23235216779SYingwei Zheng; RV32-NEXT: .LBB11_6: # %atomicrmw.end 23335216779SYingwei Zheng; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 23435216779SYingwei Zheng; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 23535216779SYingwei Zheng; RV32-NEXT: lw s1, 20(sp) # 4-byte Folded Reload 23635216779SYingwei Zheng; RV32-NEXT: lw s2, 16(sp) # 4-byte Folded Reload 23735216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 32 23835216779SYingwei Zheng; RV32-NEXT: ret 23935216779SYingwei Zheng; 24035216779SYingwei Zheng; RV64-LABEL: amomax_d_discard: 24135216779SYingwei Zheng; RV64: # %bb.0: 24293fde2eaSYingwei Zheng; RV64-NEXT: amomax.d.aqrl zero, a1, (a0) 24335216779SYingwei Zheng; RV64-NEXT: ret 24435216779SYingwei Zheng %1 = atomicrmw max ptr %a, i64 %b seq_cst 24535216779SYingwei Zheng ret void 24635216779SYingwei Zheng} 24735216779SYingwei Zheng 24835216779SYingwei Zhengdefine void @amomaxu_w_discard(ptr %a, i32 %b) nounwind { 24935216779SYingwei Zheng; RV32-LABEL: amomaxu_w_discard: 25035216779SYingwei Zheng; RV32: # %bb.0: 25193fde2eaSYingwei Zheng; RV32-NEXT: amomaxu.w.aqrl zero, a1, (a0) 25235216779SYingwei Zheng; RV32-NEXT: ret 25335216779SYingwei Zheng; 25435216779SYingwei Zheng; RV64-LABEL: amomaxu_w_discard: 25535216779SYingwei Zheng; RV64: # %bb.0: 25693fde2eaSYingwei Zheng; RV64-NEXT: amomaxu.w.aqrl zero, a1, (a0) 25735216779SYingwei Zheng; RV64-NEXT: ret 25835216779SYingwei Zheng %1 = atomicrmw umax ptr %a, i32 %b seq_cst 25935216779SYingwei Zheng ret void 26035216779SYingwei Zheng} 26135216779SYingwei Zheng 26235216779SYingwei Zhengdefine void @amomaxu_d_discard(ptr %a, i64 %b) nounwind { 26335216779SYingwei Zheng; RV32-LABEL: amomaxu_d_discard: 26435216779SYingwei Zheng; RV32: # %bb.0: 26535216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -32 26635216779SYingwei Zheng; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 26735216779SYingwei Zheng; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 26835216779SYingwei Zheng; RV32-NEXT: sw s1, 20(sp) # 4-byte Folded Spill 26935216779SYingwei Zheng; RV32-NEXT: sw s2, 16(sp) # 4-byte Folded Spill 270*9122c523SPengcheng Wang; RV32-NEXT: mv s0, a2 271*9122c523SPengcheng Wang; RV32-NEXT: mv s1, a0 27214c4f28eSAlex Bradbury; RV32-NEXT: lw a4, 0(a0) 27314c4f28eSAlex Bradbury; RV32-NEXT: lw a5, 4(a0) 27435216779SYingwei Zheng; RV32-NEXT: mv s2, a1 27535216779SYingwei Zheng; RV32-NEXT: j .LBB13_2 27635216779SYingwei Zheng; RV32-NEXT: .LBB13_1: # %atomicrmw.start 27735216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB13_2 Depth=1 27814c4f28eSAlex Bradbury; RV32-NEXT: sw a4, 8(sp) 27914c4f28eSAlex Bradbury; RV32-NEXT: sw a5, 12(sp) 28035216779SYingwei Zheng; RV32-NEXT: addi a1, sp, 8 28135216779SYingwei Zheng; RV32-NEXT: li a4, 5 28235216779SYingwei Zheng; RV32-NEXT: li a5, 5 283*9122c523SPengcheng Wang; RV32-NEXT: mv a0, s1 284eabaee0cSFangrui Song; RV32-NEXT: call __atomic_compare_exchange_8 28514c4f28eSAlex Bradbury; RV32-NEXT: lw a4, 8(sp) 28614c4f28eSAlex Bradbury; RV32-NEXT: lw a5, 12(sp) 28735216779SYingwei Zheng; RV32-NEXT: bnez a0, .LBB13_6 28835216779SYingwei Zheng; RV32-NEXT: .LBB13_2: # %atomicrmw.start 28935216779SYingwei Zheng; RV32-NEXT: # =>This Inner Loop Header: Depth=1 290*9122c523SPengcheng Wang; RV32-NEXT: beq a5, s0, .LBB13_4 29135216779SYingwei Zheng; RV32-NEXT: # %bb.3: # %atomicrmw.start 29235216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB13_2 Depth=1 293*9122c523SPengcheng Wang; RV32-NEXT: sltu a0, s0, a5 29414c4f28eSAlex Bradbury; RV32-NEXT: mv a2, a4 29514c4f28eSAlex Bradbury; RV32-NEXT: mv a3, a5 29635216779SYingwei Zheng; RV32-NEXT: bnez a0, .LBB13_1 29735216779SYingwei Zheng; RV32-NEXT: j .LBB13_5 29835216779SYingwei Zheng; RV32-NEXT: .LBB13_4: # in Loop: Header=BB13_2 Depth=1 29914c4f28eSAlex Bradbury; RV32-NEXT: sltu a0, s2, a4 30014c4f28eSAlex Bradbury; RV32-NEXT: mv a2, a4 30114c4f28eSAlex Bradbury; RV32-NEXT: mv a3, a5 30235216779SYingwei Zheng; RV32-NEXT: bnez a0, .LBB13_1 30335216779SYingwei Zheng; RV32-NEXT: .LBB13_5: # %atomicrmw.start 30435216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB13_2 Depth=1 30535216779SYingwei Zheng; RV32-NEXT: mv a2, s2 306*9122c523SPengcheng Wang; RV32-NEXT: mv a3, s0 30735216779SYingwei Zheng; RV32-NEXT: j .LBB13_1 30835216779SYingwei Zheng; RV32-NEXT: .LBB13_6: # %atomicrmw.end 30935216779SYingwei Zheng; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 31035216779SYingwei Zheng; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 31135216779SYingwei Zheng; RV32-NEXT: lw s1, 20(sp) # 4-byte Folded Reload 31235216779SYingwei Zheng; RV32-NEXT: lw s2, 16(sp) # 4-byte Folded Reload 31335216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 32 31435216779SYingwei Zheng; RV32-NEXT: ret 31535216779SYingwei Zheng; 31635216779SYingwei Zheng; RV64-LABEL: amomaxu_d_discard: 31735216779SYingwei Zheng; RV64: # %bb.0: 31893fde2eaSYingwei Zheng; RV64-NEXT: amomaxu.d.aqrl zero, a1, (a0) 31935216779SYingwei Zheng; RV64-NEXT: ret 32035216779SYingwei Zheng %1 = atomicrmw umax ptr %a, i64 %b seq_cst 32135216779SYingwei Zheng ret void 32235216779SYingwei Zheng} 32335216779SYingwei Zheng 32435216779SYingwei Zhengdefine void @amomin_w_discard(ptr %a, i32 %b) nounwind { 32535216779SYingwei Zheng; RV32-LABEL: amomin_w_discard: 32635216779SYingwei Zheng; RV32: # %bb.0: 32793fde2eaSYingwei Zheng; RV32-NEXT: amomin.w.aqrl zero, a1, (a0) 32835216779SYingwei Zheng; RV32-NEXT: ret 32935216779SYingwei Zheng; 33035216779SYingwei Zheng; RV64-LABEL: amomin_w_discard: 33135216779SYingwei Zheng; RV64: # %bb.0: 33293fde2eaSYingwei Zheng; RV64-NEXT: amomin.w.aqrl zero, a1, (a0) 33335216779SYingwei Zheng; RV64-NEXT: ret 33435216779SYingwei Zheng %1 = atomicrmw min ptr %a, i32 %b seq_cst 33535216779SYingwei Zheng ret void 33635216779SYingwei Zheng} 33735216779SYingwei Zheng 33835216779SYingwei Zhengdefine void @amomin_d_discard(ptr %a, i64 %b) nounwind { 33935216779SYingwei Zheng; RV32-LABEL: amomin_d_discard: 34035216779SYingwei Zheng; RV32: # %bb.0: 34135216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -32 34235216779SYingwei Zheng; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 34335216779SYingwei Zheng; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 34435216779SYingwei Zheng; RV32-NEXT: sw s1, 20(sp) # 4-byte Folded Spill 34535216779SYingwei Zheng; RV32-NEXT: sw s2, 16(sp) # 4-byte Folded Spill 346*9122c523SPengcheng Wang; RV32-NEXT: mv s0, a2 347*9122c523SPengcheng Wang; RV32-NEXT: mv s1, a0 34814c4f28eSAlex Bradbury; RV32-NEXT: lw a4, 0(a0) 34914c4f28eSAlex Bradbury; RV32-NEXT: lw a5, 4(a0) 35035216779SYingwei Zheng; RV32-NEXT: mv s2, a1 35135216779SYingwei Zheng; RV32-NEXT: j .LBB15_2 35235216779SYingwei Zheng; RV32-NEXT: .LBB15_1: # %atomicrmw.start 35335216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB15_2 Depth=1 35414c4f28eSAlex Bradbury; RV32-NEXT: sw a4, 8(sp) 35514c4f28eSAlex Bradbury; RV32-NEXT: sw a5, 12(sp) 35635216779SYingwei Zheng; RV32-NEXT: addi a1, sp, 8 35735216779SYingwei Zheng; RV32-NEXT: li a4, 5 35835216779SYingwei Zheng; RV32-NEXT: li a5, 5 359*9122c523SPengcheng Wang; RV32-NEXT: mv a0, s1 360eabaee0cSFangrui Song; RV32-NEXT: call __atomic_compare_exchange_8 36114c4f28eSAlex Bradbury; RV32-NEXT: lw a4, 8(sp) 36214c4f28eSAlex Bradbury; RV32-NEXT: lw a5, 12(sp) 36335216779SYingwei Zheng; RV32-NEXT: bnez a0, .LBB15_6 36435216779SYingwei Zheng; RV32-NEXT: .LBB15_2: # %atomicrmw.start 36535216779SYingwei Zheng; RV32-NEXT: # =>This Inner Loop Header: Depth=1 366*9122c523SPengcheng Wang; RV32-NEXT: beq a5, s0, .LBB15_4 36735216779SYingwei Zheng; RV32-NEXT: # %bb.3: # %atomicrmw.start 36835216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB15_2 Depth=1 369*9122c523SPengcheng Wang; RV32-NEXT: slt a0, s0, a5 37014c4f28eSAlex Bradbury; RV32-NEXT: mv a2, a4 37114c4f28eSAlex Bradbury; RV32-NEXT: mv a3, a5 37235216779SYingwei Zheng; RV32-NEXT: beqz a0, .LBB15_1 37335216779SYingwei Zheng; RV32-NEXT: j .LBB15_5 37435216779SYingwei Zheng; RV32-NEXT: .LBB15_4: # in Loop: Header=BB15_2 Depth=1 37514c4f28eSAlex Bradbury; RV32-NEXT: sltu a0, s2, a4 37614c4f28eSAlex Bradbury; RV32-NEXT: mv a2, a4 37714c4f28eSAlex Bradbury; RV32-NEXT: mv a3, a5 37835216779SYingwei Zheng; RV32-NEXT: beqz a0, .LBB15_1 37935216779SYingwei Zheng; RV32-NEXT: .LBB15_5: # %atomicrmw.start 38035216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB15_2 Depth=1 38135216779SYingwei Zheng; RV32-NEXT: mv a2, s2 382*9122c523SPengcheng Wang; RV32-NEXT: mv a3, s0 38335216779SYingwei Zheng; RV32-NEXT: j .LBB15_1 38435216779SYingwei Zheng; RV32-NEXT: .LBB15_6: # %atomicrmw.end 38535216779SYingwei Zheng; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 38635216779SYingwei Zheng; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 38735216779SYingwei Zheng; RV32-NEXT: lw s1, 20(sp) # 4-byte Folded Reload 38835216779SYingwei Zheng; RV32-NEXT: lw s2, 16(sp) # 4-byte Folded Reload 38935216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 32 39035216779SYingwei Zheng; RV32-NEXT: ret 39135216779SYingwei Zheng; 39235216779SYingwei Zheng; RV64-LABEL: amomin_d_discard: 39335216779SYingwei Zheng; RV64: # %bb.0: 39493fde2eaSYingwei Zheng; RV64-NEXT: amomin.d.aqrl zero, a1, (a0) 39535216779SYingwei Zheng; RV64-NEXT: ret 39635216779SYingwei Zheng %1 = atomicrmw min ptr %a, i64 %b seq_cst 39735216779SYingwei Zheng ret void 39835216779SYingwei Zheng} 39935216779SYingwei Zheng 40035216779SYingwei Zhengdefine void @amominu_w_discard(ptr %a, i32 %b) nounwind { 40135216779SYingwei Zheng; RV32-LABEL: amominu_w_discard: 40235216779SYingwei Zheng; RV32: # %bb.0: 40393fde2eaSYingwei Zheng; RV32-NEXT: amominu.w.aqrl zero, a1, (a0) 40435216779SYingwei Zheng; RV32-NEXT: ret 40535216779SYingwei Zheng; 40635216779SYingwei Zheng; RV64-LABEL: amominu_w_discard: 40735216779SYingwei Zheng; RV64: # %bb.0: 40893fde2eaSYingwei Zheng; RV64-NEXT: amominu.w.aqrl zero, a1, (a0) 40935216779SYingwei Zheng; RV64-NEXT: ret 41035216779SYingwei Zheng %1 = atomicrmw umin ptr %a, i32 %b seq_cst 41135216779SYingwei Zheng ret void 41235216779SYingwei Zheng} 41335216779SYingwei Zheng 41435216779SYingwei Zhengdefine void @amominu_d_discard(ptr %a, i64 %b) nounwind { 41535216779SYingwei Zheng; RV32-LABEL: amominu_d_discard: 41635216779SYingwei Zheng; RV32: # %bb.0: 41735216779SYingwei Zheng; RV32-NEXT: addi sp, sp, -32 41835216779SYingwei Zheng; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 41935216779SYingwei Zheng; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 42035216779SYingwei Zheng; RV32-NEXT: sw s1, 20(sp) # 4-byte Folded Spill 42135216779SYingwei Zheng; RV32-NEXT: sw s2, 16(sp) # 4-byte Folded Spill 422*9122c523SPengcheng Wang; RV32-NEXT: mv s0, a2 423*9122c523SPengcheng Wang; RV32-NEXT: mv s1, a0 42414c4f28eSAlex Bradbury; RV32-NEXT: lw a4, 0(a0) 42514c4f28eSAlex Bradbury; RV32-NEXT: lw a5, 4(a0) 42635216779SYingwei Zheng; RV32-NEXT: mv s2, a1 42735216779SYingwei Zheng; RV32-NEXT: j .LBB17_2 42835216779SYingwei Zheng; RV32-NEXT: .LBB17_1: # %atomicrmw.start 42935216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB17_2 Depth=1 43014c4f28eSAlex Bradbury; RV32-NEXT: sw a4, 8(sp) 43114c4f28eSAlex Bradbury; RV32-NEXT: sw a5, 12(sp) 43235216779SYingwei Zheng; RV32-NEXT: addi a1, sp, 8 43335216779SYingwei Zheng; RV32-NEXT: li a4, 5 43435216779SYingwei Zheng; RV32-NEXT: li a5, 5 435*9122c523SPengcheng Wang; RV32-NEXT: mv a0, s1 436eabaee0cSFangrui Song; RV32-NEXT: call __atomic_compare_exchange_8 43714c4f28eSAlex Bradbury; RV32-NEXT: lw a4, 8(sp) 43814c4f28eSAlex Bradbury; RV32-NEXT: lw a5, 12(sp) 43935216779SYingwei Zheng; RV32-NEXT: bnez a0, .LBB17_6 44035216779SYingwei Zheng; RV32-NEXT: .LBB17_2: # %atomicrmw.start 44135216779SYingwei Zheng; RV32-NEXT: # =>This Inner Loop Header: Depth=1 442*9122c523SPengcheng Wang; RV32-NEXT: beq a5, s0, .LBB17_4 44335216779SYingwei Zheng; RV32-NEXT: # %bb.3: # %atomicrmw.start 44435216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB17_2 Depth=1 445*9122c523SPengcheng Wang; RV32-NEXT: sltu a0, s0, a5 44614c4f28eSAlex Bradbury; RV32-NEXT: mv a2, a4 44714c4f28eSAlex Bradbury; RV32-NEXT: mv a3, a5 44835216779SYingwei Zheng; RV32-NEXT: beqz a0, .LBB17_1 44935216779SYingwei Zheng; RV32-NEXT: j .LBB17_5 45035216779SYingwei Zheng; RV32-NEXT: .LBB17_4: # in Loop: Header=BB17_2 Depth=1 45114c4f28eSAlex Bradbury; RV32-NEXT: sltu a0, s2, a4 45214c4f28eSAlex Bradbury; RV32-NEXT: mv a2, a4 45314c4f28eSAlex Bradbury; RV32-NEXT: mv a3, a5 45435216779SYingwei Zheng; RV32-NEXT: beqz a0, .LBB17_1 45535216779SYingwei Zheng; RV32-NEXT: .LBB17_5: # %atomicrmw.start 45635216779SYingwei Zheng; RV32-NEXT: # in Loop: Header=BB17_2 Depth=1 45735216779SYingwei Zheng; RV32-NEXT: mv a2, s2 458*9122c523SPengcheng Wang; RV32-NEXT: mv a3, s0 45935216779SYingwei Zheng; RV32-NEXT: j .LBB17_1 46035216779SYingwei Zheng; RV32-NEXT: .LBB17_6: # %atomicrmw.end 46135216779SYingwei Zheng; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 46235216779SYingwei Zheng; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 46335216779SYingwei Zheng; RV32-NEXT: lw s1, 20(sp) # 4-byte Folded Reload 46435216779SYingwei Zheng; RV32-NEXT: lw s2, 16(sp) # 4-byte Folded Reload 46535216779SYingwei Zheng; RV32-NEXT: addi sp, sp, 32 46635216779SYingwei Zheng; RV32-NEXT: ret 46735216779SYingwei Zheng; 46835216779SYingwei Zheng; RV64-LABEL: amominu_d_discard: 46935216779SYingwei Zheng; RV64: # %bb.0: 47093fde2eaSYingwei Zheng; RV64-NEXT: amominu.d.aqrl zero, a1, (a0) 47135216779SYingwei Zheng; RV64-NEXT: ret 47235216779SYingwei Zheng %1 = atomicrmw umin ptr %a, i64 %b seq_cst 47335216779SYingwei Zheng ret void 47435216779SYingwei Zheng} 475