@@ -8,31 +8,35 @@ define <2 x half> @test_atomicrmw_fadd_v2f16_align4(ptr addrspace(1) %ptr, <2 x
8
8
; NOLSE-NEXT: fcvtl v1.4s, v0.4h
9
9
; NOLSE-NEXT: ldr s0, [x0]
10
10
; NOLSE-NEXT: b .LBB0_2
11
- ; NOLSE-NEXT: .LBB0_1: // %atomicrmw.start
11
+ ; NOLSE-NEXT: .LBB0_1: // %cmpxchg.nostore
12
12
; NOLSE-NEXT: // in Loop: Header=BB0_2 Depth=1
13
- ; NOLSE-NEXT: fmov s0, w10
14
- ; NOLSE-NEXT: cmp w10, w9
15
- ; NOLSE-NEXT: b.eq .LBB0_5
13
+ ; NOLSE-NEXT: mov w9, wzr
14
+ ; NOLSE-NEXT: clrex
15
+ ; NOLSE-NEXT: fmov s0, w8
16
+ ; NOLSE-NEXT: cbnz w9, .LBB0_6
16
17
; NOLSE-NEXT: .LBB0_2: // %atomicrmw.start
17
18
; NOLSE-NEXT: // =>This Loop Header: Depth=1
18
19
; NOLSE-NEXT: // Child Loop BB0_3 Depth 2
19
20
; NOLSE-NEXT: fcvtl v2.4s, v0.4h
20
- ; NOLSE-NEXT: fmov w9 , s0
21
+ ; NOLSE-NEXT: fmov w10 , s0
21
22
; NOLSE-NEXT: fadd v2.4s, v2.4s, v1.4s
22
23
; NOLSE-NEXT: fcvtn v2.4h, v2.4s
23
- ; NOLSE-NEXT: fmov w8 , s2
24
- ; NOLSE-NEXT: .LBB0_3: // %atomicrmw .start
24
+ ; NOLSE-NEXT: fmov w9 , s2
25
+ ; NOLSE-NEXT: .LBB0_3: // %cmpxchg .start
25
26
; NOLSE-NEXT: // Parent Loop BB0_2 Depth=1
26
27
; NOLSE-NEXT: // => This Inner Loop Header: Depth=2
27
- ; NOLSE-NEXT: ldaxr w10 , [x0]
28
- ; NOLSE-NEXT: cmp w10, w9
28
+ ; NOLSE-NEXT: ldaxr w8 , [x0]
29
+ ; NOLSE-NEXT: cmp w8, w10
29
30
; NOLSE-NEXT: b.ne .LBB0_1
30
- ; NOLSE-NEXT: // %bb.4: // %atomicrmw.start
31
+ ; NOLSE-NEXT: // %bb.4: // %cmpxchg.trystore
31
32
; NOLSE-NEXT: // in Loop: Header=BB0_3 Depth=2
32
- ; NOLSE-NEXT: stlxr wzr, w8, [x0]
33
- ; NOLSE-NEXT: cbnz wzr, .LBB0_3
34
- ; NOLSE-NEXT: b .LBB0_1
35
- ; NOLSE-NEXT: .LBB0_5: // %atomicrmw.end
33
+ ; NOLSE-NEXT: stlxr w11, w9, [x0]
34
+ ; NOLSE-NEXT: cbnz w11, .LBB0_3
35
+ ; NOLSE-NEXT: // %bb.5: // in Loop: Header=BB0_2 Depth=1
36
+ ; NOLSE-NEXT: mov w9, #1 // =0x1
37
+ ; NOLSE-NEXT: fmov s0, w8
38
+ ; NOLSE-NEXT: cbz w9, .LBB0_2
39
+ ; NOLSE-NEXT: .LBB0_6: // %atomicrmw.end
36
40
; NOLSE-NEXT: // kill: def $d0 killed $d0 killed $q0
37
41
; NOLSE-NEXT: ret
38
42
;
@@ -64,29 +68,33 @@ define <2 x float> @test_atomicrmw_fadd_v2f32_align8(ptr addrspace(1) %ptr, <2 x
64
68
; NOLSE: // %bb.0:
65
69
; NOLSE-NEXT: ldr d1, [x0]
66
70
; NOLSE-NEXT: b .LBB1_2
67
- ; NOLSE-NEXT: .LBB1_1: // %atomicrmw.start
71
+ ; NOLSE-NEXT: .LBB1_1: // %cmpxchg.nostore
68
72
; NOLSE-NEXT: // in Loop: Header=BB1_2 Depth=1
69
- ; NOLSE-NEXT: fmov d1, x10
70
- ; NOLSE-NEXT: cmp x10, x9
71
- ; NOLSE-NEXT: b.eq .LBB1_5
73
+ ; NOLSE-NEXT: mov w9, wzr
74
+ ; NOLSE-NEXT: clrex
75
+ ; NOLSE-NEXT: fmov d1, x8
76
+ ; NOLSE-NEXT: cbnz w9, .LBB1_6
72
77
; NOLSE-NEXT: .LBB1_2: // %atomicrmw.start
73
78
; NOLSE-NEXT: // =>This Loop Header: Depth=1
74
79
; NOLSE-NEXT: // Child Loop BB1_3 Depth 2
75
80
; NOLSE-NEXT: fadd v2.2s, v1.2s, v0.2s
76
- ; NOLSE-NEXT: fmov x9 , d1
77
- ; NOLSE-NEXT: fmov x8 , d2
78
- ; NOLSE-NEXT: .LBB1_3: // %atomicrmw .start
81
+ ; NOLSE-NEXT: fmov x10 , d1
82
+ ; NOLSE-NEXT: fmov x9 , d2
83
+ ; NOLSE-NEXT: .LBB1_3: // %cmpxchg .start
79
84
; NOLSE-NEXT: // Parent Loop BB1_2 Depth=1
80
85
; NOLSE-NEXT: // => This Inner Loop Header: Depth=2
81
- ; NOLSE-NEXT: ldaxr x10 , [x0]
82
- ; NOLSE-NEXT: cmp x10, x9
86
+ ; NOLSE-NEXT: ldaxr x8 , [x0]
87
+ ; NOLSE-NEXT: cmp x8, x10
83
88
; NOLSE-NEXT: b.ne .LBB1_1
84
- ; NOLSE-NEXT: // %bb.4: // %atomicrmw.start
89
+ ; NOLSE-NEXT: // %bb.4: // %cmpxchg.trystore
85
90
; NOLSE-NEXT: // in Loop: Header=BB1_3 Depth=2
86
- ; NOLSE-NEXT: stlxr wzr, x8, [x0]
87
- ; NOLSE-NEXT: cbnz wzr, .LBB1_3
88
- ; NOLSE-NEXT: b .LBB1_1
89
- ; NOLSE-NEXT: .LBB1_5: // %atomicrmw.end
91
+ ; NOLSE-NEXT: stlxr w11, x9, [x0]
92
+ ; NOLSE-NEXT: cbnz w11, .LBB1_3
93
+ ; NOLSE-NEXT: // %bb.5: // in Loop: Header=BB1_2 Depth=1
94
+ ; NOLSE-NEXT: mov w9, #1 // =0x1
95
+ ; NOLSE-NEXT: fmov d1, x8
96
+ ; NOLSE-NEXT: cbz w9, .LBB1_2
97
+ ; NOLSE-NEXT: .LBB1_6: // %atomicrmw.end
90
98
; NOLSE-NEXT: fmov d0, d1
91
99
; NOLSE-NEXT: ret
92
100
;
0 commit comments