Use stripPointerCasts instead of doing the same manually.

llvm-svn: 80267
This commit is contained in:
Dan Gohman 2009-08-27 18:02:03 +00:00
parent ea398633b2
commit bc1d841a63
1 changed files with 3 additions and 14 deletions

View File

@ -308,13 +308,9 @@ BasicAliasAnalysis::getModRefInfo(CallSite CS1, CallSite CS2) {
AliasAnalysis::AliasResult AliasAnalysis::AliasResult
BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size, BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size,
const Value *V2, unsigned V2Size) { const Value *V2, unsigned V2Size) {
// Strip off any constant expression casts if they exist // Strip off any casts if they exist.
if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V1)) V1 = V1->stripPointerCasts();
if (CE->isCast() && isa<PointerType>(CE->getOperand(0)->getType())) V2 = V2->stripPointerCasts();
V1 = CE->getOperand(0);
if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V2))
if (CE->isCast() && isa<PointerType>(CE->getOperand(0)->getType()))
V2 = CE->getOperand(0);
// Are we checking for alias of the same value? // Are we checking for alias of the same value?
if (V1 == V2) return MustAlias; if (V1 == V2) return MustAlias;
@ -322,13 +318,6 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size,
if (!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType())) if (!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType()))
return NoAlias; // Scalars cannot alias each other return NoAlias; // Scalars cannot alias each other
// Strip off cast instructions. Since V1 and V2 are pointers, they must be
// pointer<->pointer bitcasts.
if (const BitCastInst *I = dyn_cast<BitCastInst>(V1))
return alias(I->getOperand(0), V1Size, V2, V2Size);
if (const BitCastInst *I = dyn_cast<BitCastInst>(V2))
return alias(V1, V1Size, I->getOperand(0), V2Size);
// Figure out what objects these things are pointing to if we can. // Figure out what objects these things are pointing to if we can.
const Value *O1 = V1->getUnderlyingObject(); const Value *O1 = V1->getUnderlyingObject();
const Value *O2 = V2->getUnderlyingObject(); const Value *O2 = V2->getUnderlyingObject();