aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2012-10-08 22:20:14 +0000
committerBill Wendling <isanbard@gmail.com>2012-10-08 22:20:14 +0000
commit0327244ec62f8bfbc5911b3df7253fe6aa9a51cf (patch)
tree838feea06fb2384d32c456e0c6008c257ec0395f
parentc92b8aa79f4a2cd16f7b674189e425c2c367e886 (diff)
downloadexternal_llvm-0327244ec62f8bfbc5911b3df7253fe6aa9a51cf.zip
external_llvm-0327244ec62f8bfbc5911b3df7253fe6aa9a51cf.tar.gz
external_llvm-0327244ec62f8bfbc5911b3df7253fe6aa9a51cf.tar.bz2
Convert the LLVM parser over to using the new Attributes::Builder to build its
attributes objects. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165436 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Attributes.h1
-rw-r--r--lib/AsmParser/LLParser.cpp66
-rw-r--r--lib/VMCore/Attributes.cpp6
3 files changed, 40 insertions, 33 deletions
diff --git a/include/llvm/Attributes.h b/include/llvm/Attributes.h
index fc666c7..07e2154 100644
--- a/include/llvm/Attributes.h
+++ b/include/llvm/Attributes.h
@@ -216,6 +216,7 @@ public:
/// get - Return a uniquified Attributes object. This takes the uniquified
/// value from the Builder and wraps it in the Attributes class.
+ static Attributes get(Builder &B);
static Attributes get(LLVMContext &Context, Builder &B);
// Attribute query methods.
diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp
index 39d5660..fea4179 100644
--- a/lib/AsmParser/LLParser.cpp
+++ b/lib/AsmParser/LLParser.cpp
@@ -917,7 +917,7 @@ bool LLParser::ParseOptionalAddrSpace(unsigned &AddrSpace) {
/// indicates what kind of attribute list this is: 0: function arg, 1: result,
/// 2: function attr.
bool LLParser::ParseOptionalAttrs(Attributes &Attrs, unsigned AttrKind) {
- Attrs = Attribute::None;
+ Attributes::Builder B;
LocTy AttrLoc = Lex.getLoc();
bool HaveError = false;
@@ -925,39 +925,40 @@ bool LLParser::ParseOptionalAttrs(Attributes &Attrs, unsigned AttrKind) {
lltok::Kind Token = Lex.getKind();
switch (Token) {
default: // End of attributes.
+ Attrs = Attributes::get(B); // FIXME: Use the other version of get().
return HaveError;
- case lltok::kw_zeroext: Attrs |= Attribute::ZExt; break;
- case lltok::kw_signext: Attrs |= Attribute::SExt; break;
- case lltok::kw_inreg: Attrs |= Attribute::InReg; break;
- case lltok::kw_sret: Attrs |= Attribute::StructRet; break;
- case lltok::kw_noalias: Attrs |= Attribute::NoAlias; break;
- case lltok::kw_nocapture: Attrs |= Attribute::NoCapture; break;
- case lltok::kw_byval: Attrs |= Attribute::ByVal; break;
- case lltok::kw_nest: Attrs |= Attribute::Nest; break;
-
- case lltok::kw_noreturn: Attrs |= Attribute::NoReturn; break;
- case lltok::kw_nounwind: Attrs |= Attribute::NoUnwind; break;
- case lltok::kw_uwtable: Attrs |= Attribute::UWTable; break;
- case lltok::kw_returns_twice: Attrs |= Attribute::ReturnsTwice; break;
- case lltok::kw_noinline: Attrs |= Attribute::NoInline; break;
- case lltok::kw_readnone: Attrs |= Attribute::ReadNone; break;
- case lltok::kw_readonly: Attrs |= Attribute::ReadOnly; break;
- case lltok::kw_inlinehint: Attrs |= Attribute::InlineHint; break;
- case lltok::kw_alwaysinline: Attrs |= Attribute::AlwaysInline; break;
- case lltok::kw_optsize: Attrs |= Attribute::OptimizeForSize; break;
- case lltok::kw_ssp: Attrs |= Attribute::StackProtect; break;
- case lltok::kw_sspreq: Attrs |= Attribute::StackProtectReq; break;
- case lltok::kw_noredzone: Attrs |= Attribute::NoRedZone; break;
- case lltok::kw_noimplicitfloat: Attrs |= Attribute::NoImplicitFloat; break;
- case lltok::kw_naked: Attrs |= Attribute::Naked; break;
- case lltok::kw_nonlazybind: Attrs |= Attribute::NonLazyBind; break;
- case lltok::kw_address_safety: Attrs |= Attribute::AddressSafety; break;
+ case lltok::kw_zeroext: B.addZExtAttr(); break;
+ case lltok::kw_signext: B.addSExtAttr(); break;
+ case lltok::kw_inreg: B.addInRegAttr(); break;
+ case lltok::kw_sret: B.addStructRetAttr(); break;
+ case lltok::kw_noalias: B.addNoAliasAttr(); break;
+ case lltok::kw_nocapture: B.addNoCaptureAttr(); break;
+ case lltok::kw_byval: B.addByValAttr(); break;
+ case lltok::kw_nest: B.addNestAttr(); break;
+
+ case lltok::kw_noreturn: B.addNoReturnAttr(); break;
+ case lltok::kw_nounwind: B.addNoUnwindAttr(); break;
+ case lltok::kw_uwtable: B.addUWTableAttr(); break;
+ case lltok::kw_returns_twice: B.addReturnsTwiceAttr(); break;
+ case lltok::kw_noinline: B.addNoInlineAttr(); break;
+ case lltok::kw_readnone: B.addReadNoneAttr(); break;
+ case lltok::kw_readonly: B.addReadOnlyAttr(); break;
+ case lltok::kw_inlinehint: B.addInlineHintAttr(); break;
+ case lltok::kw_alwaysinline: B.addAlwaysInlineAttr(); break;
+ case lltok::kw_optsize: B.addOptimizeForSizeAttr(); break;
+ case lltok::kw_ssp: B.addStackProtectAttr(); break;
+ case lltok::kw_sspreq: B.addStackProtectReqAttr(); break;
+ case lltok::kw_noredzone: B.addNoRedZoneAttr(); break;
+ case lltok::kw_noimplicitfloat: B.addNoImplicitFloatAttr(); break;
+ case lltok::kw_naked: B.addNakedAttr(); break;
+ case lltok::kw_nonlazybind: B.addNonLazyBindAttr(); break;
+ case lltok::kw_address_safety: B.addAddressSafetyAttr(); break;
case lltok::kw_alignstack: {
unsigned Alignment;
if (ParseOptionalStackAlignment(Alignment))
return true;
- Attrs |= Attributes::constructStackAlignmentFromInt(Alignment);
+ B.addStackAlignmentAttr(Alignment);
continue;
}
@@ -965,7 +966,7 @@ bool LLParser::ParseOptionalAttrs(Attributes &Attrs, unsigned AttrKind) {
unsigned Alignment;
if (ParseOptionalAlignment(Alignment))
return true;
- Attrs |= Attributes::constructAlignmentFromInt(Alignment);
+ B.addAlignmentAttr(Alignment);
continue;
}
@@ -1434,16 +1435,15 @@ bool LLParser::ParseParameterList(SmallVectorImpl<ParamInfo> &ArgList,
// Parse the argument.
LocTy ArgLoc;
Type *ArgTy = 0;
- Attributes ArgAttrs1;
- Attributes ArgAttrs2;
+ Attributes ArgAttrs;
Value *V;
if (ParseType(ArgTy, ArgLoc))
return true;
// Otherwise, handle normal operands.
- if (ParseOptionalAttrs(ArgAttrs1, 0) || ParseValue(ArgTy, V, PFS))
+ if (ParseOptionalAttrs(ArgAttrs, 0) || ParseValue(ArgTy, V, PFS))
return true;
- ArgList.push_back(ParamInfo(ArgLoc, V, ArgAttrs1|ArgAttrs2));
+ ArgList.push_back(ParamInfo(ArgLoc, V, ArgAttrs));
}
Lex.Lex(); // Lex the ')'.
diff --git a/lib/VMCore/Attributes.cpp b/lib/VMCore/Attributes.cpp
index e20fa6b..1fcebdf 100644
--- a/lib/VMCore/Attributes.cpp
+++ b/lib/VMCore/Attributes.cpp
@@ -33,6 +33,12 @@ Attributes::Attributes(Attribute::AttrConst Val) : Attrs(Val.v) {}
Attributes::Attributes(AttributesImpl *A) : Attrs(A->Bits) {}
+// FIXME: This is temporary until we have implemented the uniquified version of
+// AttributesImpl.
+Attributes Attributes::get(Attributes::Builder &B) {
+ return Attributes(B.Bits);
+}
+
Attributes Attributes::get(LLVMContext &Context, Attributes::Builder &B) {
// If there are no attributes, return an empty Attributes class.
if (B.Bits == 0)