================
@@ -5254,6 +5111,26 @@ def CIR_PrefetchOp : CIR_Op<"prefetch"> {
}];
}
+//===----------------------------------------------------------------------===//
+// ClearCacheOp
+//===----------------------------------------------------------------------===//
+
+def CIR_ClearCacheOp : CIR_Op<"clear_cache", [
+ AllTypesMatch<["begin", "end"]>
+]> {
+ let summary = "clear cache operation";
+ let description = [{
+ CIR representation for `__builtin___clear_cache`.
----------------
andykaylor wrote:
Let's make this more useful. The suggestion below is adapted from the LLVM
Language Reference documentation for the corresponding intrinsic.
```suggestion
The ‘cir.clear_cache’ operation provides a representation for the
`__builtin__clear_cache` builtin and corresponds to the `llvm.clear_cache`
intrinsic in LLVM IR.
This operation ensures visibility of modifications in the specified range to
the execution unit of the processor. On targets with non-unified instruction
and data cache, the implementation flushes the instruction cache.
On platforms with coherent instruction and data caches (e.g., x86), this
intrinsic is a nop. On platforms with non-coherent instruction and data cache
(e.g., ARM, MIPS), the operation will be lowered either to appropriate
instructions or a system call, if cache flushing requires special privileges.
The default behavior is to emit a call to __clear_cache from the runtime
library.
This operation does not empty the instruction pipeline. Modifications of the
current function are outside the scope of the operation.
```
https://github.com/llvm/llvm-project/pull/178260
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits