Skip to content

[LoongArch] Minor refinement to monotonic atomic semantics. #112681

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 33 additions & 42 deletions llvm/lib/Target/LoongArch/LoongArchInstrInfo.td
Original file line number Diff line number Diff line change
Expand Up @@ -2075,58 +2075,49 @@ multiclass ternary_atomic_op_failure_ord {
defm atomic_cmp_swap_i32 : ternary_atomic_op_failure_ord;
defm atomic_cmp_swap_i64 : ternary_atomic_op_failure_ord;

// Atomic operation for word and double word
multiclass binary_atomic_op_wd<string inst, string op, string signed = ""> {
def : Pat<(!cast<PatFrag>(op#"_i32_monotonic") GPR:$rj, GPR:$rk),
(!cast<Instruction>(inst#"_W"#signed) GPR:$rk, GPR:$rj)>;
def : Pat<(!cast<PatFrag>(op#"_i64_monotonic") GPR:$rj, GPR:$rk),
(!cast<Instruction>(inst#"_D"#signed) GPR:$rk, GPR:$rj)>;

def : Pat<(!cast<PatFrag>(op#"_i32") GPR:$rj, GPR:$rk),
(!cast<Instruction>(inst#"__DB_W"#signed) GPR:$rk, GPR:$rj)>;
def : Pat<(!cast<PatFrag>(op#"_i64") GPR:$rj, GPR:$rk),
(!cast<Instruction>(inst#"__DB_D"#signed) GPR:$rk, GPR:$rj)>;
}

let Predicates = [IsLA64] in {
def : AtomicPat<int_loongarch_masked_atomicrmw_xchg_i64,
PseudoMaskedAtomicSwap32>;
def : Pat<(atomic_swap_i32 GPR:$addr, GPR:$incr),
(AMSWAP__DB_W GPR:$incr, GPR:$addr)>;
def : Pat<(atomic_swap_i64 GPR:$addr, GPR:$incr),
(AMSWAP__DB_D GPR:$incr, GPR:$addr)>;
def : Pat<(atomic_load_add_i64 GPR:$rj, GPR:$rk),
(AMADD__DB_D GPR:$rk, GPR:$rj)>;
def : AtomicPat<int_loongarch_masked_atomicrmw_add_i64,
PseudoMaskedAtomicLoadAdd32>;

defm : binary_atomic_op_wd<"AMSWAP", "atomic_swap">;
defm : binary_atomic_op_wd<"AMADD", "atomic_load_add">;
defm : binary_atomic_op_wd<"AMAND", "atomic_load_and">;
defm : binary_atomic_op_wd<"AMOR", "atomic_load_or">;
defm : binary_atomic_op_wd<"AMXOR", "atomic_load_xor">;
defm : binary_atomic_op_wd<"AMMIN", "atomic_load_umin", "U">;
defm : binary_atomic_op_wd<"AMMAX", "atomic_load_umax", "U">;
defm : binary_atomic_op_wd<"AMMIN", "atomic_load_min">;
defm : binary_atomic_op_wd<"AMMAX", "atomic_load_max">;
def : Pat<(atomic_load_sub_i32_monotonic GPR:$rj, GPR:$rk),
(AMADD_W (SUB_W R0, GPR:$rk), GPR:$rj)>;
def : Pat<(atomic_load_sub_i64_monotonic GPR:$rj, GPR:$rk),
(AMADD_D (SUB_D R0, GPR:$rk), GPR:$rj)>;

def : Pat<(atomic_load_sub_i32 GPR:$rj, GPR:$rk),
(AMADD__DB_W (SUB_W R0, GPR:$rk), GPR:$rj)>;
def : Pat<(atomic_load_sub_i64 GPR:$rj, GPR:$rk),
(AMADD__DB_D (SUB_D R0, GPR:$rk), GPR:$rj)>;

def : AtomicPat<int_loongarch_masked_atomicrmw_xchg_i64,
PseudoMaskedAtomicSwap32>;
def : AtomicPat<int_loongarch_masked_atomicrmw_add_i64,
PseudoMaskedAtomicLoadAdd32>;
def : AtomicPat<int_loongarch_masked_atomicrmw_sub_i64,
PseudoMaskedAtomicLoadSub32>;
defm : PseudoBinPat<"atomic_load_nand_i64", PseudoAtomicLoadNand64>;
def : AtomicPat<int_loongarch_masked_atomicrmw_nand_i64,
PseudoMaskedAtomicLoadNand32>;
def : Pat<(atomic_load_add_i32 GPR:$rj, GPR:$rk),
(AMADD__DB_W GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_and_i32 GPR:$rj, GPR:$rk),
(AMAND__DB_W GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_and_i64 GPR:$rj, GPR:$rk),
(AMAND__DB_D GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_or_i32 GPR:$rj, GPR:$rk),
(AMOR__DB_W GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_or_i64 GPR:$rj, GPR:$rk),
(AMOR__DB_D GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_xor_i32 GPR:$rj, GPR:$rk),
(AMXOR__DB_W GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_xor_i64 GPR:$rj, GPR:$rk),
(AMXOR__DB_D GPR:$rk, GPR:$rj)>;

def : Pat<(atomic_load_umin_i32 GPR:$rj, GPR:$rk),
(AMMIN__DB_WU GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_umin_i64 GPR:$rj, GPR:$rk),
(AMMIN__DB_DU GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_umax_i32 GPR:$rj, GPR:$rk),
(AMMAX__DB_WU GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_umax_i64 GPR:$rj, GPR:$rk),
(AMMAX__DB_DU GPR:$rk, GPR:$rj)>;

def : Pat<(atomic_load_min_i32 GPR:$rj, GPR:$rk),
(AMMIN__DB_W GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_min_i64 GPR:$rj, GPR:$rk),
(AMMIN__DB_D GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_max_i32 GPR:$rj, GPR:$rk),
(AMMAX__DB_W GPR:$rk, GPR:$rj)>;
def : Pat<(atomic_load_max_i64 GPR:$rj, GPR:$rk),
(AMMAX__DB_D GPR:$rk, GPR:$rj)>;

def : AtomicPat<int_loongarch_masked_atomicrmw_umax_i64,
PseudoMaskedAtomicLoadUMax32>;
Expand Down
16 changes: 8 additions & 8 deletions llvm/test/CodeGen/LoongArch/ir-instruction/atomicrmw-minmax.ll
Original file line number Diff line number Diff line change
Expand Up @@ -1368,7 +1368,7 @@ define i16 @atomicrmw_umax_i16_monotonic(ptr %a, i16 %b) nounwind {
define i32 @atomicrmw_umax_i32_monotonic(ptr %a, i32 %b) nounwind {
; LA64-LABEL: atomicrmw_umax_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: ammax_db.wu $a2, $a1, $a0
; LA64-NEXT: ammax.wu $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw umax ptr %a, i32 %b monotonic
Expand All @@ -1378,7 +1378,7 @@ define i32 @atomicrmw_umax_i32_monotonic(ptr %a, i32 %b) nounwind {
define i64 @atomicrmw_umax_i64_monotonic(ptr %a, i64 %b) nounwind {
; LA64-LABEL: atomicrmw_umax_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: ammax_db.du $a2, $a1, $a0
; LA64-NEXT: ammax.du $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw umax ptr %a, i64 %b monotonic
Expand Down Expand Up @@ -1445,7 +1445,7 @@ define i16 @atomicrmw_umin_i16_monotonic(ptr %a, i16 %b) nounwind {
define i32 @atomicrmw_umin_i32_monotonic(ptr %a, i32 %b) nounwind {
; LA64-LABEL: atomicrmw_umin_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: ammin_db.wu $a2, $a1, $a0
; LA64-NEXT: ammin.wu $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw umin ptr %a, i32 %b monotonic
Expand All @@ -1455,7 +1455,7 @@ define i32 @atomicrmw_umin_i32_monotonic(ptr %a, i32 %b) nounwind {
define i64 @atomicrmw_umin_i64_monotonic(ptr %a, i64 %b) nounwind {
; LA64-LABEL: atomicrmw_umin_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: ammin_db.du $a2, $a1, $a0
; LA64-NEXT: ammin.du $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw umin ptr %a, i64 %b monotonic
Expand Down Expand Up @@ -1531,7 +1531,7 @@ define i16 @atomicrmw_max_i16_monotonic(ptr %a, i16 %b) nounwind {
define i32 @atomicrmw_max_i32_monotonic(ptr %a, i32 %b) nounwind {
; LA64-LABEL: atomicrmw_max_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: ammax_db.w $a2, $a1, $a0
; LA64-NEXT: ammax.w $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw max ptr %a, i32 %b monotonic
Expand All @@ -1541,7 +1541,7 @@ define i32 @atomicrmw_max_i32_monotonic(ptr %a, i32 %b) nounwind {
define i64 @atomicrmw_max_i64_monotonic(ptr %a, i64 %b) nounwind {
; LA64-LABEL: atomicrmw_max_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: ammax_db.d $a2, $a1, $a0
; LA64-NEXT: ammax.d $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw max ptr %a, i64 %b monotonic
Expand Down Expand Up @@ -1617,7 +1617,7 @@ define i16 @atomicrmw_min_i16_monotonic(ptr %a, i16 %b) nounwind {
define i32 @atomicrmw_min_i32_monotonic(ptr %a, i32 %b) nounwind {
; LA64-LABEL: atomicrmw_min_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: ammin_db.w $a2, $a1, $a0
; LA64-NEXT: ammin.w $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw min ptr %a, i32 %b monotonic
Expand All @@ -1627,7 +1627,7 @@ define i32 @atomicrmw_min_i32_monotonic(ptr %a, i32 %b) nounwind {
define i64 @atomicrmw_min_i64_monotonic(ptr %a, i64 %b) nounwind {
; LA64-LABEL: atomicrmw_min_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: ammin_db.d $a2, $a1, $a0
; LA64-NEXT: ammin.d $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw min ptr %a, i64 %b monotonic
Expand Down
44 changes: 22 additions & 22 deletions llvm/test/CodeGen/LoongArch/ir-instruction/atomicrmw.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3982,7 +3982,7 @@ define i8 @atomicrmw_xchg_0_i8_monotonic(ptr %a) nounwind {
; LA64-NEXT: ori $a2, $zero, 255
; LA64-NEXT: sll.w $a2, $a2, $a1
; LA64-NEXT: nor $a2, $a2, $zero
; LA64-NEXT: amand_db.w $a3, $a2, $a0
; LA64-NEXT: amand.w $a3, $a2, $a0
; LA64-NEXT: srl.w $a0, $a3, $a1
; LA64-NEXT: ret
%1 = atomicrmw xchg ptr %a, i8 0 monotonic
Expand Down Expand Up @@ -4011,7 +4011,7 @@ define i8 @atomicrmw_xchg_minus_1_i8_monotonic(ptr %a) nounwind {
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
; LA64-NEXT: ori $a2, $zero, 255
; LA64-NEXT: sll.w $a2, $a2, $a1
; LA64-NEXT: amor_db.w $a3, $a2, $a0
; LA64-NEXT: amor.w $a3, $a2, $a0
; LA64-NEXT: srl.w $a0, $a3, $a1
; LA64-NEXT: ret
%1 = atomicrmw xchg ptr %a, i8 -1 monotonic
Expand Down Expand Up @@ -4090,7 +4090,7 @@ define i16 @atomicrmw_xchg_0_i16_monotonic(ptr %a) nounwind {
; LA64-NEXT: ori $a2, $a2, 4095
; LA64-NEXT: sll.w $a2, $a2, $a1
; LA64-NEXT: nor $a2, $a2, $zero
; LA64-NEXT: amand_db.w $a3, $a2, $a0
; LA64-NEXT: amand.w $a3, $a2, $a0
; LA64-NEXT: srl.w $a0, $a3, $a1
; LA64-NEXT: ret
%1 = atomicrmw xchg ptr %a, i16 0 monotonic
Expand Down Expand Up @@ -4121,7 +4121,7 @@ define i16 @atomicrmw_xchg_minus_1_i16_monotonic(ptr %a) nounwind {
; LA64-NEXT: lu12i.w $a2, 15
; LA64-NEXT: ori $a2, $a2, 4095
; LA64-NEXT: sll.w $a2, $a2, $a1
; LA64-NEXT: amor_db.w $a3, $a2, $a0
; LA64-NEXT: amor.w $a3, $a2, $a0
; LA64-NEXT: srl.w $a0, $a3, $a1
; LA64-NEXT: ret
%1 = atomicrmw xchg ptr %a, i16 -1 monotonic
Expand All @@ -4142,7 +4142,7 @@ define i32 @atomicrmw_xchg_i32_monotonic(ptr %a, i32 %b) nounwind {
;
; LA64-LABEL: atomicrmw_xchg_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amswap_db.w $a2, $a1, $a0
; LA64-NEXT: amswap.w $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw xchg ptr %a, i32 %b monotonic
Expand All @@ -4162,7 +4162,7 @@ define i64 @atomicrmw_xchg_i64_monotonic(ptr %a, i64 %b) nounwind {
;
; LA64-LABEL: atomicrmw_xchg_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amswap_db.d $a2, $a1, $a0
; LA64-NEXT: amswap.d $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw xchg ptr %a, i64 %b monotonic
Expand Down Expand Up @@ -4273,7 +4273,7 @@ define i32 @atomicrmw_add_i32_monotonic(ptr %a, i32 %b) nounwind {
;
; LA64-LABEL: atomicrmw_add_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amadd_db.w $a2, $a1, $a0
; LA64-NEXT: amadd.w $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw add ptr %a, i32 %b monotonic
Expand All @@ -4293,7 +4293,7 @@ define i64 @atomicrmw_add_i64_monotonic(ptr %a, i64 %b) nounwind {
;
; LA64-LABEL: atomicrmw_add_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amadd_db.d $a2, $a1, $a0
; LA64-NEXT: amadd.d $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw add ptr %a, i64 %b monotonic
Expand Down Expand Up @@ -4405,7 +4405,7 @@ define i32 @atomicrmw_sub_i32_monotonic(ptr %a, i32 %b) nounwind {
; LA64-LABEL: atomicrmw_sub_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: sub.w $a2, $zero, $a1
; LA64-NEXT: amadd_db.w $a1, $a2, $a0
; LA64-NEXT: amadd.w $a1, $a2, $a0
; LA64-NEXT: move $a0, $a1
; LA64-NEXT: ret
%1 = atomicrmw sub ptr %a, i32 %b monotonic
Expand All @@ -4426,7 +4426,7 @@ define i64 @atomicrmw_sub_i64_monotonic(ptr %a, i64 %b) nounwind {
; LA64-LABEL: atomicrmw_sub_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: sub.d $a2, $zero, $a1
; LA64-NEXT: amadd_db.d $a1, $a2, $a0
; LA64-NEXT: amadd.d $a1, $a2, $a0
; LA64-NEXT: move $a0, $a1
; LA64-NEXT: ret
%1 = atomicrmw sub ptr %a, i64 %b monotonic
Expand Down Expand Up @@ -4609,7 +4609,7 @@ define i8 @atomicrmw_and_i8_monotonic(ptr %a, i8 %b) nounwind {
; LA64-NEXT: andi $a1, $a1, 255
; LA64-NEXT: sll.w $a1, $a1, $a2
; LA64-NEXT: orn $a1, $a1, $a3
; LA64-NEXT: amand_db.w $a3, $a1, $a0
; LA64-NEXT: amand.w $a3, $a1, $a0
; LA64-NEXT: srl.w $a0, $a3, $a2
; LA64-NEXT: ret
%1 = atomicrmw and ptr %a, i8 %b monotonic
Expand Down Expand Up @@ -4646,7 +4646,7 @@ define i16 @atomicrmw_and_i16_monotonic(ptr %a, i16 %b) nounwind {
; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
; LA64-NEXT: sll.w $a1, $a1, $a2
; LA64-NEXT: orn $a1, $a1, $a3
; LA64-NEXT: amand_db.w $a3, $a1, $a0
; LA64-NEXT: amand.w $a3, $a1, $a0
; LA64-NEXT: srl.w $a0, $a3, $a2
; LA64-NEXT: ret
%1 = atomicrmw and ptr %a, i16 %b monotonic
Expand All @@ -4667,7 +4667,7 @@ define i32 @atomicrmw_and_i32_monotonic(ptr %a, i32 %b) nounwind {
;
; LA64-LABEL: atomicrmw_and_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amand_db.w $a2, $a1, $a0
; LA64-NEXT: amand.w $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw and ptr %a, i32 %b monotonic
Expand All @@ -4687,7 +4687,7 @@ define i64 @atomicrmw_and_i64_monotonic(ptr %a, i64 %b) nounwind {
;
; LA64-LABEL: atomicrmw_and_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amand_db.d $a2, $a1, $a0
; LA64-NEXT: amand.d $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw and ptr %a, i64 %b monotonic
Expand Down Expand Up @@ -4716,7 +4716,7 @@ define i8 @atomicrmw_or_i8_monotonic(ptr %a, i8 %b) nounwind {
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
; LA64-NEXT: andi $a1, $a1, 255
; LA64-NEXT: sll.w $a1, $a1, $a2
; LA64-NEXT: amor_db.w $a3, $a1, $a0
; LA64-NEXT: amor.w $a3, $a1, $a0
; LA64-NEXT: srl.w $a0, $a3, $a2
; LA64-NEXT: ret
%1 = atomicrmw or ptr %a, i8 %b monotonic
Expand Down Expand Up @@ -4745,7 +4745,7 @@ define i16 @atomicrmw_or_i16_monotonic(ptr %a, i16 %b) nounwind {
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
; LA64-NEXT: sll.w $a1, $a1, $a2
; LA64-NEXT: amor_db.w $a3, $a1, $a0
; LA64-NEXT: amor.w $a3, $a1, $a0
; LA64-NEXT: srl.w $a0, $a3, $a2
; LA64-NEXT: ret
%1 = atomicrmw or ptr %a, i16 %b monotonic
Expand All @@ -4766,7 +4766,7 @@ define i32 @atomicrmw_or_i32_monotonic(ptr %a, i32 %b) nounwind {
;
; LA64-LABEL: atomicrmw_or_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amor_db.w $a2, $a1, $a0
; LA64-NEXT: amor.w $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw or ptr %a, i32 %b monotonic
Expand All @@ -4786,7 +4786,7 @@ define i64 @atomicrmw_or_i64_monotonic(ptr %a, i64 %b) nounwind {
;
; LA64-LABEL: atomicrmw_or_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amor_db.d $a2, $a1, $a0
; LA64-NEXT: amor.d $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw or ptr %a, i64 %b monotonic
Expand Down Expand Up @@ -4815,7 +4815,7 @@ define i8 @atomicrmw_xor_i8_monotonic(ptr %a, i8 %b) nounwind {
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
; LA64-NEXT: andi $a1, $a1, 255
; LA64-NEXT: sll.w $a1, $a1, $a2
; LA64-NEXT: amxor_db.w $a3, $a1, $a0
; LA64-NEXT: amxor.w $a3, $a1, $a0
; LA64-NEXT: srl.w $a0, $a3, $a2
; LA64-NEXT: ret
%1 = atomicrmw xor ptr %a, i8 %b monotonic
Expand Down Expand Up @@ -4844,7 +4844,7 @@ define i16 @atomicrmw_xor_i16_monotonic(ptr %a, i16 %b) nounwind {
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
; LA64-NEXT: sll.w $a1, $a1, $a2
; LA64-NEXT: amxor_db.w $a3, $a1, $a0
; LA64-NEXT: amxor.w $a3, $a1, $a0
; LA64-NEXT: srl.w $a0, $a3, $a2
; LA64-NEXT: ret
%1 = atomicrmw xor ptr %a, i16 %b monotonic
Expand All @@ -4865,7 +4865,7 @@ define i32 @atomicrmw_xor_i32_monotonic(ptr %a, i32 %b) nounwind {
;
; LA64-LABEL: atomicrmw_xor_i32_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amxor_db.w $a2, $a1, $a0
; LA64-NEXT: amxor.w $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw xor ptr %a, i32 %b monotonic
Expand All @@ -4885,7 +4885,7 @@ define i64 @atomicrmw_xor_i64_monotonic(ptr %a, i64 %b) nounwind {
;
; LA64-LABEL: atomicrmw_xor_i64_monotonic:
; LA64: # %bb.0:
; LA64-NEXT: amxor_db.d $a2, $a1, $a0
; LA64-NEXT: amxor.d $a2, $a1, $a0
; LA64-NEXT: move $a0, $a2
; LA64-NEXT: ret
%1 = atomicrmw xor ptr %a, i64 %b monotonic
Expand Down
Loading