diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2011-02-20 12:57:14 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2011-02-20 12:57:14 +0000 | 
| commit | cf099d11218cb6f6c5cce947d6738e347f07fb12 (patch) | |
| tree | d2b61ce94e654cb01a254d2195259db5f9cc3f3c /lib/Bitcode/Writer/BitcodeWriter.cpp | |
| parent | 49011b52fcba02a6051957b84705159f52fae4e4 (diff) | |
Notes
Diffstat (limited to 'lib/Bitcode/Writer/BitcodeWriter.cpp')
| -rw-r--r-- | lib/Bitcode/Writer/BitcodeWriter.cpp | 32 | 
1 files changed, 21 insertions, 11 deletions
diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp index 7b6fc6cd928df..f8ef8c668c47a 100644 --- a/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -26,7 +26,8 @@  #include "llvm/Support/ErrorHandling.h"  #include "llvm/Support/MathExtras.h"  #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Program.h" +#include <cctype>  using namespace llvm;  /// These are manifest constants used by the bitcode writer. They do not need to @@ -211,6 +212,7 @@ static void WriteTypeTable(const ValueEnumerator &VE, BitstreamWriter &Stream) {      case Type::LabelTyID:  Code = bitc::TYPE_CODE_LABEL;  break;      case Type::OpaqueTyID: Code = bitc::TYPE_CODE_OPAQUE; break;      case Type::MetadataTyID: Code = bitc::TYPE_CODE_METADATA; break; +    case Type::X86_MMXTyID: Code = bitc::TYPE_CODE_X86_MMX; break;      case Type::IntegerTyID:        // INTEGER: [width]        Code = bitc::TYPE_CODE_INTEGER; @@ -402,7 +404,8 @@ static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE,      unsigned AbbrevToUse = 0;      // GLOBALVAR: [type, isconst, initid, -    //             linkage, alignment, section, visibility, threadlocal] +    //             linkage, alignment, section, visibility, threadlocal, +    //             unnamed_addr]      Vals.push_back(VE.getTypeID(GV->getType()));      Vals.push_back(GV->isConstant());      Vals.push_back(GV->isDeclaration() ? 0 : @@ -411,9 +414,11 @@ static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE,      Vals.push_back(Log2_32(GV->getAlignment())+1);      Vals.push_back(GV->hasSection() ? SectionMap[GV->getSection()] : 0);      if (GV->isThreadLocal() || -        GV->getVisibility() != GlobalValue::DefaultVisibility) { +        GV->getVisibility() != GlobalValue::DefaultVisibility || +        GV->hasUnnamedAddr()) {        Vals.push_back(getEncodedVisibility(GV));        Vals.push_back(GV->isThreadLocal()); +      Vals.push_back(GV->hasUnnamedAddr());      } else {        AbbrevToUse = SimpleGVarAbbrev;      } @@ -425,7 +430,7 @@ static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE,    // Emit the function proto information.    for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F) {      // FUNCTION:  [type, callingconv, isproto, paramattr, -    //             linkage, alignment, section, visibility, gc] +    //             linkage, alignment, section, visibility, gc, unnamed_addr]      Vals.push_back(VE.getTypeID(F->getType()));      Vals.push_back(F->getCallingConv());      Vals.push_back(F->isDeclaration()); @@ -435,6 +440,7 @@ static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE,      Vals.push_back(F->hasSection() ? SectionMap[F->getSection()] : 0);      Vals.push_back(getEncodedVisibility(F));      Vals.push_back(F->hasGC() ? GCMap[F->getGC()] : 0); +    Vals.push_back(F->hasUnnamedAddr());      unsigned AbbrevToUse = 0;      Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse); @@ -464,9 +470,10 @@ static uint64_t GetOptimizationFlags(const Value *V) {        Flags |= 1 << bitc::OBO_NO_SIGNED_WRAP;      if (OBO->hasNoUnsignedWrap())        Flags |= 1 << bitc::OBO_NO_UNSIGNED_WRAP; -  } else if (const SDivOperator *Div = dyn_cast<SDivOperator>(V)) { -    if (Div->isExact()) -      Flags |= 1 << bitc::SDIV_EXACT; +  } else if (const PossiblyExactOperator *PEO = +               dyn_cast<PossiblyExactOperator>(V)) { +    if (PEO->isExact()) +      Flags |= 1 << bitc::PEO_EXACT;    }    return Flags; @@ -1641,9 +1648,12 @@ void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {  /// WriteBitcodeToStream - Write the specified module to the specified output  /// stream.  void llvm::WriteBitcodeToStream(const Module *M, BitstreamWriter &Stream) { -  // If this is darwin, emit a file header and trailer if needed. -  bool isDarwin = M->getTargetTriple().find("-darwin") != std::string::npos; -  if (isDarwin) +  // If this is darwin or another generic macho target, emit a file header and +  // trailer if needed. +  bool isMacho = +    M->getTargetTriple().find("-darwin") != std::string::npos || +    M->getTargetTriple().find("-macho") != std::string::npos; +  if (isMacho)      EmitDarwinBCHeader(Stream, M->getTargetTriple());    // Emit the file header. @@ -1657,6 +1667,6 @@ void llvm::WriteBitcodeToStream(const Module *M, BitstreamWriter &Stream) {    // Emit the module.    WriteModule(M, Stream); -  if (isDarwin) +  if (isMacho)      EmitDarwinBCTrailer(Stream, Stream.getBuffer().size());  }  | 
