[PATCH] D68502: [PATCH 19/38] [noalias] D9398: llvm.noalias - GetUnderlyingObjects to optionally collect noalias calls
Jeroen Dobbelaere via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 4 14:48:20 PDT 2019
jeroen.dobbelaere created this revision.
jeroen.dobbelaere added reviewers: hfinkel, jdoerfert.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
This is part of the series started by D68484 <https://reviews.llvm.org/D68484>.
Rebase of D9398 <https://reviews.llvm.org/D9398>
https://reviews.llvm.org/D68502
Files:
llvm/include/llvm/Analysis/ValueTracking.h
llvm/lib/Analysis/ValueTracking.cpp
Index: llvm/lib/Analysis/ValueTracking.cpp
===================================================================
--- llvm/lib/Analysis/ValueTracking.cpp
+++ llvm/lib/Analysis/ValueTracking.cpp
@@ -3713,7 +3713,8 @@
}
Value *llvm::GetUnderlyingObject(Value *V, const DataLayout &DL,
- unsigned MaxLookup) {
+ unsigned MaxLookup,
+ SmallVectorImpl<Instruction *> *NoAlias) {
if (!V->getType()->isPointerTy())
return V;
for (unsigned Count = 0; MaxLookup == 0 || Count < MaxLookup; ++Count) {
@@ -3731,6 +3732,9 @@
return V;
} else {
if (auto *Call = dyn_cast<CallBase>(V)) {
+ if (NoAlias && Call->getIntrinsicID() == Intrinsic::noalias)
+ NoAlias->push_back(Call);
+
// CaptureTracking can know about special capturing properties of some
// intrinsics like launder.invariant.group, that can't be expressed with
// the attributes, but have properties like returning aliasing pointer.
@@ -3764,13 +3768,14 @@
void llvm::GetUnderlyingObjects(const Value *V,
SmallVectorImpl<const Value *> &Objects,
const DataLayout &DL, LoopInfo *LI,
- unsigned MaxLookup) {
+ unsigned MaxLookup,
+ SmallVectorImpl<Instruction *> *NoAlias) {
SmallPtrSet<const Value *, 4> Visited;
SmallVector<const Value *, 4> Worklist;
Worklist.push_back(V);
do {
const Value *P = Worklist.pop_back_val();
- P = GetUnderlyingObject(P, DL, MaxLookup);
+ P = GetUnderlyingObject(P, DL, MaxLookup, NoAlias);
if (!Visited.insert(P).second)
continue;
Index: llvm/include/llvm/Analysis/ValueTracking.h
===================================================================
--- llvm/include/llvm/Analysis/ValueTracking.h
+++ llvm/include/llvm/Analysis/ValueTracking.h
@@ -334,12 +334,15 @@
/// the specified value, returning the original object being addressed. Note
/// that the returned value has pointer type if the specified value does. If
/// the MaxLookup value is non-zero, it limits the number of instructions to
- /// be stripped off.
+ /// be stripped off. If a NoAlias vector is provided, it is filled with any
+ /// llvm.noalias intrinsics looked through to find the underlying object.
Value *GetUnderlyingObject(Value *V, const DataLayout &DL,
- unsigned MaxLookup = 6);
- inline const Value *GetUnderlyingObject(const Value *V, const DataLayout &DL,
- unsigned MaxLookup = 6) {
- return GetUnderlyingObject(const_cast<Value *>(V), DL, MaxLookup);
+ unsigned MaxLookup = 6,
+ SmallVectorImpl<Instruction *> *NoAlias = nullptr);
+ inline const Value *GetUnderlyingObject(const Value *V,
+ const DataLayout &DL, unsigned MaxLookup = 6,
+ SmallVectorImpl<Instruction *> *NoAlias = nullptr) {
+ return GetUnderlyingObject(const_cast<Value *>(V), DL, MaxLookup, NoAlias);
}
/// This method is similar to GetUnderlyingObject except that it can
@@ -369,11 +372,14 @@
///
/// Since A[i] and A[i-1] are independent pointers, getUnderlyingObjects
/// should not assume that Curr and Prev share the same underlying object thus
- /// it shouldn't look through the phi above.
+ /// it shouldn't look through the phi above. If a NoAlias vector is provided,
+ /// it is filled with any llvm.noalias intrinsics looked through to find the
+ /// underlying objects.
void GetUnderlyingObjects(const Value *V,
SmallVectorImpl<const Value *> &Objects,
const DataLayout &DL, LoopInfo *LI = nullptr,
- unsigned MaxLookup = 6);
+ unsigned MaxLookup = 6,
+ SmallVectorImpl<Instruction *> *NoAlias = nullptr);
/// This is a wrapper around GetUnderlyingObjects and adds support for basic
/// ptrtoint+arithmetic+inttoptr sequences.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68502.223305.patch
Type: text/x-patch
Size: 4192 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191004/49805b72/attachment.bin>
More information about the llvm-commits
mailing list