[llvm] [SandboxIR] Add pointer-diff utility function (PR #110176)

via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 26 15:02:09 PDT 2024


================
@@ -57,6 +61,35 @@ class Utils {
   memoryLocationGetOrNone(const Instruction *I) {
     return llvm::MemoryLocation::getOrNone(cast<llvm::Instruction>(I->Val));
   }
+  /// \Returns true if \p I1 accesses a memory location lower than \p I2.
+  template <typename LoadOrStoreT>
+  static bool atLowerAddress(LoadOrStoreT *I0, LoadOrStoreT *I1,
+                             ScalarEvolution &SE, const DataLayout &DL) {
+    auto Diff = getPointerDiffInBytes(I0, I1, SE, DL);
+    if (!Diff)
+      return false;
+    return *Diff > 0;
+  }
+
+  /// \Returns the number gap between the memory locations accessed by \p I0 and
+  /// \p I1 in bytes.
+  template <typename LoadOrStoreT>
+  static std::optional<int>
+  getPointerDiffInBytes(LoadOrStoreT *I0, LoadOrStoreT *I1, ScalarEvolution &SE,
+                        const DataLayout &DL) {
+    static_assert(std::is_same<LoadOrStoreT, sandboxir::LoadInst>::value ||
----------------
vporpo wrote:

Do we need `sandboxir::` here? We are in `namespace llvm::sandboxir` so it should work without it?

https://github.com/llvm/llvm-project/pull/110176


More information about the llvm-commits mailing list