Skip to content

Commit 8af78ed

Browse files
committed
[Xtensa] Fix atomic store operands order
It was changed in LLVM 18
1 parent 8e1d87c commit 8af78ed

File tree

2 files changed

+110
-3
lines changed

2 files changed

+110
-3
lines changed

llvm/lib/Target/Xtensa/XtensaInstrInfo.td

+3-3
Original file line numberDiff line numberDiff line change
@@ -1845,9 +1845,9 @@ def : Pat<(i32 (atomic_load_8 addr_ish1:$addr)), (L8UI addr_ish1:$addr)>;
18451845
def : Pat<(i32 (atomic_load_16 addr_ish2:$addr)), (L16UI addr_ish2:$addr)>;
18461846
def : Pat<(i32 (atomic_load_32 addr_ish4:$addr)), (L32I addr_ish4:$addr)>;
18471847

1848-
def : Pat<(atomic_store_8 addr_ish1:$addr, AR:$t), (S8I AR:$t, addr_ish1:$addr)>;
1849-
def : Pat<(atomic_store_16 addr_ish2:$addr, AR:$t), (S16I AR:$t, addr_ish2:$addr)>;
1850-
def : Pat<(atomic_store_32 addr_ish4:$addr, AR:$t), (S32I AR:$t, addr_ish4:$addr)>;
1848+
def : Pat<(atomic_store_8 AR:$t, addr_ish1:$addr), (S8I AR:$t, addr_ish1:$addr)>;
1849+
def : Pat<(atomic_store_16 AR:$t, addr_ish2:$addr), (S16I AR:$t, addr_ish2:$addr)>;
1850+
def : Pat<(atomic_store_32 AR:$t, addr_ish4:$addr), (S32I AR:$t, addr_ish4:$addr)>;
18511851

18521852
let usesCustomInserter = 1, Predicates = [HasS32C1I] in {
18531853
def ATOMIC_CMP_SWAP_8_P : Pseudo<(outs AR:$dst), (ins AR:$ptr, AR:$cmp, AR:$swap),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=xtensa -verify-machineinstrs < %s | FileCheck %s --check-prefixes=XTENSA,XTENSA_OPT
3+
; RUN: llc -mtriple=xtensa -O0 < %s | FileCheck %s --check-prefixes=XTENSA,XTENSA_OPT_NONE
4+
5+
define void @store32(ptr %ptr, i32 %val1) {
6+
; XTENSA-LABEL: store32:
7+
; XTENSA: entry a1, 32
8+
; XTENSA-NEXT: memw
9+
; XTENSA-NEXT: s32i.n a3, a2, 0
10+
; XTENSA-NEXT: memw
11+
; XTENSA-NEXT: retw.n
12+
store atomic i32 %val1, ptr %ptr seq_cst, align 4
13+
ret void
14+
}
15+
16+
define i32 @load32(ptr %ptr) {
17+
; XTENSA-LABEL: load32:
18+
; XTENSA: entry a1, 32
19+
; XTENSA-NEXT: l32i.n a2, a2, 0
20+
; XTENSA-NEXT: memw
21+
; XTENSA-NEXT: retw.n
22+
%val = load atomic i32, ptr %ptr seq_cst, align 4
23+
ret i32 %val
24+
}
25+
26+
define i8 @load8(ptr %p) {
27+
; XTENSA-LABEL: load8:
28+
; XTENSA: entry a1, 32
29+
; XTENSA-NEXT: l8ui a2, a2, 0
30+
; XTENSA-NEXT: memw
31+
; XTENSA-NEXT: retw.n
32+
%v = load atomic i8, ptr %p seq_cst, align 1
33+
ret i8 %v
34+
}
35+
36+
define void @store8(ptr %p, i8 %val1) {
37+
; XTENSA_OPT-LABEL: store8:
38+
; XTENSA_OPT: entry a1, 32
39+
; XTENSA_OPT-NEXT: memw
40+
; XTENSA_OPT-NEXT: s8i a3, a2, 0
41+
; XTENSA_OPT-NEXT: memw
42+
; XTENSA_OPT-NEXT: retw.n
43+
;
44+
; XTENSA_OPT_NONE-LABEL: store8:
45+
; XTENSA_OPT_NONE: entry a1, 32
46+
; XTENSA_OPT_NONE-NEXT: # kill: def $a8 killed $a3
47+
; XTENSA_OPT_NONE-NEXT: memw
48+
; XTENSA_OPT_NONE-NEXT: s8i a3, a2, 0
49+
; XTENSA_OPT_NONE-NEXT: memw
50+
; XTENSA_OPT_NONE-NEXT: retw.n
51+
store atomic i8 %val1, ptr %p seq_cst, align 1
52+
ret void
53+
}
54+
55+
define i16 @load16(ptr %p) {
56+
; XTENSA-LABEL: load16:
57+
; XTENSA: entry a1, 32
58+
; XTENSA-NEXT: l16ui a2, a2, 0
59+
; XTENSA-NEXT: memw
60+
; XTENSA-NEXT: retw.n
61+
%v = load atomic i16, ptr %p seq_cst, align 2
62+
ret i16 %v
63+
}
64+
65+
define void @store16(ptr %p, i16 %val1) {
66+
; XTENSA_OPT-LABEL: store16:
67+
; XTENSA_OPT: entry a1, 32
68+
; XTENSA_OPT-NEXT: memw
69+
; XTENSA_OPT-NEXT: s16i a3, a2, 0
70+
; XTENSA_OPT-NEXT: memw
71+
; XTENSA_OPT-NEXT: retw.n
72+
;
73+
; XTENSA_OPT_NONE-LABEL: store16:
74+
; XTENSA_OPT_NONE: entry a1, 32
75+
; XTENSA_OPT_NONE-NEXT: # kill: def $a8 killed $a3
76+
; XTENSA_OPT_NONE-NEXT: memw
77+
; XTENSA_OPT_NONE-NEXT: s16i a3, a2, 0
78+
; XTENSA_OPT_NONE-NEXT: memw
79+
; XTENSA_OPT_NONE-NEXT: retw.n
80+
store atomic i16 %val1, ptr %p seq_cst, align 2
81+
ret void
82+
}
83+
84+
define void @test1(ptr %ptr1, ptr %ptr2) {
85+
; XTENSA-LABEL: test1:
86+
; XTENSA: entry a1, 32
87+
; XTENSA-NEXT: l8ui a8, a2, 0
88+
; XTENSA-NEXT: s8i a8, a3, 0
89+
; XTENSA-NEXT: retw.n
90+
%val = load atomic i8, ptr %ptr1 unordered, align 1
91+
store atomic i8 %val, ptr %ptr2 unordered, align 1
92+
ret void
93+
}
94+
95+
define void @test2(ptr %ptr1, ptr %ptr2) {
96+
; XTENSA-LABEL: test2:
97+
; XTENSA: entry a1, 32
98+
; XTENSA-NEXT: l8ui a8, a2, 0
99+
; XTENSA-NEXT: memw
100+
; XTENSA-NEXT: memw
101+
; XTENSA-NEXT: s8i a8, a3, 0
102+
; XTENSA-NEXT: memw
103+
; XTENSA-NEXT: retw.n
104+
%val = load atomic i8, ptr %ptr1 seq_cst, align 1
105+
store atomic i8 %val, ptr %ptr2 seq_cst, align 1
106+
ret void
107+
}

0 commit comments

Comments
 (0)