give MCAsmStreamer a TargetAsmInfo.
authorChris Lattner <sabre@nondot.org>
Mon, 17 Aug 2009 04:23:44 +0000 (04:23 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 17 Aug 2009 04:23:44 +0000 (04:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79222 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCStreamer.h
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/MC/MCAsmStreamer.cpp
tools/llvm-mc/llvm-mc.cpp

index 434288eb1884fcffc43044229a94422c64f5edf0..b8399d0115a805d7af390b329cd7051ba4ff81f2 100644 (file)
@@ -25,6 +25,7 @@ namespace llvm {
   class MCSymbol;
   class StringRef;
   class raw_ostream;
+  class TargetAsmInfo;
 
   /// MCStreamer - Streaming machine code generation interface.  This interface
   /// is intended to provide a programatic interface that is very similar to the
@@ -232,7 +233,7 @@ namespace llvm {
   ///
   /// \arg AP - If given, an AsmPrinter to use for printing instructions.
   MCStreamer *createAsmStreamer(MCContext &Ctx, raw_ostream &OS,
-                                AsmPrinter *AP = 0);
+                                const TargetAsmInfo &TAI, AsmPrinter *AP = 0);
 
   // FIXME: These two may end up getting rolled into a single
   // createObjectStreamer interface, which implements the assembler backend, and
index 02ff2f0b50ad8bcb4d1cfc8b05a24d2e94ca43f6..d46043b29cd08695e1ada9276dac6e5174a12687 100644 (file)
@@ -59,7 +59,7 @@ AsmPrinter::AsmPrinter(formatted_raw_ostream &o, TargetMachine &tm,
     TM(tm), TAI(T), TRI(tm.getRegisterInfo()),
 
     OutContext(*new MCContext()),
-    OutStreamer(*createAsmStreamer(OutContext, O)),
+    OutStreamer(*createAsmStreamer(OutContext, O, *T, this)),
 
     LastMI(0), LastFn(0), Counter(~0U),
     PrevDLT(0, ~0U, ~0U) {
index 0eed1206aa1be539b0bafb8225088e0d93247bf7..db39fb8b1cbc79c98e4e803bd59cf09b4bf818d1 100644 (file)
@@ -22,11 +22,14 @@ namespace {
 
 class MCAsmStreamer : public MCStreamer {
   raw_ostream &OS;
+  const TargetAsmInfo &TAI;
   AsmPrinter *Printer;
   MCSection *CurSection;
 public:
-  MCAsmStreamer(MCContext &Context, raw_ostream &_OS, AsmPrinter *_AsmPrinter)
-    : MCStreamer(Context), OS(_OS), Printer(_AsmPrinter), CurSection(0) {}
+  MCAsmStreamer(MCContext &Context, raw_ostream &_OS, const TargetAsmInfo &tai,
+                AsmPrinter *_AsmPrinter)
+    : MCStreamer(Context), OS(_OS), TAI(tai), Printer(_AsmPrinter),
+      CurSection(0) {}
   ~MCAsmStreamer() {}
 
   /// @name MCStreamer Interface
@@ -293,6 +296,6 @@ void MCAsmStreamer::Finish() {
 }
     
 MCStreamer *llvm::createAsmStreamer(MCContext &Context, raw_ostream &OS,
-                                    AsmPrinter *AP) {
-  return new MCAsmStreamer(Context, OS, AP);
+                                    const TargetAsmInfo &TAI, AsmPrinter *AP) {
+  return new MCAsmStreamer(Context, OS, TAI, AP);
 }
index 7c57f35699884fc40067347d58dde1f338ddae5b..a9ba8bd73a3e93043dd25997373e57daf089f484 100644 (file)
@@ -211,21 +211,21 @@ static int AssembleInput(const char *ProgName) {
   if (!Out)
     return 1;
 
-  // See if we can get an asm printer.
-  OwningPtr<AsmPrinter> AP(0);
 
   // FIXME: We shouldn't need to do this (and link in codegen).
   OwningPtr<TargetMachine> TM(TheTarget->createTargetMachine(TripleName, ""));
-  const TargetAsmInfo *TAI = 0;
 
-  if (TM) {
-    TAI = TheTarget->createAsmInfo(TripleName);
-    assert(TAI && "Unable to create target asm info!");
-
-    AP.reset(TheTarget->createAsmPrinter(*Out, *TM, TAI, true));
+  if (!TM) {
+    errs() << ProgName << ": error: could not create target for triple '"
+           << TripleName << "'.\n";
+    return 1;
   }
 
-  OwningPtr<MCStreamer> Str(createAsmStreamer(Ctx, *Out, AP.get()));
+  const TargetAsmInfo *TAI = TheTarget->createAsmInfo(TripleName);
+  assert(TAI && "Unable to create target asm info!");
+
+  OwningPtr<AsmPrinter> AP(TheTarget->createAsmPrinter(*Out, *TM, TAI, true));
+  OwningPtr<MCStreamer> Str(createAsmStreamer(Ctx, *Out, *TAI, AP.get()));
 
   // FIXME: Target hook & command line option for initial section.
   Str.get()->SwitchSection(MCSectionMachO::Create("__TEXT","__text",