Add DebugLoc to the getNode() methods.
[oota-llvm.git] / include / llvm / CodeGen / AsmPrinter.h
index 1bd2d51775685e816b7e71de95a26310437e5675..cdc795162579e0043a349d75876e807df7b1edfe 100644 (file)
 
 #include "llvm/CodeGen/MachineFunctionPass.h"
 #include "llvm/Support/DataTypes.h"
+#include "llvm/ADT/DenseMap.h"
 #include <set>
 
 namespace llvm {
+  class GCStrategy;
   class Constant;
   class ConstantArray;
+  class ConstantInt;
+  class ConstantStruct;
+  class ConstantVector;
+  class GCMetadataPrinter;
   class GlobalVariable;
-  class GlobalAlias;
   class MachineConstantPoolEntry;
   class MachineConstantPoolValue;
-  class MachineModuleInfo;
+  class DwarfWriter;
   class Mangler;
+  class Section;
   class TargetAsmInfo;
   class Type;
+  class raw_ostream;
 
   /// AsmPrinter - This class is intended to be used as a driving class for all
   /// asm writers.
@@ -44,11 +51,16 @@ namespace llvm {
     ///
     unsigned FunctionNumber;
 
-    /// MachineModuleInfo - This is needed because printDeclare() has to insert
-    /// DebugVariable entries into the dwarf table. This is a short term hack
+    /// DW -This is needed because printDeclare() has to insert
+    /// DbgVariable entries into the dwarf table. This is a short term hack
     /// that ought be fixed soon.
-    MachineModuleInfo *MMI;
-
+    DwarfWriter *DW;
+    
+    // GCMetadataPrinters - The garbage collection metadata printer table.
+    typedef DenseMap<GCStrategy*,GCMetadataPrinter*> gcp_map_type;
+    typedef gcp_map_type::iterator gcp_iterator;
+    gcp_map_type GCMetadataPrinters;
+    
   protected:
     // Necessary for external weak linkage support
     std::set<const GlobalValue*> ExtWeakSymbols;
@@ -56,7 +68,7 @@ namespace llvm {
   public:
     /// Output stream on which we're printing assembly code.
     ///
-    std::ostream &O;
+    raw_ostream &O;
 
     /// Target machine description.
     ///
@@ -82,15 +94,18 @@ namespace llvm {
     /// CurrentSection - The current section we are emitting to.  This is
     /// controlled and used by the SwitchSection method.
     std::string CurrentSection;
+    const Section* CurrentSection_;
 
     /// IsInTextSection - True if the current section we are emitting to is a
     /// text section.
     bool IsInTextSection;
   
   protected:
-    AsmPrinter(std::ostream &o, TargetMachine &TM, const TargetAsmInfo *T);
+    AsmPrinter(raw_ostream &o, TargetMachine &TM, const TargetAsmInfo *T);
     
   public:
+    virtual ~AsmPrinter();
+    
     /// SwitchToTextSection - Switch to the specified section of the executable
     /// if we are not already in it!  If GV is non-null and if the global has an
     /// explicitly requested section, we switch to the section indicated for the
@@ -116,7 +131,11 @@ namespace llvm {
     /// are the same.
     ///
     void SwitchToDataSection(const char *NewSection, const GlobalValue *GV = NULL);
-    
+
+    /// SwitchToSection - Switch to the specified section of the executable if
+    /// we are not already in it!
+    void SwitchToSection(const Section* NS);
+
     /// getGlobalLinkName - Returns the asm/link name of of the specified
     /// global variable.  Should be overridden by each target asm printer to
     /// generate the appropriate value.
@@ -168,12 +187,6 @@ namespace llvm {
                                        unsigned AsmVariant, 
                                        const char *ExtraCode);
     
-    /// getSectionForFunction - Return the section that we should emit the
-    /// specified function body into.  This defaults to 'TextSection'.  This
-    /// should most likely be overridden by the target to put linkonce/weak
-    /// functions into special sections.
-    virtual std::string getSectionForFunction(const Function &F) const;
-    
     /// SetupMachineFunction - This should be called when a new MachineFunction
     /// is being processed from runOnMachineFunction.
     void SetupMachineFunction(MachineFunction &MF);
@@ -351,12 +364,19 @@ namespace llvm {
     /// this is suported by the target.
     void printVisibility(const std::string& Name, unsigned Visibility) const;
 
+    /// printOffset - This is just convenient handler for printing offsets.
+    void printOffset(int64_t Offset) const;
+
   private:
+    const GlobalValue *findGlobalValue(const Constant* CV);
     void EmitLLVMUsedList(Constant *List);
     void EmitXXStructorList(Constant *List);
-    void EmitConstantPool(unsigned Alignment, const char *Section,
-                std::vector<std::pair<MachineConstantPoolEntry,unsigned> > &CP);
-
+    void EmitGlobalConstantStruct(const ConstantStruct* CVS);
+    void EmitGlobalConstantArray(const ConstantArray* CVA);
+    void EmitGlobalConstantVector(const ConstantVector* CP);
+    void EmitGlobalConstantFP(const ConstantFP* CFP);
+    void EmitGlobalConstantLargeInt(const ConstantInt* CI);
+    GCMetadataPrinter *GetOrCreateGCPrinter(GCStrategy *C);
   };
 }