AsmPrinter.h revision 1279b7c2a9849b499d5997d7efb5c0d6e902ca62
1a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner//===-- llvm/CodeGen/AsmPrinter.h - AsmPrinter Framework --------*- C++ -*-===// 2ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman// 3a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner// The LLVM Compiler Infrastructure 4a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner// 5a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner// This file was developed by the LLVM research group and is distributed under 6a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner// the University of Illinois Open Source License. See LICENSE.TXT for details. 7ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman// 8a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner//===----------------------------------------------------------------------===// 9a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner// 10563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey// This file contains a class to be used as the base class for target specific 11563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey// asm writers. This class primarily handles common functionality used by 12563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey// all asm writers. 13a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner// 14a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner//===----------------------------------------------------------------------===// 15a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 16a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner#ifndef LLVM_CODEGEN_ASMPRINTER_H 17a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner#define LLVM_CODEGEN_ASMPRINTER_H 18a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 19a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner#include "llvm/CodeGen/MachineFunctionPass.h" 20190f3ba2aa58dc2e73a5f90dff15015a1ffa226bChris Lattner#include "llvm/Support/DataTypes.h" 21a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 22a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattnernamespace llvm { 23a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner class Constant; 24c884db47f1a1d5449b749e6528292451e49025e4Jeff Cohen class ConstantArray; 25ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner class GlobalVariable; 262d2cec1e9e93a388bd8448f4bad661ac89a49de3Evan Cheng class MachineConstantPoolEntry; 27d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng class MachineConstantPoolValue; 28563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey class Mangler; 29563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey class TargetAsmInfo; 30563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey 31a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 32563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey /// AsmPrinter - This class is intended to be used as a driving class for all 33563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey /// asm writers. 34a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner class AsmPrinter : public MachineFunctionPass { 35d5ab7e1c54c961b447395f17b569acdf18776c5aChris Lattner /// FunctionNumber - This provides a unique ID for each function emitted in 36d5ab7e1c54c961b447395f17b569acdf18776c5aChris Lattner /// this translation unit. It is autoincremented by SetupMachineFunction, 37d5ab7e1c54c961b447395f17b569acdf18776c5aChris Lattner /// and can be accessed with getFunctionNumber() and 38d5ab7e1c54c961b447395f17b569acdf18776c5aChris Lattner /// IncrementFunctionNumber(). 39d5ab7e1c54c961b447395f17b569acdf18776c5aChris Lattner /// 40d5ab7e1c54c961b447395f17b569acdf18776c5aChris Lattner unsigned FunctionNumber; 41a7cea6f599418a579ab5ce66413fba7efa8bf581Jim Laskey 42b2efb853f00d45b1c8d57f92acd0028fbdeffda6Jim Laskey public: 43a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// Output stream on which we're printing assembly code. 44a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// 45a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner std::ostream &O; 46a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 47a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// Target machine description. 48a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// 49a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner TargetMachine &TM; 50563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey 51563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey /// Target Asm Printer information. 52563321a2582851c653d0863e8e0bba3d483734f9Jim Laskey /// 53a0f3d17daac73c9c71aad497b298cbe82848f726Jim Laskey const TargetAsmInfo *TAI; 54a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 55a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// Name-mangler for global names. 56a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// 57a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner Mangler *Mang; 58a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 59a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// Cache of mangled name for current function. This is recalculated at the 60a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// beginning of each call to runOnMachineFunction(). 61a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// 62a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner std::string CurrentFnName; 6397e32e3239c0f065698f8c004b2b3009162f5ed6Chris Lattner 6489d67faf30ed1a8b5364f53c9a0f5e07a9a0719cJim Laskey /// CurrentSection - The current section we are emitting to. This is 6589d67faf30ed1a8b5364f53c9a0f5e07a9a0719cJim Laskey /// controlled and used by the SwitchSection method. 6689d67faf30ed1a8b5364f53c9a0f5e07a9a0719cJim Laskey std::string CurrentSection; 67b2efb853f00d45b1c8d57f92acd0028fbdeffda6Jim Laskey 68b2efb853f00d45b1c8d57f92acd0028fbdeffda6Jim Laskey protected: 69a0f3d17daac73c9c71aad497b298cbe82848f726Jim Laskey AsmPrinter(std::ostream &o, TargetMachine &TM, const TargetAsmInfo *T); 70ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner 71a7cea6f599418a579ab5ce66413fba7efa8bf581Jim Laskey public: 72f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// SwitchToTextSection - Switch to the specified section of the executable 73f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// if we are not already in it! If GV is non-null and if the global has an 74e2b1f1188fd8c28977b5cf2a6842fc7bbb008713Chris Lattner /// explicitly requested section, we switch to the section indicated for the 75e2b1f1188fd8c28977b5cf2a6842fc7bbb008713Chris Lattner /// global instead of NewSection. 76e2b1f1188fd8c28977b5cf2a6842fc7bbb008713Chris Lattner /// 77e2b1f1188fd8c28977b5cf2a6842fc7bbb008713Chris Lattner /// If the new section is an empty string, this method forgets what the 78e2b1f1188fd8c28977b5cf2a6842fc7bbb008713Chris Lattner /// current section is, but does not emit a .section directive. 79e2b1f1188fd8c28977b5cf2a6842fc7bbb008713Chris Lattner /// 80f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// This method is used when about to emit executable code. 81f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// 82f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner void SwitchToTextSection(const char *NewSection, const GlobalValue *GV); 83d5ab7e1c54c961b447395f17b569acdf18776c5aChris Lattner 84f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// SwitchToDataSection - Switch to the specified section of the executable 85f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// if we are not already in it! If GV is non-null and if the global has an 86f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// explicitly requested section, we switch to the section indicated for the 87f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// global instead of NewSection. 88f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// 89f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// If the new section is an empty string, this method forgets what the 90f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// current section is, but does not emit a .section directive. 91f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// 92f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// This method is used when about to emit data. For most assemblers, this 93f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// is the same as the SwitchToTextSection method, but not all assemblers 94f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// are the same. 95f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner /// 96f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner void SwitchToDataSection(const char *NewSection, const GlobalValue *GV); 97f668ffc4c2cf3da8ef0948b316d971c4b41b0e05Chris Lattner 9828adf292d903f1bc397cbf5e4058828f76f9c054Chris Lattner /// getPreferredAlignmentLog - Return the preferred alignment of the 9928adf292d903f1bc397cbf5e4058828f76f9c054Chris Lattner /// specified global, returned in log form. This includes an explicitly 10028adf292d903f1bc397cbf5e4058828f76f9c054Chris Lattner /// requested alignment (if the global has one). 10128adf292d903f1bc397cbf5e4058828f76f9c054Chris Lattner unsigned getPreferredAlignmentLog(const GlobalVariable *GV) const; 102a7cea6f599418a579ab5ce66413fba7efa8bf581Jim Laskey protected: 103a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// doInitialization - Set up the AsmPrinter when we are working on a new 104a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// module. If your pass overrides this, it must make sure to explicitly 105a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// call this implementation. 106a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner bool doInitialization(Module &M); 107a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 108a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// doFinalization - Shut down the asmprinter. If you override this in your 109a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// pass, you must make sure to call it explicitly. 110a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner bool doFinalization(Module &M); 1113ce9b67e0c0f171c6d09c19407930ce6989f1b9dChris Lattner 1123ce9b67e0c0f171c6d09c19407930ce6989f1b9dChris Lattner /// PrintSpecial - Print information related to the specified machine instr 1133ce9b67e0c0f171c6d09c19407930ce6989f1b9dChris Lattner /// that is independent of the operand, and may be independent of the instr 1143ce9b67e0c0f171c6d09c19407930ce6989f1b9dChris Lattner /// itself. This can be useful for portably encoding the comment character 1153ce9b67e0c0f171c6d09c19407930ce6989f1b9dChris Lattner /// or other bits of target-specific knowledge into the asmstrings. The 1163ce9b67e0c0f171c6d09c19407930ce6989f1b9dChris Lattner /// syntax used is ${:comment}. Targets can override this to add support 1173ce9b67e0c0f171c6d09c19407930ce6989f1b9dChris Lattner /// for their own strange codes. 1183ce9b67e0c0f171c6d09c19407930ce6989f1b9dChris Lattner virtual void PrintSpecial(const MachineInstr *MI, const char *Code); 11947cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner 12047cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner /// PrintAsmOperand - Print the specified operand of MI, an INLINEASM 12147cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner /// instruction, using the specified assembler variant. Targets should 122b44b5094110508e2381615b15077b388364f7e8aChris Lattner /// override this to format as appropriate. This method can return true if 12347cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner /// the operand is erroneous. 12447cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner virtual bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 125f483e58212d018f8b2ec760f59089e72defab5cfChris Lattner unsigned AsmVariant, const char *ExtraCode); 126b2efb853f00d45b1c8d57f92acd0028fbdeffda6Jim Laskey 127b44b5094110508e2381615b15077b388364f7e8aChris Lattner /// PrintAsmMemoryOperand - Print the specified operand of MI, an INLINEASM 128b44b5094110508e2381615b15077b388364f7e8aChris Lattner /// instruction, using the specified assembler variant as an address. 129b44b5094110508e2381615b15077b388364f7e8aChris Lattner /// Targets should override this to format as appropriate. This method can 130b44b5094110508e2381615b15077b388364f7e8aChris Lattner /// return true if the operand is erroneous. 131b44b5094110508e2381615b15077b388364f7e8aChris Lattner virtual bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, 132b44b5094110508e2381615b15077b388364f7e8aChris Lattner unsigned AsmVariant, 133b44b5094110508e2381615b15077b388364f7e8aChris Lattner const char *ExtraCode); 134b44b5094110508e2381615b15077b388364f7e8aChris Lattner 1351279b7c2a9849b499d5997d7efb5c0d6e902ca62Chris Lattner /// getSectionForFunction - Return the section that we should emit the 1361279b7c2a9849b499d5997d7efb5c0d6e902ca62Chris Lattner /// specified function body into. This defaults to 'TextSection'. This 1371279b7c2a9849b499d5997d7efb5c0d6e902ca62Chris Lattner /// should most likely be overridden by the target to put linkonce/weak 1381279b7c2a9849b499d5997d7efb5c0d6e902ca62Chris Lattner /// functions into special sections. 1391279b7c2a9849b499d5997d7efb5c0d6e902ca62Chris Lattner virtual std::string getSectionForFunction(const Function &F) const; 1401279b7c2a9849b499d5997d7efb5c0d6e902ca62Chris Lattner 1416fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner /// SetupMachineFunction - This should be called when a new MachineFunction 142a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// is being processed from runOnMachineFunction. 1436fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner void SetupMachineFunction(MachineFunction &MF); 14497e32e3239c0f065698f8c004b2b3009162f5ed6Chris Lattner 14547cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner /// getFunctionNumber - Return a unique ID for the current function. 14647cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner /// 14747cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner unsigned getFunctionNumber() const { return FunctionNumber; } 14847cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner 14947cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner /// IncrementFunctionNumber - Increase Function Number. AsmPrinters should 15047cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner /// not normally call this, as the counter is automatically bumped by 15147cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner /// SetupMachineFunction. 15247cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner void IncrementFunctionNumber() { FunctionNumber++; } 15347cf4eda9faa3c0b063337d0eb4ea83aba8cb329Chris Lattner 154ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner /// EmitConstantPool - Print to the current output stream assembly 155ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner /// representations of the constants in the constant pool MCP. This is 156ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner /// used to print out constants which have been "spilled to memory" by 157ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner /// the code generator. 158ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner /// 1592d2cec1e9e93a388bd8448f4bad661ac89a49de3Evan Cheng void EmitConstantPool(MachineConstantPool *MCP); 160a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 16137efe6764568a3829fee26aba532283131d1a104Nate Begeman /// EmitJumpTableInfo - Print assembly representations of the jump tables 16237efe6764568a3829fee26aba532283131d1a104Nate Begeman /// used by the current function to the current output stream. 16337efe6764568a3829fee26aba532283131d1a104Nate Begeman /// 16437efe6764568a3829fee26aba532283131d1a104Nate Begeman void EmitJumpTableInfo(MachineJumpTableInfo *MJTI); 16537efe6764568a3829fee26aba532283131d1a104Nate Begeman 166ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner /// EmitSpecialLLVMGlobal - Check to see if the specified global is a 167ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner /// special global used by LLVM. If so, emit it and return true, otherwise 168ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner /// do nothing and return false. 169ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner bool EmitSpecialLLVMGlobal(const GlobalVariable *GV); 170ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner 1716fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner /// EmitAlignment - Emit an alignment directive to the specified power of 172bfddc2030a7e67b9e0c42276525d6932375ff261Chris Lattner /// two boundary. For example, if you pass in 3 here, you will get an 8 173a1ab72daadbdc5b499ce7e7e97c4b80efad46736Chris Lattner /// byte alignment. If a global value is specified, and if that global has 174a1ab72daadbdc5b499ce7e7e97c4b80efad46736Chris Lattner /// an explicit alignment requested, it will override the alignment request. 1756fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner void EmitAlignment(unsigned NumBits, const GlobalValue *GV = 0) const; 176bfddc2030a7e67b9e0c42276525d6932375ff261Chris Lattner 1776fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner /// EmitZeros - Emit a block of zeros. 17830bad4af40d0126f888f601fb46d01e2b39dbc43Chris Lattner /// 179c6a057b04db506152c98355b51ba15d82a15b90aJeff Cohen void EmitZeros(uint64_t NumZeros) const; 180c884db47f1a1d5449b749e6528292451e49025e4Jeff Cohen 181c884db47f1a1d5449b749e6528292451e49025e4Jeff Cohen /// EmitString - Emit a zero-byte-terminated string constant. 182c884db47f1a1d5449b749e6528292451e49025e4Jeff Cohen /// 183c884db47f1a1d5449b749e6528292451e49025e4Jeff Cohen virtual void EmitString(const ConstantArray *CVA) const; 18430bad4af40d0126f888f601fb46d01e2b39dbc43Chris Lattner 1856fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner /// EmitConstantValueOnly - Print out the specified constant, without a 186a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner /// storage class. Only constants of first-class type are allowed here. 1876fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner void EmitConstantValueOnly(const Constant *CV); 18846d6126e669ab83383d47fb465d2a7d0c60169e5Chris Lattner 1896fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner /// EmitGlobalConstant - Print a general LLVM constant to the .s file. 19046d6126e669ab83383d47fb465d2a7d0c60169e5Chris Lattner /// 1916fe3acce749ee2b3714009064626f6c53b06dfb4Chris Lattner void EmitGlobalConstant(const Constant* CV); 192d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng 193d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng virtual void EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV); 194ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner 195e736ed19478f05811f08a56706e07fa4ab865401Chris Lattner /// printInlineAsm - This method formats and prints the specified machine 196e736ed19478f05811f08a56706e07fa4ab865401Chris Lattner /// instruction that is an inline asm. 197e736ed19478f05811f08a56706e07fa4ab865401Chris Lattner void printInlineAsm(const MachineInstr *MI) const; 19837efe6764568a3829fee26aba532283131d1a104Nate Begeman 19937efe6764568a3829fee26aba532283131d1a104Nate Begeman /// printBasicBlockLabel - This method prints the label for the specified 20037efe6764568a3829fee26aba532283131d1a104Nate Begeman /// MachineBasicBlock 201cdf38c4edb892c356cfaa3c09c57728bc8d6bfd0Nate Begeman virtual void printBasicBlockLabel(const MachineBasicBlock *MBB, 202cdf38c4edb892c356cfaa3c09c57728bc8d6bfd0Nate Begeman bool printColon = false, 203cdf38c4edb892c356cfaa3c09c57728bc8d6bfd0Nate Begeman bool printComment = true) const; 20452a51e38dc312aa262b0d771419afe1785f3cb22Nate Begeman 20552a51e38dc312aa262b0d771419afe1785f3cb22Nate Begeman /// printSetLabel - This method prints a set label for the specified 20652a51e38dc312aa262b0d771419afe1785f3cb22Nate Begeman /// MachineBasicBlock 20752a51e38dc312aa262b0d771419afe1785f3cb22Nate Begeman void printSetLabel(unsigned uid, const MachineBasicBlock *MBB) const; 208d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng 209d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng /// printDataDirective - This method prints the asm directive for the 210d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng /// specified type. 211d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng void printDataDirective(const Type *type); 212d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng 213ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner private: 214cb05af852f1d346ac07b84c74a930a5cdbd6d427Chris Lattner void EmitLLVMUsedList(Constant *List); 215ed13893ff729bc3b91697f6d80a3ba303782efccChris Lattner void EmitXXStructorList(Constant *List); 2162d2cec1e9e93a388bd8448f4bad661ac89a49de3Evan Cheng void EmitConstantPool(unsigned Alignment, const char *Section, 2172d2cec1e9e93a388bd8448f4bad661ac89a49de3Evan Cheng std::vector<std::pair<MachineConstantPoolEntry,unsigned> > &CP); 218b2efb853f00d45b1c8d57f92acd0028fbdeffda6Jim Laskey 219a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner }; 220a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner} 221a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner 222a80ba71efe5be5012128e2db0dd29b024e00105aChris Lattner#endif 223