mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
add support for GlobalAlias to ObjectSizeOffsetVisitor
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171303 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -399,6 +399,8 @@ SizeOffsetType ObjectSizeOffsetVisitor::compute(Value *V) {
|
||||
return visitArgument(*A);
|
||||
if (ConstantPointerNull *P = dyn_cast<ConstantPointerNull>(V))
|
||||
return visitConstantPointerNull(*P);
|
||||
if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V))
|
||||
return visitGlobalAlias(*GA);
|
||||
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
|
||||
return visitGlobalVariable(*GV);
|
||||
if (UndefValue *UV = dyn_cast<UndefValue>(V))
|
||||
@ -517,6 +519,12 @@ SizeOffsetType ObjectSizeOffsetVisitor::visitGEPOperator(GEPOperator &GEP) {
|
||||
return std::make_pair(PtrData.first, PtrData.second + Offset);
|
||||
}
|
||||
|
||||
SizeOffsetType ObjectSizeOffsetVisitor::visitGlobalAlias(GlobalAlias &GA) {
|
||||
if (GA.mayBeOverridden())
|
||||
return unknown();
|
||||
return compute(GA.getAliasee());
|
||||
}
|
||||
|
||||
SizeOffsetType ObjectSizeOffsetVisitor::visitGlobalVariable(GlobalVariable &GV){
|
||||
if (!GV.hasDefinitiveInitializer())
|
||||
return unknown();
|
||||
@ -629,6 +637,7 @@ SizeOffsetEvalType ObjectSizeOffsetEvaluator::compute_(Value *V) {
|
||||
} else if (isa<Argument>(V) ||
|
||||
(isa<ConstantExpr>(V) &&
|
||||
cast<ConstantExpr>(V)->getOpcode() == Instruction::IntToPtr) ||
|
||||
isa<GlobalAlias>(V) ||
|
||||
isa<GlobalVariable>(V)) {
|
||||
// ignore values where we cannot do more than what ObjectSizeVisitor can
|
||||
Result = unknown();
|
||||
|
Reference in New Issue
Block a user