Skip to content

Commit ba5676c

Browse files
authored
[LoongArch] Minor refinement to monotonic atomic semantics. (#112681)
Don't use "_db" version AM instructions for LoongArch atomic memory operations with monotonic semantics.
1 parent d582442 commit ba5676c

File tree

3 files changed

+63
-72
lines changed

3 files changed

+63
-72
lines changed

llvm/lib/Target/LoongArch/LoongArchInstrInfo.td

Lines changed: 33 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2075,58 +2075,49 @@ multiclass ternary_atomic_op_failure_ord {
20752075
defm atomic_cmp_swap_i32 : ternary_atomic_op_failure_ord;
20762076
defm atomic_cmp_swap_i64 : ternary_atomic_op_failure_ord;
20772077

2078+
// Atomic operation for word and double word
2079+
multiclass binary_atomic_op_wd<string inst, string op, string signed = ""> {
2080+
def : Pat<(!cast<PatFrag>(op#"_i32_monotonic") GPR:$rj, GPR:$rk),
2081+
(!cast<Instruction>(inst#"_W"#signed) GPR:$rk, GPR:$rj)>;
2082+
def : Pat<(!cast<PatFrag>(op#"_i64_monotonic") GPR:$rj, GPR:$rk),
2083+
(!cast<Instruction>(inst#"_D"#signed) GPR:$rk, GPR:$rj)>;
2084+
2085+
def : Pat<(!cast<PatFrag>(op#"_i32") GPR:$rj, GPR:$rk),
2086+
(!cast<Instruction>(inst#"__DB_W"#signed) GPR:$rk, GPR:$rj)>;
2087+
def : Pat<(!cast<PatFrag>(op#"_i64") GPR:$rj, GPR:$rk),
2088+
(!cast<Instruction>(inst#"__DB_D"#signed) GPR:$rk, GPR:$rj)>;
2089+
}
2090+
20782091
let Predicates = [IsLA64] in {
2079-
def : AtomicPat<int_loongarch_masked_atomicrmw_xchg_i64,
2080-
PseudoMaskedAtomicSwap32>;
2081-
def : Pat<(atomic_swap_i32 GPR:$addr, GPR:$incr),
2082-
(AMSWAP__DB_W GPR:$incr, GPR:$addr)>;
2083-
def : Pat<(atomic_swap_i64 GPR:$addr, GPR:$incr),
2084-
(AMSWAP__DB_D GPR:$incr, GPR:$addr)>;
2085-
def : Pat<(atomic_load_add_i64 GPR:$rj, GPR:$rk),
2086-
(AMADD__DB_D GPR:$rk, GPR:$rj)>;
2087-
def : AtomicPat<int_loongarch_masked_atomicrmw_add_i64,
2088-
PseudoMaskedAtomicLoadAdd32>;
2092+
2093+
defm : binary_atomic_op_wd<"AMSWAP", "atomic_swap">;
2094+
defm : binary_atomic_op_wd<"AMADD", "atomic_load_add">;
2095+
defm : binary_atomic_op_wd<"AMAND", "atomic_load_and">;
2096+
defm : binary_atomic_op_wd<"AMOR", "atomic_load_or">;
2097+
defm : binary_atomic_op_wd<"AMXOR", "atomic_load_xor">;
2098+
defm : binary_atomic_op_wd<"AMMIN", "atomic_load_umin", "U">;
2099+
defm : binary_atomic_op_wd<"AMMAX", "atomic_load_umax", "U">;
2100+
defm : binary_atomic_op_wd<"AMMIN", "atomic_load_min">;
2101+
defm : binary_atomic_op_wd<"AMMAX", "atomic_load_max">;
2102+
def : Pat<(atomic_load_sub_i32_monotonic GPR:$rj, GPR:$rk),
2103+
(AMADD_W (SUB_W R0, GPR:$rk), GPR:$rj)>;
2104+
def : Pat<(atomic_load_sub_i64_monotonic GPR:$rj, GPR:$rk),
2105+
(AMADD_D (SUB_D R0, GPR:$rk), GPR:$rj)>;
2106+
20892107
def : Pat<(atomic_load_sub_i32 GPR:$rj, GPR:$rk),
20902108
(AMADD__DB_W (SUB_W R0, GPR:$rk), GPR:$rj)>;
20912109
def : Pat<(atomic_load_sub_i64 GPR:$rj, GPR:$rk),
20922110
(AMADD__DB_D (SUB_D R0, GPR:$rk), GPR:$rj)>;
2111+
2112+
def : AtomicPat<int_loongarch_masked_atomicrmw_xchg_i64,
2113+
PseudoMaskedAtomicSwap32>;
2114+
def : AtomicPat<int_loongarch_masked_atomicrmw_add_i64,
2115+
PseudoMaskedAtomicLoadAdd32>;
20932116
def : AtomicPat<int_loongarch_masked_atomicrmw_sub_i64,
20942117
PseudoMaskedAtomicLoadSub32>;
20952118
defm : PseudoBinPat<"atomic_load_nand_i64", PseudoAtomicLoadNand64>;
20962119
def : AtomicPat<int_loongarch_masked_atomicrmw_nand_i64,
20972120
PseudoMaskedAtomicLoadNand32>;
2098-
def : Pat<(atomic_load_add_i32 GPR:$rj, GPR:$rk),
2099-
(AMADD__DB_W GPR:$rk, GPR:$rj)>;
2100-
def : Pat<(atomic_load_and_i32 GPR:$rj, GPR:$rk),
2101-
(AMAND__DB_W GPR:$rk, GPR:$rj)>;
2102-
def : Pat<(atomic_load_and_i64 GPR:$rj, GPR:$rk),
2103-
(AMAND__DB_D GPR:$rk, GPR:$rj)>;
2104-
def : Pat<(atomic_load_or_i32 GPR:$rj, GPR:$rk),
2105-
(AMOR__DB_W GPR:$rk, GPR:$rj)>;
2106-
def : Pat<(atomic_load_or_i64 GPR:$rj, GPR:$rk),
2107-
(AMOR__DB_D GPR:$rk, GPR:$rj)>;
2108-
def : Pat<(atomic_load_xor_i32 GPR:$rj, GPR:$rk),
2109-
(AMXOR__DB_W GPR:$rk, GPR:$rj)>;
2110-
def : Pat<(atomic_load_xor_i64 GPR:$rj, GPR:$rk),
2111-
(AMXOR__DB_D GPR:$rk, GPR:$rj)>;
2112-
2113-
def : Pat<(atomic_load_umin_i32 GPR:$rj, GPR:$rk),
2114-
(AMMIN__DB_WU GPR:$rk, GPR:$rj)>;
2115-
def : Pat<(atomic_load_umin_i64 GPR:$rj, GPR:$rk),
2116-
(AMMIN__DB_DU GPR:$rk, GPR:$rj)>;
2117-
def : Pat<(atomic_load_umax_i32 GPR:$rj, GPR:$rk),
2118-
(AMMAX__DB_WU GPR:$rk, GPR:$rj)>;
2119-
def : Pat<(atomic_load_umax_i64 GPR:$rj, GPR:$rk),
2120-
(AMMAX__DB_DU GPR:$rk, GPR:$rj)>;
2121-
2122-
def : Pat<(atomic_load_min_i32 GPR:$rj, GPR:$rk),
2123-
(AMMIN__DB_W GPR:$rk, GPR:$rj)>;
2124-
def : Pat<(atomic_load_min_i64 GPR:$rj, GPR:$rk),
2125-
(AMMIN__DB_D GPR:$rk, GPR:$rj)>;
2126-
def : Pat<(atomic_load_max_i32 GPR:$rj, GPR:$rk),
2127-
(AMMAX__DB_W GPR:$rk, GPR:$rj)>;
2128-
def : Pat<(atomic_load_max_i64 GPR:$rj, GPR:$rk),
2129-
(AMMAX__DB_D GPR:$rk, GPR:$rj)>;
21302121

21312122
def : AtomicPat<int_loongarch_masked_atomicrmw_umax_i64,
21322123
PseudoMaskedAtomicLoadUMax32>;

llvm/test/CodeGen/LoongArch/ir-instruction/atomicrmw-minmax.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ define i16 @atomicrmw_umax_i16_monotonic(ptr %a, i16 %b) nounwind {
13681368
define i32 @atomicrmw_umax_i32_monotonic(ptr %a, i32 %b) nounwind {
13691369
; LA64-LABEL: atomicrmw_umax_i32_monotonic:
13701370
; LA64: # %bb.0:
1371-
; LA64-NEXT: ammax_db.wu $a2, $a1, $a0
1371+
; LA64-NEXT: ammax.wu $a2, $a1, $a0
13721372
; LA64-NEXT: move $a0, $a2
13731373
; LA64-NEXT: ret
13741374
%1 = atomicrmw umax ptr %a, i32 %b monotonic
@@ -1378,7 +1378,7 @@ define i32 @atomicrmw_umax_i32_monotonic(ptr %a, i32 %b) nounwind {
13781378
define i64 @atomicrmw_umax_i64_monotonic(ptr %a, i64 %b) nounwind {
13791379
; LA64-LABEL: atomicrmw_umax_i64_monotonic:
13801380
; LA64: # %bb.0:
1381-
; LA64-NEXT: ammax_db.du $a2, $a1, $a0
1381+
; LA64-NEXT: ammax.du $a2, $a1, $a0
13821382
; LA64-NEXT: move $a0, $a2
13831383
; LA64-NEXT: ret
13841384
%1 = atomicrmw umax ptr %a, i64 %b monotonic
@@ -1445,7 +1445,7 @@ define i16 @atomicrmw_umin_i16_monotonic(ptr %a, i16 %b) nounwind {
14451445
define i32 @atomicrmw_umin_i32_monotonic(ptr %a, i32 %b) nounwind {
14461446
; LA64-LABEL: atomicrmw_umin_i32_monotonic:
14471447
; LA64: # %bb.0:
1448-
; LA64-NEXT: ammin_db.wu $a2, $a1, $a0
1448+
; LA64-NEXT: ammin.wu $a2, $a1, $a0
14491449
; LA64-NEXT: move $a0, $a2
14501450
; LA64-NEXT: ret
14511451
%1 = atomicrmw umin ptr %a, i32 %b monotonic
@@ -1455,7 +1455,7 @@ define i32 @atomicrmw_umin_i32_monotonic(ptr %a, i32 %b) nounwind {
14551455
define i64 @atomicrmw_umin_i64_monotonic(ptr %a, i64 %b) nounwind {
14561456
; LA64-LABEL: atomicrmw_umin_i64_monotonic:
14571457
; LA64: # %bb.0:
1458-
; LA64-NEXT: ammin_db.du $a2, $a1, $a0
1458+
; LA64-NEXT: ammin.du $a2, $a1, $a0
14591459
; LA64-NEXT: move $a0, $a2
14601460
; LA64-NEXT: ret
14611461
%1 = atomicrmw umin ptr %a, i64 %b monotonic
@@ -1531,7 +1531,7 @@ define i16 @atomicrmw_max_i16_monotonic(ptr %a, i16 %b) nounwind {
15311531
define i32 @atomicrmw_max_i32_monotonic(ptr %a, i32 %b) nounwind {
15321532
; LA64-LABEL: atomicrmw_max_i32_monotonic:
15331533
; LA64: # %bb.0:
1534-
; LA64-NEXT: ammax_db.w $a2, $a1, $a0
1534+
; LA64-NEXT: ammax.w $a2, $a1, $a0
15351535
; LA64-NEXT: move $a0, $a2
15361536
; LA64-NEXT: ret
15371537
%1 = atomicrmw max ptr %a, i32 %b monotonic
@@ -1541,7 +1541,7 @@ define i32 @atomicrmw_max_i32_monotonic(ptr %a, i32 %b) nounwind {
15411541
define i64 @atomicrmw_max_i64_monotonic(ptr %a, i64 %b) nounwind {
15421542
; LA64-LABEL: atomicrmw_max_i64_monotonic:
15431543
; LA64: # %bb.0:
1544-
; LA64-NEXT: ammax_db.d $a2, $a1, $a0
1544+
; LA64-NEXT: ammax.d $a2, $a1, $a0
15451545
; LA64-NEXT: move $a0, $a2
15461546
; LA64-NEXT: ret
15471547
%1 = atomicrmw max ptr %a, i64 %b monotonic
@@ -1617,7 +1617,7 @@ define i16 @atomicrmw_min_i16_monotonic(ptr %a, i16 %b) nounwind {
16171617
define i32 @atomicrmw_min_i32_monotonic(ptr %a, i32 %b) nounwind {
16181618
; LA64-LABEL: atomicrmw_min_i32_monotonic:
16191619
; LA64: # %bb.0:
1620-
; LA64-NEXT: ammin_db.w $a2, $a1, $a0
1620+
; LA64-NEXT: ammin.w $a2, $a1, $a0
16211621
; LA64-NEXT: move $a0, $a2
16221622
; LA64-NEXT: ret
16231623
%1 = atomicrmw min ptr %a, i32 %b monotonic
@@ -1627,7 +1627,7 @@ define i32 @atomicrmw_min_i32_monotonic(ptr %a, i32 %b) nounwind {
16271627
define i64 @atomicrmw_min_i64_monotonic(ptr %a, i64 %b) nounwind {
16281628
; LA64-LABEL: atomicrmw_min_i64_monotonic:
16291629
; LA64: # %bb.0:
1630-
; LA64-NEXT: ammin_db.d $a2, $a1, $a0
1630+
; LA64-NEXT: ammin.d $a2, $a1, $a0
16311631
; LA64-NEXT: move $a0, $a2
16321632
; LA64-NEXT: ret
16331633
%1 = atomicrmw min ptr %a, i64 %b monotonic

llvm/test/CodeGen/LoongArch/ir-instruction/atomicrmw.ll

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3982,7 +3982,7 @@ define i8 @atomicrmw_xchg_0_i8_monotonic(ptr %a) nounwind {
39823982
; LA64-NEXT: ori $a2, $zero, 255
39833983
; LA64-NEXT: sll.w $a2, $a2, $a1
39843984
; LA64-NEXT: nor $a2, $a2, $zero
3985-
; LA64-NEXT: amand_db.w $a3, $a2, $a0
3985+
; LA64-NEXT: amand.w $a3, $a2, $a0
39863986
; LA64-NEXT: srl.w $a0, $a3, $a1
39873987
; LA64-NEXT: ret
39883988
%1 = atomicrmw xchg ptr %a, i8 0 monotonic
@@ -4011,7 +4011,7 @@ define i8 @atomicrmw_xchg_minus_1_i8_monotonic(ptr %a) nounwind {
40114011
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
40124012
; LA64-NEXT: ori $a2, $zero, 255
40134013
; LA64-NEXT: sll.w $a2, $a2, $a1
4014-
; LA64-NEXT: amor_db.w $a3, $a2, $a0
4014+
; LA64-NEXT: amor.w $a3, $a2, $a0
40154015
; LA64-NEXT: srl.w $a0, $a3, $a1
40164016
; LA64-NEXT: ret
40174017
%1 = atomicrmw xchg ptr %a, i8 -1 monotonic
@@ -4090,7 +4090,7 @@ define i16 @atomicrmw_xchg_0_i16_monotonic(ptr %a) nounwind {
40904090
; LA64-NEXT: ori $a2, $a2, 4095
40914091
; LA64-NEXT: sll.w $a2, $a2, $a1
40924092
; LA64-NEXT: nor $a2, $a2, $zero
4093-
; LA64-NEXT: amand_db.w $a3, $a2, $a0
4093+
; LA64-NEXT: amand.w $a3, $a2, $a0
40944094
; LA64-NEXT: srl.w $a0, $a3, $a1
40954095
; LA64-NEXT: ret
40964096
%1 = atomicrmw xchg ptr %a, i16 0 monotonic
@@ -4121,7 +4121,7 @@ define i16 @atomicrmw_xchg_minus_1_i16_monotonic(ptr %a) nounwind {
41214121
; LA64-NEXT: lu12i.w $a2, 15
41224122
; LA64-NEXT: ori $a2, $a2, 4095
41234123
; LA64-NEXT: sll.w $a2, $a2, $a1
4124-
; LA64-NEXT: amor_db.w $a3, $a2, $a0
4124+
; LA64-NEXT: amor.w $a3, $a2, $a0
41254125
; LA64-NEXT: srl.w $a0, $a3, $a1
41264126
; LA64-NEXT: ret
41274127
%1 = atomicrmw xchg ptr %a, i16 -1 monotonic
@@ -4142,7 +4142,7 @@ define i32 @atomicrmw_xchg_i32_monotonic(ptr %a, i32 %b) nounwind {
41424142
;
41434143
; LA64-LABEL: atomicrmw_xchg_i32_monotonic:
41444144
; LA64: # %bb.0:
4145-
; LA64-NEXT: amswap_db.w $a2, $a1, $a0
4145+
; LA64-NEXT: amswap.w $a2, $a1, $a0
41464146
; LA64-NEXT: move $a0, $a2
41474147
; LA64-NEXT: ret
41484148
%1 = atomicrmw xchg ptr %a, i32 %b monotonic
@@ -4162,7 +4162,7 @@ define i64 @atomicrmw_xchg_i64_monotonic(ptr %a, i64 %b) nounwind {
41624162
;
41634163
; LA64-LABEL: atomicrmw_xchg_i64_monotonic:
41644164
; LA64: # %bb.0:
4165-
; LA64-NEXT: amswap_db.d $a2, $a1, $a0
4165+
; LA64-NEXT: amswap.d $a2, $a1, $a0
41664166
; LA64-NEXT: move $a0, $a2
41674167
; LA64-NEXT: ret
41684168
%1 = atomicrmw xchg ptr %a, i64 %b monotonic
@@ -4273,7 +4273,7 @@ define i32 @atomicrmw_add_i32_monotonic(ptr %a, i32 %b) nounwind {
42734273
;
42744274
; LA64-LABEL: atomicrmw_add_i32_monotonic:
42754275
; LA64: # %bb.0:
4276-
; LA64-NEXT: amadd_db.w $a2, $a1, $a0
4276+
; LA64-NEXT: amadd.w $a2, $a1, $a0
42774277
; LA64-NEXT: move $a0, $a2
42784278
; LA64-NEXT: ret
42794279
%1 = atomicrmw add ptr %a, i32 %b monotonic
@@ -4293,7 +4293,7 @@ define i64 @atomicrmw_add_i64_monotonic(ptr %a, i64 %b) nounwind {
42934293
;
42944294
; LA64-LABEL: atomicrmw_add_i64_monotonic:
42954295
; LA64: # %bb.0:
4296-
; LA64-NEXT: amadd_db.d $a2, $a1, $a0
4296+
; LA64-NEXT: amadd.d $a2, $a1, $a0
42974297
; LA64-NEXT: move $a0, $a2
42984298
; LA64-NEXT: ret
42994299
%1 = atomicrmw add ptr %a, i64 %b monotonic
@@ -4405,7 +4405,7 @@ define i32 @atomicrmw_sub_i32_monotonic(ptr %a, i32 %b) nounwind {
44054405
; LA64-LABEL: atomicrmw_sub_i32_monotonic:
44064406
; LA64: # %bb.0:
44074407
; LA64-NEXT: sub.w $a2, $zero, $a1
4408-
; LA64-NEXT: amadd_db.w $a1, $a2, $a0
4408+
; LA64-NEXT: amadd.w $a1, $a2, $a0
44094409
; LA64-NEXT: move $a0, $a1
44104410
; LA64-NEXT: ret
44114411
%1 = atomicrmw sub ptr %a, i32 %b monotonic
@@ -4426,7 +4426,7 @@ define i64 @atomicrmw_sub_i64_monotonic(ptr %a, i64 %b) nounwind {
44264426
; LA64-LABEL: atomicrmw_sub_i64_monotonic:
44274427
; LA64: # %bb.0:
44284428
; LA64-NEXT: sub.d $a2, $zero, $a1
4429-
; LA64-NEXT: amadd_db.d $a1, $a2, $a0
4429+
; LA64-NEXT: amadd.d $a1, $a2, $a0
44304430
; LA64-NEXT: move $a0, $a1
44314431
; LA64-NEXT: ret
44324432
%1 = atomicrmw sub ptr %a, i64 %b monotonic
@@ -4609,7 +4609,7 @@ define i8 @atomicrmw_and_i8_monotonic(ptr %a, i8 %b) nounwind {
46094609
; LA64-NEXT: andi $a1, $a1, 255
46104610
; LA64-NEXT: sll.w $a1, $a1, $a2
46114611
; LA64-NEXT: orn $a1, $a1, $a3
4612-
; LA64-NEXT: amand_db.w $a3, $a1, $a0
4612+
; LA64-NEXT: amand.w $a3, $a1, $a0
46134613
; LA64-NEXT: srl.w $a0, $a3, $a2
46144614
; LA64-NEXT: ret
46154615
%1 = atomicrmw and ptr %a, i8 %b monotonic
@@ -4646,7 +4646,7 @@ define i16 @atomicrmw_and_i16_monotonic(ptr %a, i16 %b) nounwind {
46464646
; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
46474647
; LA64-NEXT: sll.w $a1, $a1, $a2
46484648
; LA64-NEXT: orn $a1, $a1, $a3
4649-
; LA64-NEXT: amand_db.w $a3, $a1, $a0
4649+
; LA64-NEXT: amand.w $a3, $a1, $a0
46504650
; LA64-NEXT: srl.w $a0, $a3, $a2
46514651
; LA64-NEXT: ret
46524652
%1 = atomicrmw and ptr %a, i16 %b monotonic
@@ -4667,7 +4667,7 @@ define i32 @atomicrmw_and_i32_monotonic(ptr %a, i32 %b) nounwind {
46674667
;
46684668
; LA64-LABEL: atomicrmw_and_i32_monotonic:
46694669
; LA64: # %bb.0:
4670-
; LA64-NEXT: amand_db.w $a2, $a1, $a0
4670+
; LA64-NEXT: amand.w $a2, $a1, $a0
46714671
; LA64-NEXT: move $a0, $a2
46724672
; LA64-NEXT: ret
46734673
%1 = atomicrmw and ptr %a, i32 %b monotonic
@@ -4687,7 +4687,7 @@ define i64 @atomicrmw_and_i64_monotonic(ptr %a, i64 %b) nounwind {
46874687
;
46884688
; LA64-LABEL: atomicrmw_and_i64_monotonic:
46894689
; LA64: # %bb.0:
4690-
; LA64-NEXT: amand_db.d $a2, $a1, $a0
4690+
; LA64-NEXT: amand.d $a2, $a1, $a0
46914691
; LA64-NEXT: move $a0, $a2
46924692
; LA64-NEXT: ret
46934693
%1 = atomicrmw and ptr %a, i64 %b monotonic
@@ -4716,7 +4716,7 @@ define i8 @atomicrmw_or_i8_monotonic(ptr %a, i8 %b) nounwind {
47164716
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
47174717
; LA64-NEXT: andi $a1, $a1, 255
47184718
; LA64-NEXT: sll.w $a1, $a1, $a2
4719-
; LA64-NEXT: amor_db.w $a3, $a1, $a0
4719+
; LA64-NEXT: amor.w $a3, $a1, $a0
47204720
; LA64-NEXT: srl.w $a0, $a3, $a2
47214721
; LA64-NEXT: ret
47224722
%1 = atomicrmw or ptr %a, i8 %b monotonic
@@ -4745,7 +4745,7 @@ define i16 @atomicrmw_or_i16_monotonic(ptr %a, i16 %b) nounwind {
47454745
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
47464746
; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
47474747
; LA64-NEXT: sll.w $a1, $a1, $a2
4748-
; LA64-NEXT: amor_db.w $a3, $a1, $a0
4748+
; LA64-NEXT: amor.w $a3, $a1, $a0
47494749
; LA64-NEXT: srl.w $a0, $a3, $a2
47504750
; LA64-NEXT: ret
47514751
%1 = atomicrmw or ptr %a, i16 %b monotonic
@@ -4766,7 +4766,7 @@ define i32 @atomicrmw_or_i32_monotonic(ptr %a, i32 %b) nounwind {
47664766
;
47674767
; LA64-LABEL: atomicrmw_or_i32_monotonic:
47684768
; LA64: # %bb.0:
4769-
; LA64-NEXT: amor_db.w $a2, $a1, $a0
4769+
; LA64-NEXT: amor.w $a2, $a1, $a0
47704770
; LA64-NEXT: move $a0, $a2
47714771
; LA64-NEXT: ret
47724772
%1 = atomicrmw or ptr %a, i32 %b monotonic
@@ -4786,7 +4786,7 @@ define i64 @atomicrmw_or_i64_monotonic(ptr %a, i64 %b) nounwind {
47864786
;
47874787
; LA64-LABEL: atomicrmw_or_i64_monotonic:
47884788
; LA64: # %bb.0:
4789-
; LA64-NEXT: amor_db.d $a2, $a1, $a0
4789+
; LA64-NEXT: amor.d $a2, $a1, $a0
47904790
; LA64-NEXT: move $a0, $a2
47914791
; LA64-NEXT: ret
47924792
%1 = atomicrmw or ptr %a, i64 %b monotonic
@@ -4815,7 +4815,7 @@ define i8 @atomicrmw_xor_i8_monotonic(ptr %a, i8 %b) nounwind {
48154815
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
48164816
; LA64-NEXT: andi $a1, $a1, 255
48174817
; LA64-NEXT: sll.w $a1, $a1, $a2
4818-
; LA64-NEXT: amxor_db.w $a3, $a1, $a0
4818+
; LA64-NEXT: amxor.w $a3, $a1, $a0
48194819
; LA64-NEXT: srl.w $a0, $a3, $a2
48204820
; LA64-NEXT: ret
48214821
%1 = atomicrmw xor ptr %a, i8 %b monotonic
@@ -4844,7 +4844,7 @@ define i16 @atomicrmw_xor_i16_monotonic(ptr %a, i16 %b) nounwind {
48444844
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
48454845
; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
48464846
; LA64-NEXT: sll.w $a1, $a1, $a2
4847-
; LA64-NEXT: amxor_db.w $a3, $a1, $a0
4847+
; LA64-NEXT: amxor.w $a3, $a1, $a0
48484848
; LA64-NEXT: srl.w $a0, $a3, $a2
48494849
; LA64-NEXT: ret
48504850
%1 = atomicrmw xor ptr %a, i16 %b monotonic
@@ -4865,7 +4865,7 @@ define i32 @atomicrmw_xor_i32_monotonic(ptr %a, i32 %b) nounwind {
48654865
;
48664866
; LA64-LABEL: atomicrmw_xor_i32_monotonic:
48674867
; LA64: # %bb.0:
4868-
; LA64-NEXT: amxor_db.w $a2, $a1, $a0
4868+
; LA64-NEXT: amxor.w $a2, $a1, $a0
48694869
; LA64-NEXT: move $a0, $a2
48704870
; LA64-NEXT: ret
48714871
%1 = atomicrmw xor ptr %a, i32 %b monotonic
@@ -4885,7 +4885,7 @@ define i64 @atomicrmw_xor_i64_monotonic(ptr %a, i64 %b) nounwind {
48854885
;
48864886
; LA64-LABEL: atomicrmw_xor_i64_monotonic:
48874887
; LA64: # %bb.0:
4888-
; LA64-NEXT: amxor_db.d $a2, $a1, $a0
4888+
; LA64-NEXT: amxor.d $a2, $a1, $a0
48894889
; LA64-NEXT: move $a0, $a2
48904890
; LA64-NEXT: ret
48914891
%1 = atomicrmw xor ptr %a, i64 %b monotonic

0 commit comments

Comments
 (0)