std::unique_ptrify the MCStreamer argument to createAsmPrinter

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie
2015-01-18 20:29:04 +00:00
parent 676db0a373
commit 341a7e245e
19 changed files with 89 additions and 68 deletions

View File

@@ -23,6 +23,7 @@
#include "llvm/ADT/Triple.h"
#include "llvm/Support/CodeGen.h"
#include <cassert>
#include <memory>
#include <string>
namespace llvm {
@@ -99,8 +100,11 @@ namespace llvm {
Reloc::Model RM,
CodeModel::Model CM,
CodeGenOpt::Level OL);
typedef AsmPrinter *(*AsmPrinterCtorTy)(TargetMachine &TM,
MCStreamer &Streamer);
// If it weren't for layering issues (this header is in llvm/Support, but
// depends on MC?) this should take the Streamer by value rather than rvalue
// reference.
typedef AsmPrinter *(*AsmPrinterCtorTy)(
TargetMachine &TM, std::unique_ptr<MCStreamer> &&Streamer);
typedef MCAsmBackend *(*MCAsmBackendCtorTy)(const Target &T,
const MCRegisterInfo &MRI,
StringRef TT,
@@ -376,10 +380,11 @@ namespace llvm {
/// createAsmPrinter - Create a target specific assembly printer pass. This
/// takes ownership of the MCStreamer object.
AsmPrinter *createAsmPrinter(TargetMachine &TM, MCStreamer &Streamer) const{
AsmPrinter *createAsmPrinter(TargetMachine &TM,
std::unique_ptr<MCStreamer> Streamer) const {
if (!AsmPrinterCtorFn)
return nullptr;
return AsmPrinterCtorFn(TM, Streamer);
return AsmPrinterCtorFn(TM, std::move(Streamer));
}
MCDisassembler *createMCDisassembler(const MCSubtargetInfo &STI,
@@ -1121,8 +1126,9 @@ namespace llvm {
}
private:
static AsmPrinter *Allocator(TargetMachine &TM, MCStreamer &Streamer) {
return new AsmPrinterImpl(TM, Streamer);
static AsmPrinter *Allocator(TargetMachine &TM,
std::unique_ptr<MCStreamer> &&Streamer) {
return new AsmPrinterImpl(TM, std::move(Streamer));
}
};