Commit d6f9278
authored
[X86] Use plain load/store instead of cmpxchg16b for atomics with AVX (#74275)
In late 2021, both Intel and AMD finally documented that every
AVX-capable CPU has always been guaranteed to execute aligned 16-byte
loads/stores atomically, and further, guaranteed that all future CPUs
with AVX will do so as well.
Therefore, we may use normal SSE 128-bit load/store instructions to
implement atomics, if AVX is enabled.
Per AMD64 Architecture Programmer's manual, 7.3.2 Access Atomicity:
> Processors that report [AVX] extend the atomicity for cacheable,
> naturally-aligned single loads or stores from a quadword to a double
> quadword.
Per Intel's SDM:
> Processors that enumerate support for Intel(R) AVX guarantee that the
> 16-byte memory operations performed by the following instructions will
> always be carried out atomically:
> - MOVAPD, MOVAPS, and MOVDQA.
> - VMOVAPD, VMOVAPS, and VMOVDQA when encoded with VEX.128.
> - VMOVAPD, VMOVAPS, VMOVDQA32, and VMOVDQA64 when encoded with
> EVEX.128 and k0 (masking disabled).
This was also confirmed to be true for Zhaoxin CPUs with AVX, in
https://gcc.gnu.org/PR1046881 parent 84abe0a commit d6f9278
File tree
7 files changed
+259
-221
lines changed- llvm
- lib/Target/X86
- test/CodeGen/X86
7 files changed
+259
-221
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
544 | 544 | | |
545 | 545 | | |
546 | 546 | | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
547 | 554 | | |
548 | 555 | | |
549 | 556 | | |
| |||
30415 | 30422 | | |
30416 | 30423 | | |
30417 | 30424 | | |
30418 | | - | |
30419 | | - | |
30420 | | - | |
30421 | | - | |
30422 | | - | |
30423 | | - | |
| 30425 | + | |
| 30426 | + | |
| 30427 | + | |
| 30428 | + | |
| 30429 | + | |
| 30430 | + | |
| 30431 | + | |
| 30432 | + | |
| 30433 | + | |
| 30434 | + | |
30424 | 30435 | | |
30425 | 30436 | | |
30426 | 30437 | | |
30427 | 30438 | | |
30428 | 30439 | | |
30429 | 30440 | | |
30430 | | - | |
30431 | 30441 | | |
30432 | 30442 | | |
30433 | 30443 | | |
30434 | 30444 | | |
30435 | | - | |
30436 | | - | |
30437 | | - | |
30438 | | - | |
30439 | | - | |
30440 | | - | |
30441 | | - | |
30442 | | - | |
30443 | | - | |
| 30445 | + | |
| 30446 | + | |
| 30447 | + | |
| 30448 | + | |
| 30449 | + | |
| 30450 | + | |
| 30451 | + | |
| 30452 | + | |
| 30453 | + | |
| 30454 | + | |
| 30455 | + | |
| 30456 | + | |
| 30457 | + | |
| 30458 | + | |
30444 | 30459 | | |
30445 | 30460 | | |
30446 | 30461 | | |
| |||
31683 | 31698 | | |
31684 | 31699 | | |
31685 | 31700 | | |
31686 | | - | |
| 31701 | + | |
| 31702 | + | |
| 31703 | + | |
| 31704 | + | |
| 31705 | + | |
| 31706 | + | |
| 31707 | + | |
| 31708 | + | |
| 31709 | + | |
| 31710 | + | |
| 31711 | + | |
| 31712 | + | |
31687 | 31713 | | |
31688 | 31714 | | |
31689 | | - | |
31690 | | - | |
31691 | | - | |
31692 | | - | |
31693 | | - | |
| 31715 | + | |
31694 | 31716 | | |
31695 | 31717 | | |
31696 | 31718 | | |
| |||
31722 | 31744 | | |
31723 | 31745 | | |
31724 | 31746 | | |
| 31747 | + | |
31725 | 31748 | | |
31726 | | - | |
31727 | | - | |
31728 | | - | |
31729 | | - | |
31730 | | - | |
| 31749 | + | |
| 31750 | + | |
| 31751 | + | |
| 31752 | + | |
| 31753 | + | |
31731 | 31754 | | |
31732 | | - | |
31733 | | - | |
| 31755 | + | |
31734 | 31756 | | |
31735 | 31757 | | |
31736 | 31758 | | |
| |||
33303 | 33325 | | |
33304 | 33326 | | |
33305 | 33327 | | |
33306 | | - | |
| 33328 | + | |
| 33329 | + | |
| 33330 | + | |
33307 | 33331 | | |
33308 | 33332 | | |
33309 | 33333 | | |
33310 | 33334 | | |
33311 | 33335 | | |
| 33336 | + | |
| 33337 | + | |
| 33338 | + | |
| 33339 | + | |
| 33340 | + | |
| 33341 | + | |
| 33342 | + | |
| 33343 | + | |
| 33344 | + | |
| 33345 | + | |
| 33346 | + | |
| 33347 | + | |
| 33348 | + | |
| 33349 | + | |
| 33350 | + | |
| 33351 | + | |
33312 | 33352 | | |
33313 | 33353 | | |
33314 | 33354 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
| 31 | + | |
47 | 32 | | |
48 | 33 | | |
49 | 34 | | |
| |||
69 | 54 | | |
70 | 55 | | |
71 | 56 | | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
| 57 | + | |
| 58 | + | |
82 | 59 | | |
83 | | - | |
84 | | - | |
85 | 60 | | |
86 | 61 | | |
87 | 62 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
131 | 131 | | |
132 | 132 | | |
133 | 133 | | |
134 | | - | |
135 | 134 | | |
136 | 135 | | |
137 | 136 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
228 | 228 | | |
229 | 229 | | |
230 | 230 | | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | | - | |
243 | | - | |
244 | | - | |
245 | | - | |
246 | | - | |
247 | | - | |
248 | | - | |
249 | | - | |
250 | | - | |
251 | | - | |
252 | | - | |
253 | | - | |
254 | | - | |
255 | | - | |
256 | | - | |
257 | | - | |
258 | | - | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
259 | 237 | | |
260 | 238 | | |
261 | 239 | | |
262 | 240 | | |
263 | 241 | | |
264 | 242 | | |
265 | 243 | | |
266 | | - | |
267 | | - | |
268 | | - | |
269 | | - | |
270 | | - | |
271 | | - | |
272 | | - | |
273 | | - | |
274 | | - | |
275 | | - | |
276 | | - | |
277 | | - | |
278 | | - | |
279 | | - | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
292 | 248 | | |
293 | 249 | | |
294 | 250 | | |
295 | 251 | | |
296 | | - | |
297 | | - | |
298 | | - | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
311 | 256 | | |
312 | 257 | | |
313 | 258 | | |
| |||
0 commit comments