- 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, *Context, *AsmStreamer,
- getMCAsmInfo());
- if (Printer == 0) {
- delete AsmStreamer;
- delete Context;
- return CGFT_ErrorOccurred;
- }
- PM.add(Printer);
+ MCInstPrinter *InstPrinter =
+ getTarget().createMCInstPrinter(MAI.getAssemblerDialect(), MAI);
+
+ // Create a code emitter if asked to show the encoding.
+ //
+ // FIXME: These are currently leaked.
+ MCCodeEmitter *MCE = 0;
+ if (ShowMCEncoding)
+ MCE = getTarget().createCodeEmitter(*this, *Context);
+
+ AsmStreamer.reset(createAsmStreamer(*Context, Out,
+ getTargetData()->isLittleEndian(),
+ getVerboseAsm(), InstPrinter,
+ MCE, ShowMCInst));