mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-08 11:37:03 +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:
parent
148ee4f224
commit
41be2fb1f9
@ -191,6 +191,7 @@ public:
|
|||||||
SizeOffsetType visitExtractElementInst(ExtractElementInst &I);
|
SizeOffsetType visitExtractElementInst(ExtractElementInst &I);
|
||||||
SizeOffsetType visitExtractValueInst(ExtractValueInst &I);
|
SizeOffsetType visitExtractValueInst(ExtractValueInst &I);
|
||||||
SizeOffsetType visitGEPOperator(GEPOperator &GEP);
|
SizeOffsetType visitGEPOperator(GEPOperator &GEP);
|
||||||
|
SizeOffsetType visitGlobalAlias(GlobalAlias &GA);
|
||||||
SizeOffsetType visitGlobalVariable(GlobalVariable &GV);
|
SizeOffsetType visitGlobalVariable(GlobalVariable &GV);
|
||||||
SizeOffsetType visitIntToPtrInst(IntToPtrInst&);
|
SizeOffsetType visitIntToPtrInst(IntToPtrInst&);
|
||||||
SizeOffsetType visitLoadInst(LoadInst &I);
|
SizeOffsetType visitLoadInst(LoadInst &I);
|
||||||
|
@ -399,6 +399,8 @@ SizeOffsetType ObjectSizeOffsetVisitor::compute(Value *V) {
|
|||||||
return visitArgument(*A);
|
return visitArgument(*A);
|
||||||
if (ConstantPointerNull *P = dyn_cast<ConstantPointerNull>(V))
|
if (ConstantPointerNull *P = dyn_cast<ConstantPointerNull>(V))
|
||||||
return visitConstantPointerNull(*P);
|
return visitConstantPointerNull(*P);
|
||||||
|
if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V))
|
||||||
|
return visitGlobalAlias(*GA);
|
||||||
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
|
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
|
||||||
return visitGlobalVariable(*GV);
|
return visitGlobalVariable(*GV);
|
||||||
if (UndefValue *UV = dyn_cast<UndefValue>(V))
|
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);
|
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){
|
SizeOffsetType ObjectSizeOffsetVisitor::visitGlobalVariable(GlobalVariable &GV){
|
||||||
if (!GV.hasDefinitiveInitializer())
|
if (!GV.hasDefinitiveInitializer())
|
||||||
return unknown();
|
return unknown();
|
||||||
@ -629,6 +637,7 @@ SizeOffsetEvalType ObjectSizeOffsetEvaluator::compute_(Value *V) {
|
|||||||
} else if (isa<Argument>(V) ||
|
} else if (isa<Argument>(V) ||
|
||||||
(isa<ConstantExpr>(V) &&
|
(isa<ConstantExpr>(V) &&
|
||||||
cast<ConstantExpr>(V)->getOpcode() == Instruction::IntToPtr) ||
|
cast<ConstantExpr>(V)->getOpcode() == Instruction::IntToPtr) ||
|
||||||
|
isa<GlobalAlias>(V) ||
|
||||||
isa<GlobalVariable>(V)) {
|
isa<GlobalVariable>(V)) {
|
||||||
// ignore values where we cannot do more than what ObjectSizeVisitor can
|
// ignore values where we cannot do more than what ObjectSizeVisitor can
|
||||||
Result = unknown();
|
Result = unknown();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user