Don't apply type information to load instructions if it will cause collapsing

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5684 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-03-03 17:13:31 +00:00
parent af68ccefeb
commit 088b639e3a
2 changed files with 7 additions and 6 deletions

View File

@ -152,7 +152,8 @@ bool DSNode::isNodeCompletelyFolded() const {
///
/// This method returns true if the node is completely folded, otherwise false.
///
bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset) {
bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset,
bool FoldIfIncompatible) {
// Check to make sure the Size member is up-to-date. Size can be one of the
// following:
// Size = 0, Ty = Void: Nothing is known about this node.
@ -213,14 +214,14 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset) {
// It is illegal to grow this node if we have treated it as an array of
// objects...
if (isArray()) {
foldNodeCompletely();
if (FoldIfIncompatible) foldNodeCompletely();
return true;
}
if (Offset) { // We could handle this case, but we don't for now...
DEBUG(std::cerr << "UNIMP: Trying to merge a growth type into "
<< "offset != 0: Collapsing!\n");
foldNodeCompletely();
if (FoldIfIncompatible) foldNodeCompletely();
return true;
}
@ -277,7 +278,7 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset) {
break;
}
default:
foldNodeCompletely();
if (FoldIfIncompatible) foldNodeCompletely();
return true;
}
}
@ -356,7 +357,7 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset) {
<< "\n due to:" << NewTy << " @ " << Offset << "!\n"
<< "SubType: " << SubType << "\n\n");
foldNodeCompletely();
if (FoldIfIncompatible) foldNodeCompletely();
return true;
}

View File

@ -368,7 +368,7 @@ void GraphBuilder::visitLoadInst(LoadInst &LI) {
Ptr.getNode()->NodeType |= DSNode::Read;
// Ensure a typerecord exists...
Ptr.getNode()->mergeTypeInfo(LI.getType(), Ptr.getOffset());
Ptr.getNode()->mergeTypeInfo(LI.getType(), Ptr.getOffset(), false);
if (isPointerType(LI.getType()))
setDestTo(LI, getLink(Ptr));