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

View File

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