Fix bug: test/Regression/Analysis/DSGraph/2003-11-02-NodeCollapsing.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9658 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-11-02 21:02:20 +00:00
parent dab02aeada
commit dbfe36e51e

View File

@ -252,9 +252,11 @@ namespace {
/// ElementTypesAreCompatible - Check to see if the specified types are /// ElementTypesAreCompatible - Check to see if the specified types are
/// "physically" compatible. If so, return true, else return false. We only /// "physically" compatible. If so, return true, else return false. We only
/// have to check the fields in T1: T2 may be larger than T1. /// have to check the fields in T1: T2 may be larger than T1. If AllowLargerT1
/// is true, then we also allow a larger T1.
/// ///
static bool ElementTypesAreCompatible(const Type *T1, const Type *T2) { static bool ElementTypesAreCompatible(const Type *T1, const Type *T2,
bool AllowLargerT1) {
TypeElementWalker T1W(T1), T2W(T2); TypeElementWalker T1W(T1), T2W(T2);
while (!T1W.isDone() && !T2W.isDone()) { while (!T1W.isDone() && !T2W.isDone()) {
@ -270,7 +272,7 @@ static bool ElementTypesAreCompatible(const Type *T1, const Type *T2) {
T2W.StepToNextType(); T2W.StepToNextType();
} }
return T1W.isDone(); return AllowLargerT1 || T1W.isDone();
} }
@ -327,8 +329,8 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset,
if (Ty == Type::VoidTy) { if (Ty == Type::VoidTy) {
// If this is the first type that this node has seen, just accept it without // If this is the first type that this node has seen, just accept it without
// question.... // question....
assert(Offset == 0 && "Cannot have an offset into a void node!"); assert(Offset == 0 && !isArray() &&
assert(!isArray() && "This shouldn't happen!"); "Cannot have an offset into a void node!");
Ty = NewTy; Ty = NewTy;
NodeType &= ~Array; NodeType &= ~Array;
if (WillBeArray) NodeType |= Array; if (WillBeArray) NodeType |= Array;
@ -424,7 +426,7 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset,
// just require each element in the node to be compatible. // just require each element in the node to be compatible.
if (NewTySize <= SubTypeSize && NewTySize && NewTySize < 256 && if (NewTySize <= SubTypeSize && NewTySize && NewTySize < 256 &&
SubTypeSize && SubTypeSize < 256 && SubTypeSize && SubTypeSize < 256 &&
ElementTypesAreCompatible(NewTy, SubType)) ElementTypesAreCompatible(NewTy, SubType, !isArray()))
return false; return false;
// Okay, so we found the leader type at the offset requested. Search the list // Okay, so we found the leader type at the offset requested. Search the list