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

Reid Spencer rspencer at reidspencer.com
Sun Jan 28 10:02:32 PST 2007


On Sun, 2007-01-28 at 07:04 -0800, Chris Lattner wrote:
> > 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
> 
> Is this patch right?

No its not. It reverts the fix for PR1137.


> 
> Two issues:
> 
> 1. You removed TypeHasInteger[I].  Is that correct?
> 2. You map csretcc directly to ccc.  You should also arrange for the  
> 'sret' attribute to be applied to the first argument.  Maybe I'm  
> missing how this is done.
> 
> -Chris
> 
> >
> > ---
> > 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; }
> >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list