diff options
Diffstat (limited to 'lib/Bitcode/Writer/ValueEnumerator.cpp')
| -rw-r--r-- | lib/Bitcode/Writer/ValueEnumerator.cpp | 44 | 
1 files changed, 39 insertions, 5 deletions
diff --git a/lib/Bitcode/Writer/ValueEnumerator.cpp b/lib/Bitcode/Writer/ValueEnumerator.cpp index 9ae9905b9f1db..1ed9004eb5a16 100644 --- a/lib/Bitcode/Writer/ValueEnumerator.cpp +++ b/lib/Bitcode/Writer/ValueEnumerator.cpp @@ -19,6 +19,8 @@  #include "llvm/Module.h"  #include "llvm/ValueSymbolTable.h"  #include "llvm/Instructions.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h"  #include <algorithm>  using namespace llvm; @@ -107,7 +109,6 @@ ValueEnumerator::ValueEnumerator(const Module *M) {    OptimizeConstants(FirstConstant, Values.size());  } -  unsigned ValueEnumerator::getInstructionID(const Instruction *Inst) const {    InstructionMapType::const_iterator I = InstructionMap.find(Inst);    assert(I != InstructionMap.end() && "Instruction is not mapped!"); @@ -130,6 +131,43 @@ unsigned ValueEnumerator::getValueID(const Value *V) const {    return I->second-1;  } +void ValueEnumerator::dump() const { +  print(dbgs(), ValueMap, "Default"); +  dbgs() << '\n'; +  print(dbgs(), MDValueMap, "MetaData"); +  dbgs() << '\n'; +} + +void ValueEnumerator::print(raw_ostream &OS, const ValueMapType &Map, +                            const char *Name) const { + +  OS << "Map Name: " << Name << "\n"; +  OS << "Size: " << Map.size() << "\n"; +  for (ValueMapType::const_iterator I = Map.begin(), +         E = Map.end(); I != E; ++I) { + +    const Value *V = I->first; +    if (V->hasName()) +      OS << "Value: " << V->getName(); +    else +      OS << "Value: [null]\n"; +    V->dump(); + +    OS << " Uses(" << std::distance(V->use_begin(),V->use_end()) << "):"; +    for (Value::const_use_iterator UI = V->use_begin(), UE = V->use_end(); +         UI != UE; ++UI) { +      if (UI != V->use_begin()) +        OS << ","; +      if((*UI)->hasName()) +        OS << " " << (*UI)->getName(); +      else +        OS << " [null]"; + +    } +    OS <<  "\n\n"; +  } +} +  // Optimize constant ordering.  namespace {    struct CstSortPredicate { @@ -283,10 +321,6 @@ void ValueEnumerator::EnumerateValue(const Value *V) {    if (const Constant *C = dyn_cast<Constant>(V)) {      if (isa<GlobalValue>(C)) {        // Initializers for globals are handled explicitly elsewhere. -    } else if (isa<ConstantArray>(C) && cast<ConstantArray>(C)->isString()) { -      // Do not enumerate the initializers for an array of simple characters. -      // The initializers just pollute the value table, and we emit the strings -      // specially.      } else if (C->getNumOperands()) {        // If a constant has operands, enumerate them.  This makes sure that if a        // constant has uses (for example an array of const ints), that they are  | 
