mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-13 19:24:21 +00:00
Add helper for ultimate aliasee resoltion
llvm-svn: 48255
This commit is contained in:
parent
7358165c99
commit
da7db7d9a1
@ -78,7 +78,12 @@ public:
|
||||
/// getAliasedGlobal() - Aliasee can be either global or bitcast of
|
||||
/// global. This method retrives the global for both aliasee flavours.
|
||||
const GlobalValue* getAliasedGlobal() const;
|
||||
|
||||
|
||||
/// resolveAliasedGlobal() - This method tries to ultimately resolve alias by
|
||||
/// going through aliasing chain and trying to find the very last
|
||||
/// global. Return NULL is cycle was found.
|
||||
const GlobalValue* resolveAliasedGlobal() const;
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static inline bool classof(const GlobalAlias *) { return true; }
|
||||
static inline bool classof(const Value *V) {
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "llvm/GlobalAlias.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/Support/LeakDetector.h"
|
||||
using namespace llvm;
|
||||
|
||||
@ -230,3 +231,18 @@ const GlobalValue *GlobalAlias::getAliasedGlobal() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const GlobalValue *GlobalAlias::resolveAliasedGlobal() const {
|
||||
SmallPtrSet<const GlobalValue*, 1> Visited;
|
||||
|
||||
const GlobalValue *GV = getAliasedGlobal();
|
||||
Visited.insert(GV);
|
||||
|
||||
while (const GlobalAlias *GA = dyn_cast<GlobalAlias>(GV)) {
|
||||
GV = GA->getAliasedGlobal();
|
||||
|
||||
if (!Visited.insert(GV))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return GV;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user