/// Is this a write memory access?
bool isWrite() const { return isMustWrite() || isMayWrite(); }
+ /// Is this a memory intrinsic access (memcpy, memset, memmove)?
+ bool isMemoryIntrinsic() const {
+ return isa<MemIntrinsic>(getAccessInstruction());
+ }
+
/// Check if a new access relation was imported or set by a pass.
bool hasNewAccessRelation() const { return NewAccessRelation; }
}
void MemoryAccess::buildMemIntrinsicAccessRelation() {
- assert(isa<MemIntrinsic>(getAccessInstruction()));
+ assert(isMemoryIntrinsic());
assert(Subscripts.size() == 2 && Sizes.size() == 1);
auto *SubscriptPWA = getPwAff(Subscripts[0]);
auto &Stmt = *Access->getStatement();
BasicBlock *BB = Stmt.getEntryBlock();
- if (Access->isScalarKind() || Access->isWrite() || !Access->isAffine())
+ if (Access->isScalarKind() || Access->isWrite() || !Access->isAffine() ||
+ Access->isMemoryIntrinsic())
return nullptr;
// Skip accesses that have an invariant base pointer which is defined but