PR20038: DebugInfo missing DIEs for some concrete variables.
[oota-llvm.git] / lib / Target / X86 / X86AsmPrinter.h
index b9c79fee4b6085a40b3c309cd6cd41834e1e827c..e4eef5dbd79642208558c7313187f8965aeb8aa4 100644 (file)
@@ -1,4 +1,4 @@
-//===-- X86AsmPrinter.h - Convert X86 LLVM code to Intel assembly ---------===//
+//===-- X86AsmPrinter.h - X86 implementation of AsmPrinter ------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -6,73 +6,51 @@
 // License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
-//
-// This file the shared super class printer that converts from our internal
-// representation of machine-dependent LLVM code to Intel and AT&T format
-// assembly language.  This printer is the output mechanism used by `llc'.
-//
-//===----------------------------------------------------------------------===//
 
 #ifndef X86ASMPRINTER_H
 #define X86ASMPRINTER_H
 
-#include "X86.h"
-#include "X86MachineFunctionInfo.h"
-#include "X86TargetMachine.h"
-#include "llvm/ADT/StringSet.h"
+#include "X86Subtarget.h"
 #include "llvm/CodeGen/AsmPrinter.h"
-#include "llvm/CodeGen/DwarfWriter.h"
-#include "llvm/CodeGen/MachineModuleInfo.h"
-#include "llvm/Support/Compiler.h"
+#include "llvm/CodeGen/StackMaps.h"
+#include "llvm/Target/TargetMachine.h"
 
 namespace llvm {
+class MCStreamer;
+class MCSymbol;
+
+class LLVM_LIBRARY_VISIBILITY X86AsmPrinter : public AsmPrinter {
+  const X86Subtarget *Subtarget;
+  StackMaps SM;
 
-struct VISIBILITY_HIDDEN X86SharedAsmPrinter : public AsmPrinter {
-  DwarfWriter DW;
-  MachineModuleInfo *MMI;
+  void GenerateExportDirective(const MCSymbol *Sym, bool IsData);
 
-  X86SharedAsmPrinter(std::ostream &O, X86TargetMachine &TM,
-                      const TargetAsmInfo *T)
-    : AsmPrinter(O, TM, T), DW(O, this, T), MMI(0) {
+ public:
+  explicit X86AsmPrinter(TargetMachine &TM, MCStreamer &Streamer)
+    : AsmPrinter(TM, Streamer), SM(*this) {
     Subtarget = &TM.getSubtarget<X86Subtarget>();
   }
 
-  // We have to propagate some information about MachineFunction to
-  // AsmPrinter. It's ok, when we're printing the function, since we have
-  // access to MachineFunction and can get the appropriate MachineFunctionInfo.
-  // Unfortunately, this is not possible when we're printing reference to
-  // Function (e.g. calling it and so on). Even more, there is no way to get the
-  // corresponding MachineFunctions: it can even be not created at all. That's
-  // why we should use additional structure, when we're collecting all necessary
-  // information.
-  //
-  // This structure is using e.g. for name decoration for stdcall & fastcall'ed
-  // function, since we have to use arguments' size for decoration.
-  typedef std::map<const Function*, X86MachineFunctionInfo> FMFInfoMap;
-  FMFInfoMap FunctionInfoMap;
+  const char *getPassName() const override {
+    return "X86 Assembly / Object Emitter";
+  }
 
-  void decorateName(std::string& Name, const GlobalValue* GV);
+  const X86Subtarget &getSubtarget() const { return *Subtarget; }
 
-  bool doInitialization(Module &M);
-  bool doFinalization(Module &M);
+  void EmitStartOfAsmFile(Module &M) override;
 
-  void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.setPreservesAll();
-    if (Subtarget->isTargetDarwin() ||
-        Subtarget->isTargetELF() ||
-        Subtarget->isTargetCygMing()) {
-      AU.addRequired<MachineModuleInfo>();
-    }
-    AsmPrinter::getAnalysisUsage(AU);
-  }
+  void EmitEndOfAsmFile(Module &M) override;
 
-  const X86Subtarget *Subtarget;
+  void EmitInstruction(const MachineInstr *MI) override;
 
-  // Necessary for Darwin to print out the apprioriate types of linker stubs
-  StringSet<> FnStubs, GVStubs, LinkOnceStubs;
+  bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
+                       unsigned AsmVariant, const char *ExtraCode,
+                       raw_ostream &OS) override;
+  bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
+                             unsigned AsmVariant, const char *ExtraCode,
+                             raw_ostream &OS) override;
 
-  // Necessary for dllexport support
-  StringSet<> DLLExportedFns, DLLExportedGVs;
+  bool runOnMachineFunction(MachineFunction &F) override;
 };
 
 } // end namespace llvm