R600/SI: Using SGPRs is illegal for instructions that read carry-out from VCC
[oota-llvm.git] / lib / Object / IRObjectFile.cpp
index fb511ca28f835d76c42166f3aec45ead68e49436..d5ea80d1d0e326c79d6dc4f6bbc08373bf10d8a9 100644 (file)
 
 #include "llvm/Bitcode/ReaderWriter.h"
 #include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Mangler.h"
 #include "llvm/IR/Module.h"
 #include "llvm/Object/IRObjectFile.h"
+#include "llvm/Support/raw_ostream.h"
 using namespace llvm;
 using namespace object;
 
@@ -26,6 +28,13 @@ IRObjectFile::IRObjectFile(MemoryBuffer *Object, error_code &EC,
     return;
 
   M.reset(MOrErr.get());
+
+  // If we have a DataLayout, setup a mangler.
+  const DataLayout *DL = M->getDataLayout();
+  if (!DL)
+    return;
+
+  Mang.reset(new Mangler(DL));
 }
 
 static const GlobalValue &getGV(DataRefImpl &Symb) {
@@ -85,9 +94,13 @@ void IRObjectFile::moveSymbolNext(DataRefImpl &Symb) const {
 
 error_code IRObjectFile::printSymbolName(raw_ostream &OS,
                                          DataRefImpl Symb) const {
-  // FIXME: This should use the Mangler.
   const GlobalValue &GV = getGV(Symb);
-  OS << GV.getName();
+
+  if (Mang)
+    Mang->getNameWithPrefix(OS, &GV, false);
+  else
+    OS << GV.getName();
+
   return object_error::success;
 }
 
@@ -131,9 +144,9 @@ basic_symbol_iterator IRObjectFile::symbol_end_impl() const {
 ErrorOr<SymbolicFile *> llvm::object::SymbolicFile::createIRObjectFile(
     MemoryBuffer *Object, LLVMContext &Context, bool BufferOwned) {
   error_code EC;
-  OwningPtr<IRObjectFile> Ret(
+  std::unique_ptr<IRObjectFile> Ret(
       new IRObjectFile(Object, EC, Context, BufferOwned));
   if (EC)
     return EC;
-  return Ret.take();
+  return Ret.release();
 }