[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