summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2006-10-18 02:21:12 +0000
committerOwen Anderson <resistor@mac.com>2006-10-18 02:21:12 +0000
commite223754ff4345ba339613b33b1e02ca984179c4b (patch)
tree83ddf13b06b03245479ea3dbdbd0da51ddac2fe7 /llvm/lib
parent0ff257353cef2099cb072343df97bf5235fcbbf7 (diff)
downloadbcm5719-llvm-e223754ff4345ba339613b33b1e02ca984179c4b.tar.gz
bcm5719-llvm-e223754ff4345ba339613b33b1e02ca984179c4b.zip
Add support for the new "target data" information in .ll files. This provides
a better encoding of the targets data layout, rather than trying to guess it from the endianness and pointersize like before. llvm-svn: 31030
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/AsmParser/Lexer.l1
-rw-r--r--llvm/lib/AsmParser/llvmAsmParser.y6
-rw-r--r--llvm/lib/VMCore/AsmWriter.cpp3
3 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/AsmParser/Lexer.l b/llvm/lib/AsmParser/Lexer.l
index 635318c40ce..af61a679fb1 100644
--- a/llvm/lib/AsmParser/Lexer.l
+++ b/llvm/lib/AsmParser/Lexer.l
@@ -210,6 +210,7 @@ triple { return TRIPLE; }
deplibs { return DEPLIBS; }
endian { return ENDIAN; }
pointersize { return POINTERSIZE; }
+data { return DATA; }
little { return LITTLE; }
big { return BIG; }
volatile { return VOLATILE; }
diff --git a/llvm/lib/AsmParser/llvmAsmParser.y b/llvm/lib/AsmParser/llvmAsmParser.y
index e57ca4ca5d4..2842f27f1b8 100644
--- a/llvm/lib/AsmParser/llvmAsmParser.y
+++ b/llvm/lib/AsmParser/llvmAsmParser.y
@@ -1068,6 +1068,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
%token DEPLIBS CALL TAIL ASM_TOK MODULE SIDEEFFECT
%token CC_TOK CCC_TOK CSRETCC_TOK FASTCC_TOK COLDCC_TOK
%token X86_STDCALLCC_TOK X86_FASTCALLCC_TOK
+%token DATA
%type <UIntVal> OptCallingConv
// Basic Block Terminating Operators
@@ -1873,6 +1874,11 @@ TargetDefinition : ENDIAN '=' BigOrLittle {
free($3);
CHECK_FOR_ERROR
};
+ | DATA '=' STRINGCONSTANT {
+ CurModule.CurrentModule->setDataLayout($3);
+ free($3);
+ CHECK_FOR_ERROR
+ };
LibrariesDefinition : '[' LibList ']';
diff --git a/llvm/lib/VMCore/AsmWriter.cpp b/llvm/lib/VMCore/AsmWriter.cpp
index 6b08266c312..aedb2c4040e 100644
--- a/llvm/lib/VMCore/AsmWriter.cpp
+++ b/llvm/lib/VMCore/AsmWriter.cpp
@@ -781,6 +781,9 @@ void AssemblyWriter::printModule(const Module *M) {
M->getModuleIdentifier().find('\n') == std::string::npos)
Out << "; ModuleID = '" << M->getModuleIdentifier() << "'\n";
+ if (!M->getDataLayout().empty())
+ Out << "target data = \"" << M->getDataLayout() << "\"\n";
+
switch (M->getEndianness()) {
case Module::LittleEndian: Out << "target endian = little\n"; break;
case Module::BigEndian: Out << "target endian = big\n"; break;
OpenPOWER on IntegriCloud