================
@@ -4002,6 +4002,54 @@ or ``syncscope("<target-scope>")`` *synchronizes with* 
and participates in the
 seq\_cst total orderings of other operations that are not marked
 ``syncscope("singlethread")`` or ``syncscope("<target-scope>")``.
 
+.. _nontemporal:
+
+Non-temporal memory access
+--------------------------
+
+Certain memory access operations are marked as "non-temporal". The :ref:`load
+<i_load>` and :ref:`store <i_store>` instructions can be made non-temporal by
+attaching the ``!nontemporal`` metadata. Some target-specific intrinsics may
+also be specified as doing a non-temporal memory access.
+
+Hardware provides these special non-temporal access instructions (such as the
+``MOVNT`` instructions on x86), in order to permit specialized code to reduce
+cache utilization and bandwidth, when the program knows that the memory is
+unlikely to be reused in cache in the near future. However, because they avoid
+caches, these operations can also easily *reduce* your program's performance
+when used inappropriately.
+
+Non-temporal memory operations may also have relaxed memory ordering guarantees
+which do not conform with LLVM's Memory Model for Concurrent Operations. In
+particular, non-temporal memory accesses *might not* be ordered by a
+cross-thread "synchronizes-with" edge, unless additional fences are
----------------
gonzalobg wrote:

```suggestion
cross-thread "synchronizes-with" edge, unless additional (potentially 
target-specific) fences are
```

https://github.com/llvm/llvm-project/pull/178264
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to