================
@@ -240,6 +240,26 @@ template <typename LocationEnum> class MemoryEffectsBase {
return getWithoutLoc(Location::InaccessibleMem).doesNotAccessMemory();
}
+ bool isTargetMemLoc(IRMemLocation Loc) const {
+ return static_cast<unsigned>(Loc) >=
+ static_cast<unsigned>(Location::FirstTarget);
+ }
+
+ // Whether the target memory locations are all the same.
+ // So it behaves as the default read/write, but for Target
+ // locations only
+ bool isTargetMemLocSameForAll() const {
+ ModRefInfo First = getModRef(IRMemLocation::FirstTarget);
+ for (unsigned ILoc = static_cast<unsigned>(IRMemLocation::FirstTarget) + 1;
+ ILoc <= static_cast<unsigned>(IRMemLocation::Last); ++ILoc) {
+ const auto Loc = static_cast<IRMemLocation>(ILoc);
+ ModRefInfo MR = getModRef(Loc);
+ if (First != MR)
+ return false;
+ }
+ return true;
+ }
----------------
antoniofrighetto wrote:
```suggestion
bool isTargetMemLocSameForAll() const {
auto First = static_cast<unsigned>(IRMemLocation::FirstTarget);
auto Last = static_cast<unsigned>(IRMemLocation::Last);
ModRefInfo Expected = getModRef(IRMemLocation::FirstTarget);
for (unsigned ILoc = First + 1; ILoc <= Last; ++ILoc)
if (getModRef(static_cast<IRMemLocation>(ILoc)) != Expected)
return false;
return true;
}
```
https://github.com/llvm/llvm-project/pull/176968
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits