Add DebugLoc to the getNode() methods.
[oota-llvm.git] / include / llvm / CodeGen / AsmPrinter.h
index 27ea22140d541fc3a4598f6751ca6e84152a9386..cdc795162579e0043a349d75876e807df7b1edfe 100644 (file)
 #include <set>
 
 namespace llvm {
-  class Collector;
+  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.
@@ -47,13 +51,13 @@ 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<Collector*,GCMetadataPrinter*> gcp_map_type;
+    typedef DenseMap<GCStrategy*,GCMetadataPrinter*> gcp_map_type;
     typedef gcp_map_type::iterator gcp_iterator;
     gcp_map_type GCMetadataPrinters;
     
@@ -64,7 +68,7 @@ namespace llvm {
   public:
     /// Output stream on which we're printing assembly code.
     ///
-    std::ostream &O;
+    raw_ostream &O;
 
     /// Target machine description.
     ///
@@ -90,13 +94,14 @@ 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();
@@ -126,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.
@@ -178,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);
@@ -361,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);
-    GCMetadataPrinter *GetOrCreateGCPrinter(Collector *C);
+    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);
   };
 }