Skip to content

Conversation

@kparzysz
Copy link
Contributor

Also add some clarifying comments.

@llvmbot
Copy link
Member

llvmbot commented Feb 18, 2025

@llvm/pr-subscribers-offload

Author: Krzysztof Parzyszek (kparzysz)

Changes

Also add some clarifying comments.


Full diff: https://github.com/llvm/llvm-project/pull/127638.diff

1 Files Affected:

  • (modified) offload/libomptarget/OpenMP/Mapping.cpp (+14-17)
diff --git a/offload/libomptarget/OpenMP/Mapping.cpp b/offload/libomptarget/OpenMP/Mapping.cpp
index 4b78ed3360a26..4c21b7184a5c4 100644
--- a/offload/libomptarget/OpenMP/Mapping.cpp
+++ b/offload/libomptarget/OpenMP/Mapping.cpp
@@ -141,47 +141,44 @@ LookupResult MappingInfoTy::lookupMapping(HDTTMapAccessorTy &HDTTMap,
   if (HDTTMap->empty())
     return LR;
 
+  // HDTTMap is std::set, ordered by HstPtrBegin.
+  // Upper is the first element whose HstPtrBegin > HP.
   auto Upper = HDTTMap->upper_bound(HP);
 
   if (Size == 0) {
-    // specification v5.1 Pointer Initialization for Device Data Environments
-    // upper_bound satisfies
-    //   std::prev(upper)->HDTT.HstPtrBegin <= hp < upper->HDTT.HstPtrBegin
+    // HP satisfies
+    //   std::prev(Upper)->HDTT.HstPtrBegin <= HP < Upper->HDTT.HstPtrBegin
     if (Upper != HDTTMap->begin()) {
       LR.TPR.setEntry(std::prev(Upper)->HDTT, OwnedTPR);
-      // the left side of extended address range is satisfied.
-      // hp >= LR.TPR.getEntry()->HstPtrBegin || hp >=
-      // LR.TPR.getEntry()->HstPtrBase
-      LR.Flags.IsContained = HP < LR.TPR.getEntry()->HstPtrEnd ||
-                             HP < LR.TPR.getEntry()->HstPtrBase;
+      // We know that HP >= LR.TPR.getEntry()->HstPtrBegin
+      LR.Flags.IsContained = HP < LR.TPR.getEntry()->HstPtrEnd;
     }
 
     if (!LR.Flags.IsContained && Upper != HDTTMap->end()) {
       LR.TPR.setEntry(Upper->HDTT, OwnedTPR);
-      // the right side of extended address range is satisfied.
-      // hp < LR.TPR.getEntry()->HstPtrEnd || hp < LR.TPR.getEntry()->HstPtrBase
+      // This is a special case: HP is not really contained in a mapped
+      // region, but it's contained in the extended mapped region, which
+      // suffices to get the mapping of the base pointer.
+      // We know that HP < LR.TPR.getEntry()->HstPtrBegin
       LR.Flags.IsContained = HP >= LR.TPR.getEntry()->HstPtrBase;
     }
   } else {
-    // check the left bin
     if (Upper != HDTTMap->begin()) {
       LR.TPR.setEntry(std::prev(Upper)->HDTT, OwnedTPR);
-      // Is it contained?
-      LR.Flags.IsContained = HP >= LR.TPR.getEntry()->HstPtrBegin &&
-                             HP < LR.TPR.getEntry()->HstPtrEnd &&
+      // We know that HP >= LR.TPR.getEntry()->HstPtrBegin
+      LR.Flags.IsContained = HP < LR.TPR.getEntry()->HstPtrEnd &&
                              (HP + Size) <= LR.TPR.getEntry()->HstPtrEnd;
       // Does it extend beyond the mapped region?
       LR.Flags.ExtendsAfter = HP < LR.TPR.getEntry()->HstPtrEnd &&
                               (HP + Size) > LR.TPR.getEntry()->HstPtrEnd;
     }
 
-    // check the right bin
     if (!(LR.Flags.IsContained || LR.Flags.ExtendsAfter) &&
         Upper != HDTTMap->end()) {
       LR.TPR.setEntry(Upper->HDTT, OwnedTPR);
       // Does it extend into an already mapped region?
-      LR.Flags.ExtendsBefore = HP < LR.TPR.getEntry()->HstPtrBegin &&
-                               (HP + Size) > LR.TPR.getEntry()->HstPtrBegin;
+      // We know that HP < LR.TPR.getEntry()->HstPtrBegin
+      LR.Flags.ExtendsBefore = (HP + Size) > LR.TPR.getEntry()->HstPtrBegin;
       // Does it extend beyond the mapped region?
       LR.Flags.ExtendsAfter = HP < LR.TPR.getEntry()->HstPtrEnd &&
                               (HP + Size) > LR.TPR.getEntry()->HstPtrEnd;

Copy link
Contributor

@jhuber6 jhuber6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, just eliminating some checks if we already know the lower / upper bound. Should be good so long as it passes the tests.

@kparzysz kparzysz merged commit 7b89c41 into llvm:main Feb 18, 2025
6 checks passed
@kparzysz kparzysz deleted the users/kparzysz/remove-redundant-checks branch February 18, 2025 17:01
wldfngrs pushed a commit to wldfngrs/llvm-project that referenced this pull request Feb 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants