[llvm-commits] CVS: llvm/tools/llvm-upgrade/UpgradeParser.y UpgradeParser.y.cvs

Anton Korobeynikov asl at math.spbu.ru
Sun Jan 28 05:36:34 PST 2007



Changes in directory llvm/tools/llvm-upgrade:

UpgradeParser.y updated: 1.49 -> 1.50
UpgradeParser.y.cvs updated: 1.47 -> 1.48
---
Log message:

Drop CSRET CC


---
Diffs of the changes:  (+22 -126)

 UpgradeParser.y     |   74 +++++++---------------------------------------------
 UpgradeParser.y.cvs |   74 +++++++---------------------------------------------
 2 files changed, 22 insertions(+), 126 deletions(-)


Index: llvm/tools/llvm-upgrade/UpgradeParser.y
diff -u llvm/tools/llvm-upgrade/UpgradeParser.y:1.49 llvm/tools/llvm-upgrade/UpgradeParser.y:1.50
--- llvm/tools/llvm-upgrade/UpgradeParser.y:1.49	Sat Jan 27 18:51:40 2007
+++ llvm/tools/llvm-upgrade/UpgradeParser.y	Sun Jan 28 07:36:18 2007
@@ -570,7 +570,6 @@
   }
 }
 
-/// @brief This just makes any name given to it unique, up to MAX_UINT times.
 static std::string makeNameUnique(const std::string& Name) {
   static unsigned UniqueNameCounter = 1;
   std::string Result(Name);
@@ -578,57 +577,6 @@
   return Result;
 }
 
-/// This is the implementation portion of TypeHasInteger. It traverses the
-/// type given, avoiding recursive types, and returns true as soon as it finds
-/// an integer type. If no integer type is found, it returns false.
-static bool TypeHasIntegerI(const Type *Ty, std::vector<const Type*> Stack) {
-  // Handle some easy cases
-  if (Ty->isPrimitiveType() || (Ty->getTypeID() == Type::OpaqueTyID))
-    return false;
-  if (Ty->isInteger())
-    return true;
-  if (const SequentialType *STy = dyn_cast<SequentialType>(Ty))
-    return STy->getElementType()->isInteger();
-
-  // Avoid type structure recursion
-  for (std::vector<const Type*>::iterator I = Stack.begin(), E = Stack.end();
-       I != E; ++I)
-    if (Ty == *I)
-      return false;
-
-  // Push us on the type stack
-  Stack.push_back(Ty);
-
-  if (const FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
-    if (TypeHasIntegerI(FTy->getReturnType(), Stack)) 
-      return true;
-    FunctionType::param_iterator I = FTy->param_begin();
-    FunctionType::param_iterator E = FTy->param_end();
-    for (; I != E; ++I)
-      if (TypeHasIntegerI(*I, Stack))
-        return true;
-    return false;
-  } else if (const StructType *STy = dyn_cast<StructType>(Ty)) {
-    StructType::element_iterator I = STy->element_begin();
-    StructType::element_iterator E = STy->element_end();
-    for (; I != E; ++I) {
-      if (TypeHasIntegerI(*I, Stack))
-        return true;
-    }
-    return false;
-  }
-  // There shouldn't be anything else, but its definitely not integer
-  assert(0 && "What type is this?");
-  return false;
-}
-
-/// This is the interface to TypeHasIntegerI. It just provides the type stack,
-/// to avoid recursion, and then calls TypeHasIntegerI.
-static inline bool TypeHasInteger(const Type *Ty) {
-  std::vector<const Type*> TyStack;
-  return TypeHasIntegerI(Ty, TyStack);
-}
-
 // setValueName - Set the specified value to the name given.  The name may be
 // null potentially, in which case this is a noop.  The string passed in is
 // assumed to be a malloc'd string buffer, and is free'd by this function.
@@ -657,16 +605,16 @@
       }
     }
     if (Existing) {
-      // An existing value of the same name was found. This might have happened
-      // because of the integer type planes collapsing in LLVM 2.0. 
-      if (Existing->getType() == V->getType() &&
-          !TypeHasInteger(Existing->getType())) {
-        // If the type does not contain any integers in them then this can't be
-        // a type plane collapsing issue. It truly is a redefinition and we 
-        // should error out as the assembly is invalid.
-        error("Redefinition of value named '" + Name + "' of type '" +
-              V->getType()->getDescription() + "'");
-        return;
+      if (Existing->getType() == V->getType()) {
+        // The type of the Existing value and the new one are the same. This
+        // is probably a type plane collapsing error. If the types involved
+        // are both integer, just rename it. Otherwise it 
+        // is a redefinition error.
+        if (!Existing->getType()->isInteger()) {
+          error("Redefinition of value named '" + Name + "' in the '" +
+                V->getType()->getDescription() + "' type plane");
+          return;
+        }
       } 
       // In LLVM 2.0 we don't allow names to be re-used for any values in a 
       // function, regardless of Type. Previously re-use of names was okay as 
@@ -1628,7 +1576,7 @@
 OptCallingConv 
   : /*empty*/          { $$ = CallingConv::C; } 
   | CCC_TOK            { $$ = CallingConv::C; } 
-  | CSRETCC_TOK        { $$ = CallingConv::CSRet; } 
+  | CSRETCC_TOK        { $$ = CallingConv::C; } 
   | FASTCC_TOK         { $$ = CallingConv::Fast; } 
   | COLDCC_TOK         { $$ = CallingConv::Cold; } 
   | X86_STDCALLCC_TOK  { $$ = CallingConv::X86_StdCall; } 


Index: llvm/tools/llvm-upgrade/UpgradeParser.y.cvs
diff -u llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.47 llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.48
--- llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.47	Sat Jan 27 18:52:05 2007
+++ llvm/tools/llvm-upgrade/UpgradeParser.y.cvs	Sun Jan 28 07:36:18 2007
@@ -570,7 +570,6 @@
   }
 }
 
