diff options
author | Chris Lattner <sabre@nondot.org> | 2003-04-22 19:07:06 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-04-22 19:07:06 +0000 |
commit | 20126130406ce67eb2195fe2fdbc1c2e5661e573 (patch) | |
tree | 122475c58199dc8a2c514068e68d95c491cf044b /llvm | |
parent | f234e9975af694c81c5bd884353d4e1169a65faf (diff) | |
download | bcm5719-llvm-20126130406ce67eb2195fe2fdbc1c2e5661e573.tar.gz bcm5719-llvm-20126130406ce67eb2195fe2fdbc1c2e5661e573.zip |
Allow information about the target to be specified in the .ll file
llvm-svn: 5843
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/AsmParser/Lexer.l | 6 | ||||
-rw-r--r-- | llvm/lib/AsmParser/llvmAsmParser.y | 23 |
2 files changed, 28 insertions, 1 deletions
diff --git a/llvm/lib/AsmParser/Lexer.l b/llvm/lib/AsmParser/Lexer.l index 47c067ba8ce..92d4f3424f8 100644 --- a/llvm/lib/AsmParser/Lexer.l +++ b/llvm/lib/AsmParser/Lexer.l @@ -19,6 +19,7 @@ %{ #include "ParserInternals.h" +#include "llvm/Module.h" #include <list> #include "llvmAsmParser.h" #include <ctype.h> @@ -176,6 +177,11 @@ null { return NULL_TOK; } to { return TO; } except { return EXCEPT; } not { return NOT; } /* Deprecated, turned into XOR */ +target { return TARGET; } +endian { return ENDIAN; } +pointersize { return POINTERSIZE; } +little { return LITTLE; } +big { return BIG; } void { llvmAsmlval.PrimType = Type::VoidTy ; return VOID; } bool { llvmAsmlval.PrimType = Type::BoolTy ; return BOOL; } diff --git a/llvm/lib/AsmParser/llvmAsmParser.y b/llvm/lib/AsmParser/llvmAsmParser.y index 8309c91d5ed..19cda682a16 100644 --- a/llvm/lib/AsmParser/llvmAsmParser.y +++ b/llvm/lib/AsmParser/llvmAsmParser.y @@ -635,6 +635,7 @@ Module *RunVMAsmParser(const std::string &Filename, FILE *F) { Instruction::TermOps TermOpVal; Instruction::MemoryOps MemOpVal; Instruction::OtherOps OtherOpVal; + Module::Endianness Endianness; } %type <ModuleVal> Module FunctionList @@ -653,6 +654,7 @@ Module *RunVMAsmParser(const std::string &Filename, FILE *F) { %type <JumpTable> JumpTable %type <BoolVal> GlobalType // GLOBAL or CONSTANT? %type <Linkage> OptLinkage +%type <Endianness> BigOrLittle // ValueRef - Unresolved reference to a definition or BB %type <ValIDVal> ValueRef ConstValueRef SymbolicValueRef @@ -683,7 +685,7 @@ Module *RunVMAsmParser(const std::string &Filename, FILE *F) { %token IMPLEMENTATION TRUE FALSE BEGINTOK ENDTOK DECLARE GLOBAL CONSTANT %token TO EXCEPT DOTDOTDOT NULL_TOK CONST INTERNAL LINKONCE APPENDING -%token OPAQUE NOT EXTERNAL +%token OPAQUE NOT EXTERNAL TARGET ENDIAN POINTERSIZE LITTLE BIG // Basic Block Terminating Operators %token <TermOpVal> RET BR SWITCH @@ -1177,10 +1179,29 @@ ConstPool : ConstPool OptAssign CONST ConstVal { } delete $5; } + | ConstPool TARGET TargetDefinition { + } | /* empty: end of list */ { }; + +BigOrLittle : BIG { $$ = Module::BigEndian; }; +BigOrLittle : LITTLE { $$ = Module::LittleEndian; }; + +TargetDefinition : ENDIAN '=' BigOrLittle { + CurModule.CurrentModule->setEndianness($3); + } + | POINTERSIZE '=' EUINT64VAL { + if ($3 == 32) + CurModule.CurrentModule->setPointerSize(Module::Pointer32); + else if ($3 == 64) + CurModule.CurrentModule->setPointerSize(Module::Pointer64); + else + ThrowException("Invalid pointer size: '" + utostr($3) + "'!"); + }; + + //===----------------------------------------------------------------------===// // Rules to match Function Headers //===----------------------------------------------------------------------===// |