[llvm-commits] CVS: llvm/lib/AsmParser/ParserInternals.h llvmAsmParser.y
Reid Spencer
reid at x10sys.com
Sun Apr 8 23:13:24 PDT 2007
Changes in directory llvm/lib/AsmParser:
ParserInternals.h updated: 1.54 -> 1.55
llvmAsmParser.y updated: 1.336 -> 1.337
---
Log message:
For PR1146: http://llvm.org/PR1146 :
Adapt handling of parameter attributes to use the new ParamAttrsList class.
---
Diffs of the changes: (+82 -46)
ParserInternals.h | 7 +--
llvmAsmParser.y | 121 ++++++++++++++++++++++++++++++++++--------------------
2 files changed, 82 insertions(+), 46 deletions(-)
Index: llvm/lib/AsmParser/ParserInternals.h
diff -u llvm/lib/AsmParser/ParserInternals.h:1.54 llvm/lib/AsmParser/ParserInternals.h:1.55
--- llvm/lib/AsmParser/ParserInternals.h:1.54 Mon Mar 19 13:34:28 2007
+++ llvm/lib/AsmParser/ParserInternals.h Mon Apr 9 01:13:07 2007
@@ -17,6 +17,7 @@
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
+#include "llvm/ParameterAttributes.h"
#include "llvm/Function.h"
#include "llvm/Instructions.h"
#include "llvm/Assembly/Parser.h"
@@ -231,13 +232,13 @@
struct TypeWithAttrs {
llvm::PATypeHolder *Ty;
- FunctionType::ParameterAttributes Attrs;
+ uint16_t Attrs;
};
typedef std::vector<TypeWithAttrs> TypeWithAttrsList;
struct ArgListEntry {
- FunctionType::ParameterAttributes Attrs;
+ uint16_t Attrs;
llvm::PATypeHolder *Ty;
char *Name;
};
@@ -246,7 +247,7 @@
struct ValueRefListEntry {
Value *Val;
- FunctionType::ParameterAttributes Attrs;
+ uint16_t Attrs;
};
typedef std::vector<ValueRefListEntry> ValueRefList;
Index: llvm/lib/AsmParser/llvmAsmParser.y
diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.336 llvm/lib/AsmParser/llvmAsmParser.y:1.337
--- llvm/lib/AsmParser/llvmAsmParser.y:1.336 Sun Apr 8 20:55:42 2007
+++ llvm/lib/AsmParser/llvmAsmParser.y Mon Apr 9 01:13:07 2007
@@ -200,8 +200,6 @@
}
return false;
}
-
-
} CurModule;
static struct PerFunctionInfo {
@@ -962,7 +960,7 @@
llvm::GlobalValue::LinkageTypes Linkage;
llvm::GlobalValue::VisibilityTypes Visibility;
- llvm::FunctionType::ParameterAttributes ParamAttrs;
+ uint16_t ParamAttrs;
llvm::APInt *APIntVal;
int64_t SInt64Val;
uint64_t UInt64Val;
@@ -1191,26 +1189,26 @@
CHECK_FOR_ERROR
};
-ParamAttr : ZEXT { $$ = FunctionType::ZExtAttribute; }
- | SEXT { $$ = FunctionType::SExtAttribute; }
- | INREG { $$ = FunctionType::InRegAttribute; }
- | SRET { $$ = FunctionType::StructRetAttribute; }
+ParamAttr : ZEXT { $$ = ZExtAttribute; }
+ | SEXT { $$ = SExtAttribute; }
+ | INREG { $$ = InRegAttribute; }
+ | SRET { $$ = StructRetAttribute; }
;
-OptParamAttrs : /* empty */ { $$ = FunctionType::NoAttributeSet; }
+OptParamAttrs : /* empty */ { $$ = NoAttributeSet; }
| OptParamAttrs ParamAttr {
- $$ = FunctionType::ParameterAttributes($1 | $2);
+ $$ = $1 | $2;
}
;
-FuncAttr : NORETURN { $$ = FunctionType::NoReturnAttribute; }
- | NOUNWIND { $$ = FunctionType::NoUnwindAttribute; }
+FuncAttr : NORETURN { $$ = NoReturnAttribute; }
+ | NOUNWIND { $$ = NoUnwindAttribute; }
| ParamAttr
;
-OptFuncAttrs : /* empty */ { $$ = FunctionType::NoAttributeSet; }
+OptFuncAttrs : /* empty */ { $$ = NoAttributeSet; }
| OptFuncAttrs FuncAttr {
- $$ = FunctionType::ParameterAttributes($1 | $2);
+ $$ = $1 | $2;
}
;
@@ -1299,18 +1297,25 @@
}
| Types '(' ArgTypeListI ')' OptFuncAttrs {
std::vector<const Type*> Params;
- std::vector<FunctionType::ParameterAttributes> Attrs;
- Attrs.push_back($5);
- for (TypeWithAttrsList::iterator I=$3->begin(), E=$3->end(); I != E; ++I) {
+ ParamAttrsList Attrs;
+ if ($5 != NoAttributeSet)
+ Attrs.addAttributes(0, $5);
+ unsigned index = 1;
+ TypeWithAttrsList::iterator I = $3->begin(), E = $3->end();
+ for (; I != E; ++I, ++index) {
const Type *Ty = I->Ty->get();
Params.push_back(Ty);
if (Ty != Type::VoidTy)
- Attrs.push_back(I->Attrs);
+ if (I->Attrs != NoAttributeSet)
+ Attrs.addAttributes(index, I->Attrs);
}
bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
if (isVarArg) Params.pop_back();
- FunctionType *FT = FunctionType::get(*$1, Params, isVarArg, Attrs);
+ ParamAttrsList *ActualAttrs = 0;
+ if (!Attrs.empty())
+ ActualAttrs = new ParamAttrsList(Attrs);
+ FunctionType *FT = FunctionType::get(*$1, Params, isVarArg, ActualAttrs);
delete $3; // Delete the argument list
delete $1; // Delete the return type handle
$$ = new PATypeHolder(HandleUpRefs(FT));
@@ -1318,18 +1323,26 @@
}
| VOID '(' ArgTypeListI ')' OptFuncAttrs {
std::vector<const Type*> Params;
- std::vector<FunctionType::ParameterAttributes> Attrs;
- Attrs.push_back($5);
- for (TypeWithAttrsList::iterator I=$3->begin(), E=$3->end(); I != E; ++I) {
+ ParamAttrsList Attrs;
+ if ($5 != NoAttributeSet)
+ Attrs.addAttributes(0, $5);
+ TypeWithAttrsList::iterator I = $3->begin(), E = $3->end();
+ unsigned index = 1;
+ for ( ; I != E; ++I, ++index) {
const Type* Ty = I->Ty->get();
Params.push_back(Ty);
if (Ty != Type::VoidTy)
- Attrs.push_back(I->Attrs);
+ if (I->Attrs != NoAttributeSet)
+ Attrs.addAttributes(index, I->Attrs);
}
bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
if (isVarArg) Params.pop_back();
- FunctionType *FT = FunctionType::get($1, Params, isVarArg, Attrs);
+ ParamAttrsList *ActualAttrs = 0;
+ if (!Attrs.empty())
+ ActualAttrs = new ParamAttrsList(Attrs);
+
+ FunctionType *FT = FunctionType::get($1, Params, isVarArg, ActualAttrs);
delete $3; // Delete the argument list
$$ = new PATypeHolder(HandleUpRefs(FT));
CHECK_FOR_ERROR
@@ -1417,14 +1430,14 @@
: ArgTypeList
| ArgTypeList ',' DOTDOTDOT {
$$=$1;
- TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
+ TypeWithAttrs TWA; TWA.Attrs = NoAttributeSet;
TWA.Ty = new PATypeHolder(Type::VoidTy);
$$->push_back(TWA);
CHECK_FOR_ERROR
}
| DOTDOTDOT {
$$ = new TypeWithAttrsList;
- TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
+ TypeWithAttrs TWA; TWA.Attrs = NoAttributeSet;
TWA.Ty = new PATypeHolder(Type::VoidTy);
$$->push_back(TWA);
CHECK_FOR_ERROR
@@ -2087,7 +2100,7 @@
struct ArgListEntry E;
E.Ty = new PATypeHolder(Type::VoidTy);
E.Name = 0;
- E.Attrs = FunctionType::NoAttributeSet;
+ E.Attrs = NoAttributeSet;
$$->push_back(E);
CHECK_FOR_ERROR
}
@@ -2096,7 +2109,7 @@
struct ArgListEntry E;
E.Ty = new PATypeHolder(Type::VoidTy);
E.Name = 0;
- E.Attrs = FunctionType::NoAttributeSet;
+ E.Attrs = NoAttributeSet;
$$->push_back(E);
CHECK_FOR_ERROR
}
@@ -2117,24 +2130,31 @@
GEN_ERROR("Reference to abstract result: "+ $2->get()->getDescription());
std::vector<const Type*> ParamTypeList;
- std::vector<FunctionType::ParameterAttributes> ParamAttrs;
- ParamAttrs.push_back($7);
+ ParamAttrsList ParamAttrs;
+ if ($7 != NoAttributeSet)
+ ParamAttrs.addAttributes(0, $7);
if ($5) { // If there are arguments...
- for (ArgListType::iterator I = $5->begin(); I != $5->end(); ++I) {
+ unsigned index = 1;
+ for (ArgListType::iterator I = $5->begin(); I != $5->end(); ++I, ++index) {
const Type* Ty = I->Ty->get();
if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
ParamTypeList.push_back(Ty);
if (Ty != Type::VoidTy)
- ParamAttrs.push_back(I->Attrs);
+ if (I->Attrs != NoAttributeSet)
+ ParamAttrs.addAttributes(index, I->Attrs);
}
}
bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
if (isVarArg) ParamTypeList.pop_back();
- FunctionType *FT = FunctionType::get(*$2, ParamTypeList, isVarArg,
- ParamAttrs);
+ ParamAttrsList *ActualAttrs = 0;
+ if (!ParamAttrs.empty())
+ ActualAttrs = new ParamAttrsList(ParamAttrs);
+
+ FunctionType *FT = FunctionType::get(*$2, ParamTypeList, isVarArg,
+ ActualAttrs);
const PointerType *PFT = PointerType::get(FT);
delete $2;
@@ -2465,17 +2485,24 @@
!(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
// Pull out the types of all of the arguments...
std::vector<const Type*> ParamTypes;
- FunctionType::ParamAttrsList ParamAttrs;
- ParamAttrs.push_back($8);
- for (ValueRefList::iterator I = $6->begin(), E = $6->end(); I != E; ++I) {
+ ParamAttrsList ParamAttrs;
+ if ($8 != NoAttributeSet)
+ ParamAttrs.addAttributes(0, $8);
+ ValueRefList::iterator I = $6->begin(), E = $6->end();
+ unsigned index = 1;
+ for (; I != E; ++I, ++index) {
const Type *Ty = I->Val->getType();
if (Ty == Type::VoidTy)
GEN_ERROR("Short call syntax cannot be used with varargs");
ParamTypes.push_back(Ty);
- ParamAttrs.push_back(I->Attrs);
+ if (I->Attrs != NoAttributeSet)
+ ParamAttrs.addAttributes(index, I->Attrs);
}
- Ty = FunctionType::get($3->get(), ParamTypes, false, ParamAttrs);
+ ParamAttrsList *Attrs = 0;
+ if (!ParamAttrs.empty())
+ Attrs = new ParamAttrsList(ParamAttrs);
+ Ty = FunctionType::get($3->get(), ParamTypes, false, Attrs);
PFTy = PointerType::get(Ty);
}
@@ -2764,17 +2791,25 @@
!(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
// Pull out the types of all of the arguments...
std::vector<const Type*> ParamTypes;
- FunctionType::ParamAttrsList ParamAttrs;
- ParamAttrs.push_back($8);
- for (ValueRefList::iterator I = $6->begin(), E = $6->end(); I != E; ++I) {
+ ParamAttrsList ParamAttrs;
+ if ($8 != NoAttributeSet)
+ ParamAttrs.addAttributes(0, $8);
+ unsigned index = 1;
+ ValueRefList::iterator I = $6->begin(), E = $6->end();
+ for (; I != E; ++I, ++index) {
const Type *Ty = I->Val->getType();
if (Ty == Type::VoidTy)
GEN_ERROR("Short call syntax cannot be used with varargs");
ParamTypes.push_back(Ty);
- ParamAttrs.push_back(I->Attrs);
+ if (I->Attrs != NoAttributeSet)
+ ParamAttrs.addAttributes(index, I->Attrs);
}
- Ty = FunctionType::get($3->get(), ParamTypes, false, ParamAttrs);
+ ParamAttrsList *Attrs = 0;
+ if (!ParamAttrs.empty())
+ Attrs = new ParamAttrsList(ParamAttrs);
+
+ Ty = FunctionType::get($3->get(), ParamTypes, false, Attrs);
PFTy = PointerType::get(Ty);
}
More information about the llvm-commits
mailing list