Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/RISCV/atomic-rmw.ll
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 2,045 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB35_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB35_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w a5, (a6) | ; RV32IA-NEXT: lr.w a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a4, a1, .LBB35_3 | ; RV32IA-NEXT: bge a5, a1, .LBB35_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB35_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB35_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB35_3: # in Loop: Header=BB35_1 Depth=1 | ; RV32IA-NEXT: .LBB35_3: # in Loop: Header=BB35_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w a2, a2, (a6) | ; RV32IA-NEXT: sc.w a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB35_1 | ; RV32IA-NEXT: bnez a2, .LBB35_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_max_i8_monotonic: | ; RV64I-LABEL: atomicrmw_max_i8_monotonic: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB36_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB36_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w.aq a5, (a6) | ; RV32IA-NEXT: lr.w.aq a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a4, a1, .LBB36_3 | ; RV32IA-NEXT: bge a5, a1, .LBB36_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB36_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB36_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB36_3: # in Loop: Header=BB36_1 Depth=1 | ; RV32IA-NEXT: .LBB36_3: # in Loop: Header=BB36_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w a2, a2, (a6) | ; RV32IA-NEXT: sc.w a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB36_1 | ; RV32IA-NEXT: bnez a2, .LBB36_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_max_i8_acquire: | ; RV64I-LABEL: atomicrmw_max_i8_acquire: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB37_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB37_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w a5, (a6) | ; RV32IA-NEXT: lr.w a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a4, a1, .LBB37_3 | ; RV32IA-NEXT: bge a5, a1, .LBB37_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB37_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB37_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB37_3: # in Loop: Header=BB37_1 Depth=1 | ; RV32IA-NEXT: .LBB37_3: # in Loop: Header=BB37_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w.rl a2, a2, (a6) | ; RV32IA-NEXT: sc.w.rl a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB37_1 | ; RV32IA-NEXT: bnez a2, .LBB37_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_max_i8_release: | ; RV64I-LABEL: atomicrmw_max_i8_release: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB38_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB38_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w.aq a5, (a6) | ; RV32IA-NEXT: lr.w.aq a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a4, a1, .LBB38_3 | ; RV32IA-NEXT: bge a5, a1, .LBB38_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB38_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB38_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB38_3: # in Loop: Header=BB38_1 Depth=1 | ; RV32IA-NEXT: .LBB38_3: # in Loop: Header=BB38_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w.rl a2, a2, (a6) | ; RV32IA-NEXT: sc.w.rl a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB38_1 | ; RV32IA-NEXT: bnez a2, .LBB38_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_max_i8_acq_rel: | ; RV64I-LABEL: atomicrmw_max_i8_acq_rel: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB39_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB39_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w.aqrl a5, (a6) | ; RV32IA-NEXT: lr.w.aqrl a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a4, a1, .LBB39_3 | ; RV32IA-NEXT: bge a5, a1, .LBB39_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB39_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB39_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB39_3: # in Loop: Header=BB39_1 Depth=1 | ; RV32IA-NEXT: .LBB39_3: # in Loop: Header=BB39_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w.aqrl a2, a2, (a6) | ; RV32IA-NEXT: sc.w.aqrl a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB39_1 | ; RV32IA-NEXT: bnez a2, .LBB39_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_max_i8_seq_cst: | ; RV64I-LABEL: atomicrmw_max_i8_seq_cst: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB40_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB40_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w a5, (a6) | ; RV32IA-NEXT: lr.w a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a1, a4, .LBB40_3 | ; RV32IA-NEXT: bge a1, a5, .LBB40_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB40_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB40_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB40_3: # in Loop: Header=BB40_1 Depth=1 | ; RV32IA-NEXT: .LBB40_3: # in Loop: Header=BB40_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w a2, a2, (a6) | ; RV32IA-NEXT: sc.w a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB40_1 | ; RV32IA-NEXT: bnez a2, .LBB40_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_min_i8_monotonic: | ; RV64I-LABEL: atomicrmw_min_i8_monotonic: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB41_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB41_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w.aq a5, (a6) | ; RV32IA-NEXT: lr.w.aq a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a1, a4, .LBB41_3 | ; RV32IA-NEXT: bge a1, a5, .LBB41_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB41_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB41_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB41_3: # in Loop: Header=BB41_1 Depth=1 | ; RV32IA-NEXT: .LBB41_3: # in Loop: Header=BB41_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w a2, a2, (a6) | ; RV32IA-NEXT: sc.w a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB41_1 | ; RV32IA-NEXT: bnez a2, .LBB41_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_min_i8_acquire: | ; RV64I-LABEL: atomicrmw_min_i8_acquire: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB42_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB42_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w a5, (a6) | ; RV32IA-NEXT: lr.w a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a1, a4, .LBB42_3 | ; RV32IA-NEXT: bge a1, a5, .LBB42_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB42_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB42_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB42_3: # in Loop: Header=BB42_1 Depth=1 | ; RV32IA-NEXT: .LBB42_3: # in Loop: Header=BB42_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w.rl a2, a2, (a6) | ; RV32IA-NEXT: sc.w.rl a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB42_1 | ; RV32IA-NEXT: bnez a2, .LBB42_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_min_i8_release: | ; RV64I-LABEL: atomicrmw_min_i8_release: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB43_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB43_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w.aq a5, (a6) | ; RV32IA-NEXT: lr.w.aq a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a1, a4, .LBB43_3 | ; RV32IA-NEXT: bge a1, a5, .LBB43_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB43_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB43_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB43_3: # in Loop: Header=BB43_1 Depth=1 | ; RV32IA-NEXT: .LBB43_3: # in Loop: Header=BB43_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w.rl a2, a2, (a6) | ; RV32IA-NEXT: sc.w.rl a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB43_1 | ; RV32IA-NEXT: bnez a2, .LBB43_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_min_i8_acq_rel: | ; RV64I-LABEL: atomicrmw_min_i8_acq_rel: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | |||||
; RV32IA-NEXT: andi a6, a0, -4 | ; RV32IA-NEXT: andi a6, a0, -4 | ||||
; RV32IA-NEXT: slli a0, a0, 3 | ; RV32IA-NEXT: slli a0, a0, 3 | ||||
; RV32IA-NEXT: andi a3, a0, 24 | ; RV32IA-NEXT: andi a3, a0, 24 | ||||
; RV32IA-NEXT: addi a4, zero, 255 | ; RV32IA-NEXT: addi a4, zero, 255 | ||||
; RV32IA-NEXT: sll a7, a4, a0 | ; RV32IA-NEXT: sll a7, a4, a0 | ||||
; RV32IA-NEXT: slli a1, a1, 24 | ; RV32IA-NEXT: slli a1, a1, 24 | ||||
; RV32IA-NEXT: srai a1, a1, 24 | ; RV32IA-NEXT: srai a1, a1, 24 | ||||
; RV32IA-NEXT: sll a1, a1, a0 | ; RV32IA-NEXT: sll a1, a1, a0 | ||||
; RV32IA-NEXT: addi a5, zero, 24 | ; RV32IA-NEXT: sub a3, a4, a3 | ||||
; RV32IA-NEXT: sub a3, a5, a3 | ; RV32IA-NEXT: addi a3, a3, -231 | ||||
; RV32IA-NEXT: .LBB44_1: # =>This Inner Loop Header: Depth=1 | ; RV32IA-NEXT: .LBB44_1: # =>This Inner Loop Header: Depth=1 | ||||
; RV32IA-NEXT: lr.w.aqrl a5, (a6) | ; RV32IA-NEXT: lr.w.aqrl a4, (a6) | ||||
; RV32IA-NEXT: and a4, a5, a7 | ; RV32IA-NEXT: and a5, a4, a7 | ||||
; RV32IA-NEXT: mv a2, a5 | ; RV32IA-NEXT: mv a2, a4 | ||||
; RV32IA-NEXT: sll a4, a4, a3 | ; RV32IA-NEXT: sll a5, a5, a3 | ||||
; RV32IA-NEXT: sra a4, a4, a3 | ; RV32IA-NEXT: sra a5, a5, a3 | ||||
; RV32IA-NEXT: bge a1, a4, .LBB44_3 | ; RV32IA-NEXT: bge a1, a5, .LBB44_3 | ||||
; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB44_1 Depth=1 | ; RV32IA-NEXT: # %bb.2: # in Loop: Header=BB44_1 Depth=1 | ||||
; RV32IA-NEXT: xor a2, a5, a1 | ; RV32IA-NEXT: xor a2, a4, a1 | ||||
; RV32IA-NEXT: and a2, a2, a7 | ; RV32IA-NEXT: and a2, a2, a7 | ||||
; RV32IA-NEXT: xor a2, a5, a2 | ; RV32IA-NEXT: xor a2, a4, a2 | ||||
; RV32IA-NEXT: .LBB44_3: # in Loop: Header=BB44_1 Depth=1 | ; RV32IA-NEXT: .LBB44_3: # in Loop: Header=BB44_1 Depth=1 | ||||
; RV32IA-NEXT: sc.w.aqrl a2, a2, (a6) | ; RV32IA-NEXT: sc.w.aqrl a2, a2, (a6) | ||||
; RV32IA-NEXT: bnez a2, .LBB44_1 | ; RV32IA-NEXT: bnez a2, .LBB44_1 | ||||
; RV32IA-NEXT: # %bb.4: | ; RV32IA-NEXT: # %bb.4: | ||||
; RV32IA-NEXT: srl a0, a5, a0 | ; RV32IA-NEXT: srl a0, a4, a0 | ||||
; RV32IA-NEXT: ret | ; RV32IA-NEXT: ret | ||||
; | ; | ||||
; RV64I-LABEL: atomicrmw_min_i8_seq_cst: | ; RV64I-LABEL: atomicrmw_min_i8_seq_cst: | ||||
; RV64I: # %bb.0: | ; RV64I: # %bb.0: | ||||
; RV64I-NEXT: addi sp, sp, -48 | ; RV64I-NEXT: addi sp, sp, -48 | ||||
; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill | ||||
; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill | ||||
▲ Show 20 Lines • Show All 13,943 Lines • Show Last 20 Lines |