[llvm] [SandboxIR][Doc] Add a Doc file for Sandbox IR (PR #98691)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 15 12:04:52 PDT 2024
================
@@ -0,0 +1,53 @@
+# Sandbox IR: A transactional layer over LLVM IR
+
+Sandbox IR is an IR layer on top of LLVM IR that allows you to save/restore its state.
+
+# API
+The Sandbox IR API is designed to feel like LLVM, replicating many common API classes and functions to mirror the LLVM API.
+The class hierarchy is similar (but in the `llvm::sandboxir` namespace), for example here is a small part of it:
+```
+namespace sandboxir {
+ Value
+ / \
+ User BasicBlock ...
+ / \
+ Instruction Constant
+ /
+ ...
+}
+```
+
+# Design
+
+## Sandbox IR Value <-> LLVM IR Value Mapping
+Each LLVM IR Value maps to a single Sandbox IR Value.
+The reverse is also true in most cases, except for Sandbox IR Instructions that map to more than one LLVM IR Instruction.
+Such instructions can be defined in extensions of the base Sandbox IR.
+
+
+- Forward mapping: Sandbox IR Value -> LLVM IR Value
+Each Sandbox IR Value contains an `llvm::Value *Val` member variable that points to the corresponding LLVM IR Value.
+
+- Reverse mapping: LLVM IR Value -> Sandbox IR Value
+This mapping is stored in `sandboxir::Context::LLVMValueToValue`.
+
+For example `sandboxir::User::getOperand(OpIdx)` for a `sandboxir::User *U` works as follows:
+- First we find the LLVM User: `llvm::User * LLVMU = U->Val`.
----------------
vporpo wrote:
Done
https://github.com/llvm/llvm-project/pull/98691
More information about the llvm-commits
mailing list