mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-15 23:57:48 +00:00
Introduce non-const overloads for GlobalAlias::{get,resolve}AliasedGlobal.
llvm-svn: 188725
This commit is contained in:
parent
b4a62fef02
commit
5c5e108012
@ -66,14 +66,20 @@ public:
|
||||
}
|
||||
/// getAliasedGlobal() - Aliasee can be either global or bitcast of
|
||||
/// global. This method retrives the global for both aliasee flavours.
|
||||
const GlobalValue *getAliasedGlobal() const;
|
||||
GlobalValue *getAliasedGlobal();
|
||||
const GlobalValue *getAliasedGlobal() const {
|
||||
return const_cast<GlobalAlias *>(this)->getAliasedGlobal();
|
||||
}
|
||||
|
||||
/// resolveAliasedGlobal() - This method tries to ultimately resolve the alias
|
||||
/// by going through the aliasing chain and trying to find the very last
|
||||
/// global. Returns NULL if a cycle was found. If stopOnWeak is false, then
|
||||
/// the whole chain aliasing chain is traversed, otherwise - only strong
|
||||
/// aliases.
|
||||
const GlobalValue *resolveAliasedGlobal(bool stopOnWeak = true) const;
|
||||
GlobalValue *resolveAliasedGlobal(bool stopOnWeak = true);
|
||||
const GlobalValue *resolveAliasedGlobal(bool stopOnWeak = true) const {
|
||||
return const_cast<GlobalAlias *>(this)->resolveAliasedGlobal(stopOnWeak);
|
||||
}
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static inline bool classof(const Value *V) {
|
||||
|
@ -229,14 +229,14 @@ void GlobalAlias::setAliasee(Constant *Aliasee) {
|
||||
setOperand(0, Aliasee);
|
||||
}
|
||||
|
||||
const GlobalValue *GlobalAlias::getAliasedGlobal() const {
|
||||
const Constant *C = getAliasee();
|
||||
GlobalValue *GlobalAlias::getAliasedGlobal() {
|
||||
Constant *C = getAliasee();
|
||||
if (C == 0) return 0;
|
||||
|
||||
if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
|
||||
if (GlobalValue *GV = dyn_cast<GlobalValue>(C))
|
||||
return GV;
|
||||
|
||||
const ConstantExpr *CE = cast<ConstantExpr>(C);
|
||||
ConstantExpr *CE = cast<ConstantExpr>(C);
|
||||
assert((CE->getOpcode() == Instruction::BitCast ||
|
||||
CE->getOpcode() == Instruction::GetElementPtr) &&
|
||||
"Unsupported aliasee");
|
||||
@ -244,18 +244,18 @@ const GlobalValue *GlobalAlias::getAliasedGlobal() const {
|
||||
return cast<GlobalValue>(CE->getOperand(0));
|
||||
}
|
||||
|
||||
const GlobalValue *GlobalAlias::resolveAliasedGlobal(bool stopOnWeak) const {
|
||||
SmallPtrSet<const GlobalValue*, 3> Visited;
|
||||
GlobalValue *GlobalAlias::resolveAliasedGlobal(bool stopOnWeak) {
|
||||
SmallPtrSet<GlobalValue*, 3> Visited;
|
||||
|
||||
// Check if we need to stop early.
|
||||
if (stopOnWeak && mayBeOverridden())
|
||||
return this;
|
||||
|
||||
const GlobalValue *GV = getAliasedGlobal();
|
||||
GlobalValue *GV = getAliasedGlobal();
|
||||
Visited.insert(GV);
|
||||
|
||||
// Iterate over aliasing chain, stopping on weak alias if necessary.
|
||||
while (const GlobalAlias *GA = dyn_cast<GlobalAlias>(GV)) {
|
||||
while (GlobalAlias *GA = dyn_cast<GlobalAlias>(GV)) {
|
||||
if (stopOnWeak && GA->mayBeOverridden())
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user