mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 00:16:30 +00:00
[offload] Remove redundant checks in MappingInfoTy::lookupMapping (#127638)
Also add some clarifying comments.
This commit is contained in:
parent
1fd06001a9
commit
7b89c41e41
@ -141,48 +141,45 @@ 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 the mapped
|
||||
// address range, but it's contained in the extended address range,
|
||||
// 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?
|
||||
// Does it extend beyond the mapped address range?
|
||||
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;
|
||||
// Does it extend beyond the mapped region?
|
||||
// Does it extend into an already mapped address range?
|
||||
// We know that HP < LR.TPR.getEntry()->HstPtrBegin
|
||||
LR.Flags.ExtendsBefore = (HP + Size) > LR.TPR.getEntry()->HstPtrBegin;
|
||||
// Does it extend beyond the mapped address range?
|
||||
LR.Flags.ExtendsAfter = HP < LR.TPR.getEntry()->HstPtrEnd &&
|
||||
(HP + Size) > LR.TPR.getEntry()->HstPtrEnd;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user