From 6a490cedb5c07be90812dfa57a5346c2ddf5d415 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 14 Jan 2003 19:42:39 +0000 Subject: [PATCH] Make type resolution a bit more efficient git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5265 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Type.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index 4990700370f..398937aa181 100644 --- a/lib/VMCore/Type.cpp +++ b/lib/VMCore/Type.cpp @@ -259,13 +259,12 @@ OpaqueType::OpaqueType() : DerivedType(OpaqueTyID) { // static string getTypeProps(const Type *Ty, vector &TypeStack, bool &isAbstract, bool &isRecursive) { - string Result; if (!Ty->isAbstract() && !Ty->isRecursive() && // Base case for the recursion Ty->getDescription().size()) { - Result = Ty->getDescription(); // Primitive = leaf type + return Ty->getDescription(); // Primitive = leaf type } else if (isa(Ty)) { // Base case for the recursion - Result = Ty->getDescription(); // Opaque = leaf type isAbstract = true; // This whole type is abstract! + return Ty->getDescription(); // Opaque = leaf type } else { // Check to see if the Type is already on the stack... unsigned Slot = 0, CurSize = TypeStack.size(); @@ -276,9 +275,10 @@ static string getTypeProps(const Type *Ty, vector &TypeStack, // Generate the appropriate upreference to handle this. // if (Slot < CurSize) { - Result = "\\" + utostr(CurSize-Slot); // Here's the upreference isRecursive = true; // We know we are recursive + return "\\" + utostr(CurSize-Slot); // Here's the upreference } else { // Recursive case: abstract derived type... + string Result; TypeStack.push_back(Ty); // Add us to the stack.. switch (Ty->getPrimitiveID()) { @@ -334,9 +334,9 @@ static string getTypeProps(const Type *Ty, vector &TypeStack, } TypeStack.pop_back(); // Remove self from stack... + return Result; } } - return Result; } @@ -1043,7 +1043,7 @@ void StructType::refineAbstractType(const DerivedType *OldType, << OldType->getDescription() << "], " << (void*)NewType << " [" << NewType->getDescription() << "])\n"; #endif - for (unsigned i = 0, e = ETypes.size(); i != e; ++i) + for (int i = ETypes.size()-1; i >= 0; --i) if (ETypes[i] == OldType) { ETypes[i].removeUserFromConcrete(); -- 2.34.1