-/// @brief This just makes any name given to it unique, up to MAX_UINT times.
 static std::string makeNameUnique(const std::string& Name) {
   static unsigned UniqueNameCounter = 1;
   std::string Result(Name);
@@ -578,57 +577,6 @@
   return Result;
 }
 
-/// This is the implementation portion of TypeHasInteger. It traverses the
-/// type given, avoiding recursive types, and returns true as soon as it finds
-/// an integer type. If no integer type is found, it returns false.
-static bool TypeHasIntegerI(const Type *Ty, std::vector<const Type*> Stack) {
-  // Handle some easy cases
-  if (Ty->isPrimitiveType() || (Ty->getTypeID() == Type::OpaqueTyID))
-    return false;
-  if (Ty->isInteger())
-    return true;
-  if (const SequentialType *STy = dyn_cast<SequentialType>(Ty))
-    return STy->getElementType()->isInteger();
-
-  // Avoid type structure recursion
-  for (std::vector<const Type*>::iterator I = Stack.begin(), E = Stack.end();
-       I != E; ++I)
-    if (Ty == *I)
-      return false;
-
-  // Push us on the type stack
-  Stack.push_back(Ty);
-
-  if (const FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
-    if (TypeHasIntegerI(FTy->getReturnType(), Stack)) 
-      return true;
-    FunctionType::param_iterator I = FTy->param_begin();
-    FunctionType::param_iterator E = FTy->param_end();
-    for (; I != E; ++I)
-      if (TypeHasIntegerI(*I, Stack))
-        return true;
-    return false;
-  } else if (const StructType *STy = dyn_cast<StructType>(Ty)) {
-    StructType::element_iterator I = STy->element_begin();
-    StructType::element_iterator E = STy->element_end();
-    for (; I != E; ++I) {
-      if (TypeHasIntegerI(*I, Stack))
-        return true;
-    }
-    return false;
-  }
-  // There shouldn't be anything else, but its definitely not integer
-  assert(0 && "What type is this?");
-  return false;
-}
-
-/// This is the interface to TypeHasIntegerI. It just provides the type stack,
-/// to avoid recursion, and then calls TypeHasIntegerI.
-static inline bool TypeHasInteger(const Type *Ty) {
-  std::vector<const Type*> TyStack;
-  return TypeHasIntegerI(Ty, TyStack);
-}
-
 // setValueName - Set the specified value to the name given.  The name may be
 // null potentially, in which case this is a noop.  The string passed in is
 // assumed to be a malloc'd string buffer, and is free'd by this function.
@@ -657,16 +605,16 @@
       }
     }
     if (Existing) {
-      // An existing value of the same name was found. This might have happened
-      // because of the integer type planes collapsing in LLVM 2.0. 
-      if (Existing->getType() == V->getType() &&
-          !TypeHasInteger(Existing->getType())) {
-        // If the type does not contain any integers in them then this can't be
-        // a type plane collapsing issue. It truly is a redefinition and we 
-        // should error out as the assembly is invalid.
-        error("Redefinition of value named '" + Name + "' of type '" +
-              V->getType()->getDescription() + "'");
-        return;
+      if (Existing->getType() == V->getType()) {
+        // The type of the Existing value and the new one are the same. This
+        // is probably a type plane collapsing error. If the types involved
+        // are both integer, just rename it. Otherwise it 
+        // is a redefinition error.
+        if (!Existing->getType()->isInteger()) {
+          error("Redefinition of value named '" + Name + "' in the '" +
+                V->getType()->getDescription() + "' type plane");
+          return;
+        }
       } 
       // In LLVM 2.0 we don't allow names to be re-used for any values in a 
       // function, regardless of Type. Previously re-use of names was okay as 
@@ -1628,7 +1576,7 @@
 OptCallingConv 
   : /*empty*/          { $$ = CallingConv::C; } 
   | CCC_TOK            { $$ = CallingConv::C; } 
-  | CSRETCC_TOK        { $$ = CallingConv::CSRet; } 
+  | CSRETCC_TOK        { $$ = CallingConv::C; } 
   | FASTCC_TOK         { $$ = CallingConv::Fast; } 
   | COLDCC_TOK         { $$ = CallingConv::Cold; } 
   | X86_STDCALLCC_TOK  { $$ = CallingConv::X86_StdCall; } 






More information about the llvm-commits mailing list