refactor code so that LLVMTargetMachine creates the asmstreamer and

mccontext instead of having AsmPrinter do it.  This allows other 
types of MCStreamer's to be passed in.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95155 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2010-02-02 23:37:42 +00:00
parent 9f34dd305b
commit 56591ab218
19 changed files with 97 additions and 56 deletions
+20 -3
View File
@@ -21,6 +21,9 @@
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCStreamer.h"
#include "llvm/Target/TargetData.h"
#include "llvm/Target/TargetRegistry.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Support/CommandLine.h"
@@ -121,10 +124,24 @@ LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
case CGFT_ObjectFile:
return CGFT_ErrorOccurred;
case CGFT_AssemblyFile: {
MCContext *Context = new MCContext();
MCStreamer *AsmStreamer =
createAsmStreamer(*Context, Out, *getMCAsmInfo(),
getTargetData()->isLittleEndian(),
getVerboseAsm(),
/*instprinter*/0,
/*codeemitter*/0);
// Create the AsmPrinter, which takes ownership of Context and AsmStreamer
// if successful.
FunctionPass *Printer =
getTarget().createAsmPrinter(Out, *this, getMCAsmInfo(),
getVerboseAsm());
if (Printer == 0) return CGFT_ErrorOccurred;
getTarget().createAsmPrinter(Out, *this, *Context, *AsmStreamer,
getMCAsmInfo());
if (Printer == 0) {
delete AsmStreamer;
delete Context;
return CGFT_ErrorOccurred;
}
PM.add(Printer);
break;
}