mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Initial submission for the attribute group feature.
Attribute groups are of the form: #0 = attributes { noinline "no-sse" "cpu"="cortex-a8" alignstack=4 } Target-dependent attributes are represented as strings. Attributes can have optional values associated with them. E.g., the "cpu" attribute has the value "cortex-a8". Target-independent attributes are listed as enums inside the attribute classes. Multiple attribute groups can be referenced by the same object. In that case, the attributes are merged together. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174493 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -226,6 +226,7 @@ lltok::Kind LLLexer::LexToken() {
|
||||
SkipLineComment();
|
||||
return LexToken();
|
||||
case '!': return LexExclaim();
|
||||
case '#': return LexHash();
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
case '-':
|
||||
@@ -394,6 +395,24 @@ lltok::Kind LLLexer::LexExclaim() {
|
||||
return lltok::exclaim;
|
||||
}
|
||||
|
||||
/// LexHash - Lex all tokens that start with a # character:
|
||||
/// AttrGrpID ::= #[0-9]+
|
||||
lltok::Kind LLLexer::LexHash() {
|
||||
// Handle AttrGrpID: #[0-9]+
|
||||
if (isdigit(CurPtr[0])) {
|
||||
for (++CurPtr; isdigit(CurPtr[0]); ++CurPtr)
|
||||
/*empty*/;
|
||||
|
||||
uint64_t Val = atoull(TokStart+1, CurPtr);
|
||||
if ((unsigned)Val != Val)
|
||||
Error("invalid value number (too large)!");
|
||||
UIntVal = unsigned(Val);
|
||||
return lltok::AttrGrpID;
|
||||
}
|
||||
|
||||
return lltok::Error;
|
||||
}
|
||||
|
||||
/// LexIdentifier: Handle several related productions:
|
||||
/// Label [-a-zA-Z$._0-9]+:
|
||||
/// IntegerType i[0-9]+
|
||||
@@ -531,35 +550,36 @@ lltok::Kind LLLexer::LexIdentifier() {
|
||||
KEYWORD(cc);
|
||||
KEYWORD(c);
|
||||
|
||||
KEYWORD(signext);
|
||||
KEYWORD(zeroext);
|
||||
KEYWORD(attributes);
|
||||
|
||||
KEYWORD(address_safety);
|
||||
KEYWORD(alwaysinline);
|
||||
KEYWORD(byval);
|
||||
KEYWORD(inlinehint);
|
||||
KEYWORD(inreg);
|
||||
KEYWORD(sret);
|
||||
KEYWORD(nounwind);
|
||||
KEYWORD(noreturn);
|
||||
KEYWORD(minsize);
|
||||
KEYWORD(naked);
|
||||
KEYWORD(nest);
|
||||
KEYWORD(noalias);
|
||||
KEYWORD(nocapture);
|
||||
KEYWORD(byval);
|
||||
KEYWORD(nest);
|
||||
KEYWORD(noduplicate);
|
||||
KEYWORD(noimplicitfloat);
|
||||
KEYWORD(noinline);
|
||||
KEYWORD(nonlazybind);
|
||||
KEYWORD(noredzone);
|
||||
KEYWORD(noreturn);
|
||||
KEYWORD(nounwind);
|
||||
KEYWORD(optsize);
|
||||
KEYWORD(readnone);
|
||||
KEYWORD(readonly);
|
||||
KEYWORD(uwtable);
|
||||
KEYWORD(returns_twice);
|
||||
|
||||
KEYWORD(inlinehint);
|
||||
KEYWORD(noinline);
|
||||
KEYWORD(alwaysinline);
|
||||
KEYWORD(optsize);
|
||||
KEYWORD(signext);
|
||||
KEYWORD(sret);
|
||||
KEYWORD(ssp);
|
||||
KEYWORD(sspreq);
|
||||
KEYWORD(sspstrong);
|
||||
KEYWORD(noredzone);
|
||||
KEYWORD(noimplicitfloat);
|
||||
KEYWORD(naked);
|
||||
KEYWORD(nonlazybind);
|
||||
KEYWORD(address_safety);
|
||||
KEYWORD(minsize);
|
||||
KEYWORD(noduplicate);
|
||||
KEYWORD(uwtable);
|
||||
KEYWORD(zeroext);
|
||||
|
||||
KEYWORD(type);
|
||||
KEYWORD(opaque);
|
||||
|
Reference in New Issue
Block a user