mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 05:29:24 +00:00
Add a bunch of new functionality, primarily to do with removing aliasing
pointers from an AST. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15065 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
12c1155403
commit
877ad7d80b
@ -129,7 +129,6 @@ public:
|
||||
// stores.
|
||||
bool isVolatile() const { return Volatile; }
|
||||
|
||||
|
||||
/// isForwardingAliasSet - Return true if this alias set should be ignored as
|
||||
/// part of the AliasSetTracker object.
|
||||
bool isForwardingAliasSet() const { return Forward; }
|
||||
@ -143,6 +142,7 @@ public:
|
||||
class iterator;
|
||||
iterator begin() const { return iterator(PtrList); }
|
||||
iterator end() const { return iterator(); }
|
||||
bool empty() const { return PtrList == 0; }
|
||||
|
||||
void print(std::ostream &OS) const;
|
||||
void dump() const;
|
||||
@ -169,6 +169,9 @@ public:
|
||||
}
|
||||
value_type *operator->() const { return &operator*(); }
|
||||
|
||||
Value *getPointer() const { return CurNode->first; }
|
||||
unsigned getSize() const { return CurNode->second.getSize(); }
|
||||
|
||||
iterator& operator++() { // Preincrement
|
||||
assert(CurNode && "Advancing past AliasSet.end()!");
|
||||
CurNode = CurNode->second.getNext();
|
||||
@ -267,6 +270,18 @@ public:
|
||||
void add(BasicBlock &BB); // Add all instructions in basic block
|
||||
void add(const AliasSetTracker &AST); // Add alias relations from another AST
|
||||
|
||||
/// remove methods - These methods are used to remove all entries that might
|
||||
/// be aliased by the specified instruction. These methods return true if any
|
||||
/// alias sets were eliminated.
|
||||
bool remove(LoadInst *LI);
|
||||
bool remove(StoreInst *SI);
|
||||
bool remove(CallSite CS);
|
||||
bool remove(CallInst *CI) { return remove(CallSite(CI)); }
|
||||
bool remove(InvokeInst *II) { return remove(CallSite(II)); }
|
||||
bool remove(Instruction *I);
|
||||
void remove(AliasSet &AS);
|
||||
|
||||
|
||||
/// deleteValue method - This method is used to remove a pointer value from
|
||||
/// the AliasSetTracker entirely. It should be used when an instruction is
|
||||
/// deleted from the program to update the AST. If you don't use this, you
|
||||
@ -283,6 +298,12 @@ public:
|
||||
/// pointer didn't alias anything).
|
||||
AliasSet &getAliasSetForPointer(Value *P, unsigned Size, bool *New = 0);
|
||||
|
||||
/// getAliasSetForPointerIfExists - Return the alias set containing the
|
||||
/// location specified if one exists, otherwise return null.
|
||||
AliasSet *getAliasSetForPointerIfExists(Value *P, unsigned Size) {
|
||||
return findAliasSetForPointer(P, Size);
|
||||
}
|
||||
|
||||
/// getAliasAnalysis - Return the underlying alias analysis object used by
|
||||
/// this tracker.
|
||||
AliasAnalysis &getAliasAnalysis() const { return AA; }
|
||||
|
Loading…
Reference in New Issue
Block a user