aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AsmParser/Lexer.l
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-12-31 05:40:12 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-12-31 05:40:12 +0000
commite1553cc95601f3d5c5c807f482085857dd7937a8 (patch)
treeb128cb594fde87225bfd7e6afd8f2487517785cd /lib/AsmParser/Lexer.l
parent79e21d338c60b4b5a5746fc45e37ea0310606aee (diff)
downloadexternal_llvm-e1553cc95601f3d5c5c807f482085857dd7937a8.zip
external_llvm-e1553cc95601f3d5c5c807f482085857dd7937a8.tar.gz
external_llvm-e1553cc95601f3d5c5c807f482085857dd7937a8.tar.bz2
For PR950:
Major reorganization. This patch introduces the signedness changes for the new integer types (i8, i16, i32, i64) which replace the old signed versions (ubyte, sbyte, ushort, short, etc). This patch also implements the function type parameter attributes feature. Together these conspired to introduce new reduce/reduce errors into the grammar. Consequently, it was necessary to introduce a new keyword into the grammar in order to disambiguate. Without this, yacc would make incorrect shift/reduce and reduce/reduce decisions and fail to parse the intended assembly. Changes in assembly: 1. The "implementation" keyword is superfluous but still supported. You can use it as a sentry which will ensure there are no remaining up reference types. However, this is optional as those checks are also performed elsewhere. 2. Parameter attributes are now implemented using an at sign to indicate the attribute. The attributes are placed after the type in a function declaration or after the argument value in a function call. For example: i8 @sext %myfunc(i16 @zext) call i8 @sext %myfunc(i16 @zext %someVal) The facility is available for supporting additional attributes and they can be combined using the @(attr1,attr2,attr3) syntax. Right now the only two supported are @sext and @zext 3. Functions must now be defined with the "define" keyword which is analagous to the "declare" keyword for function declarations. The introduction of this keyword disambiguates situations where a named result type is confused with a new type or gvar definition. For example: %MyType = type i16 %MyType %func(%MyType) { ... } With the introduction of optional parameter attributes between the function name and the function result type, yacc will pick the wrong rule to reduce unless it is disambiguated with "define" before the function definition, as in: define %MyType @zext %func(%MyType %someArg) { ... } git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32781 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser/Lexer.l')
-rw-r--r--lib/AsmParser/Lexer.l12
1 files changed, 4 insertions, 8 deletions
diff --git a/lib/AsmParser/Lexer.l b/lib/AsmParser/Lexer.l
index 2f681a6..58d21c3 100644
--- a/lib/AsmParser/Lexer.l
+++ b/lib/AsmParser/Lexer.l
@@ -235,14 +235,10 @@ x86_fastcallcc { return X86_FASTCALLCC_TOK; }
void { RET_TY(Type::VoidTy, VOID); }
bool { RET_TY(Type::BoolTy, BOOL); }
-sbyte { RET_TY(Type::SByteTy, SBYTE); }
-ubyte { RET_TY(Type::UByteTy, UBYTE); }
-short { RET_TY(Type::ShortTy, SHORT); }
-ushort { RET_TY(Type::UShortTy,USHORT);}
-int { RET_TY(Type::IntTy, INT); }
-uint { RET_TY(Type::UIntTy, UINT); }
-long { RET_TY(Type::LongTy, LONG); }
-ulong { RET_TY(Type::ULongTy, ULONG); }
+i8 { RET_TY(Type::Int8Ty, INT8); }
+i16 { RET_TY(Type::Int16Ty, INT16); }
+i32 { RET_TY(Type::Int32Ty, INT32); }
+i64 { RET_TY(Type::Int64Ty, INT64); }
float { RET_TY(Type::FloatTy, FLOAT); }
double { RET_TY(Type::DoubleTy,DOUBLE);}
label { RET_TY(Type::LabelTy, LABEL); }