[llvm-commits] CVS: llvm/lib/CodeGen/Mapping/MappingInfo.cpp

Brian Gaeke gaeke at cs.uiuc.edu
Tue Jun 3 14:31:01 PDT 2003


Changes in directory llvm/lib/CodeGen/Mapping:

MappingInfo.cpp updated: 1.5 -> 1.6

---
Log message:

Make the write*map methods more self-contained. Document some more.


---
Diffs of the changes:

Index: llvm/lib/CodeGen/Mapping/MappingInfo.cpp
diff -u llvm/lib/CodeGen/Mapping/MappingInfo.cpp:1.5 llvm/lib/CodeGen/Mapping/MappingInfo.cpp:1.6
--- llvm/lib/CodeGen/Mapping/MappingInfo.cpp:1.5	Tue Jun  3 02:56:05 2003
+++ llvm/lib/CodeGen/Mapping/MappingInfo.cpp	Tue Jun  3 14:30:15 2003
@@ -34,71 +34,79 @@
     std::map<const Function*, unsigned> Fkey; //key of F to num
     std::map<const MachineInstr*, unsigned> BBkey; //key BB to num
     std::map<const MachineInstr*, unsigned> MIkey; //key MI to num
-    
+    void writePrologue(const std::string &comment,
+                       const std::string &symbolPrefix, unsigned num);
+    void writeEpilogue(const std::string &symbolPrefix, unsigned num);
+
     bool doInitialization(Module &M);
     void create_BB_to_MInumber_Key(Function &FI);    
     void create_MI_to_number_Key(Function &FI);
-    void writeBBToMImap(Function &FI);
-    void writeLLVMToMImap(Function &FI);
-    void getMappingInfoForFunction::writePrologue(const char * area,    
-						  const char *label,
-						  unsigned FunctionNo);
-    void getMappingInfoForFunction::writeEpilogue(const char *area, 
-						  const char *label,
-						  unsigned FunctionNo);
+    void writeBBToMImap(Function &FI, unsigned num);
+    void writeLLVMToMImap(Function &FI, unsigned num);
     unsigned writeNumber(unsigned X);
   };
 }
 
 /// MappingInfoForFunction -- Static factory method: returns a new
-/// getMappingInfoForFunction Pass object.
+/// getMappingInfoForFunction Pass object, which uses OUT as its
+/// output stream for assembly output. 
 Pass *MappingInfoForFunction(std::ostream &out){
   return (new getMappingInfoForFunction(out));
 }
 
-/// runOnFunction -- Builds up the maps for the given function and then
-/// writes them out as assembly code to the current output stream Out.
+/// runOnFunction -- Builds up the maps for the given function FI and then
+/// writes them out as assembly code to the current output stream OUT.
 /// This is an entry point to the pass, called by the PassManager.
 bool getMappingInfoForFunction::runOnFunction(Function &FI) {
-  // First we build up the maps.
+  // First we build temporary tables used to write out the maps.
   create_BB_to_MInumber_Key(FI);
   create_MI_to_number_Key(FI);
-  unsigned FunctionNo = Fkey[&FI];
+  unsigned num = Fkey[&FI]; // Function number for the current function.
+
+  // Now, write out the maps.
+  writeBBToMImap(FI, num);
+  writeLLVMToMImap(FI, num);
 
-  // Now, print out the maps.
-  writePrologue("BB TO MI MAP", "BBMIMap", FunctionNo);
-  writeBBToMImap(FI);
-  writeEpilogue("BB TO MI MAP", "BBMIMap", FunctionNo);  
-  
-  writePrologue("LLVM I TO MI MAP", "LMIMap", FunctionNo);
-  writeLLVMToMImap(FI);
-  writeEpilogue("LLVM I TO MI MAP", "LMIMap", FunctionNo); 
   return false; 
 }  
 
-void getMappingInfoForFunction::writePrologue(const char *area,
-					      const char *label, 
-					      unsigned FunctionNo){
-  Out << "!" << area << "\n";   
+/// writePrologue -- Output a COMMENT describing the map, then output a
+/// global symbol to start the map named by concatenating SYMBOLPREFIX
+/// and NUM, then output a word containing the length of the map, to the
+/// current output stream Out. This also switches the current section to
+/// .rodata in the assembly output.
+void getMappingInfoForFunction::writePrologue(const std::string &comment,
+                                              const std::string &symbolPrefix,
+                                              unsigned num) {
+  // Comment:
+  Out << "!" << comment << "\n";   
+  // Switch sections:
   Out << "\t.section \".rodata\"\n\t.align 8\n";  
-  Out << "\t.global " << label << FunctionNo << "\n";    
-  Out << "\t.type " << label << FunctionNo << ",#object\n"; 
-  Out << label << FunctionNo << ":\n"; 
-  Out << "\t.word .end_" << label << FunctionNo << "-"
-      << label << FunctionNo << "\n";
-}
-
-void getMappingInfoForFunction::writeEpilogue(const char *area,
-					      const char *label,
-					      unsigned FunctionNo){
-  Out << ".end_" << label << FunctionNo << ":\n";    
-  Out << "\t.size " << label << FunctionNo << ", .end_" 
-      << label << FunctionNo << "-" << label 
-      << FunctionNo << "\n\n\n\n";
+  // Global symbol naming the map:
+  Out << "\t.global " << symbolPrefix << num << "\n";    
+  Out << "\t.type " << symbolPrefix << num << ",#object\n"; 
+  Out << symbolPrefix << num << ":\n"; 
+  // Length word:
+  Out << "\t.word .end_" << symbolPrefix << num << "-"
+      << symbolPrefix << num << "\n";
+}
+
+/// writeEpilogue -- Outputs a local symbol to end the map named by
+/// concatenating SYMBOLPREFIX and NUM, followed by a .size directive that
+/// gives the size of the map, to the current output stream Out.
+void getMappingInfoForFunction::writeEpilogue(const std::string &symbolPrefix,
+                                              unsigned num) {
+  // Local symbol ending the map:
+  Out << ".end_" << symbolPrefix << num << ":\n";    
+  // Size directive:
+  Out << "\t.size " << symbolPrefix << num << ", .end_" 
+      << symbolPrefix << num << "-" << symbolPrefix 
+      << num << "\n\n\n\n";
 }
 
 /// writeNumber -- Write out the number X as a sequence of .byte
-/// directives to the current output stream Out.
+/// directives to the current output stream Out. This method performs a
+/// run-length encoding of the unsigned integers X that are output.
 unsigned getMappingInfoForFunction::writeNumber(unsigned X) {
   unsigned i=0;
   do {
@@ -173,8 +181,11 @@
 /// the number of the MachineBasicBlock in the function as computed by
 /// create_BB_to_MInumber_Key; and third, the number of MachineInstrs in
 /// the MachineBasicBlock.
-void getMappingInfoForFunction::writeBBToMImap(Function &FI){
+void getMappingInfoForFunction::writeBBToMImap(Function &FI, unsigned num){
   unsigned bb = 0;
+  const std::string MapComment = "BB TO MI MAP";
+  const std::string MapSymbolPrefix = "BBMIMap";
+  writePrologue(MapComment, MapSymbolPrefix, num);
   MachineFunction &MF = MachineFunction::get(&FI);  
   for (MachineFunction::iterator BI = MF.begin(), BE = MF.end();
        BI != BE; ++BI, ++bb) {
@@ -183,6 +194,7 @@
     writeNumber(BBkey[miBB[0]]);
     writeNumber(miBB.size());
   }
+  writeEpilogue(MapSymbolPrefix, num);  
 }
 
 /// writeLLVMToMImap -- Output the LLVM I TO MI MAP for the given function
@@ -197,9 +209,11 @@
 /// (as reported by MachineCodeForInstruction), and 3) the MachineInstr
 /// number calculated by create_MI_to_number_Key, for each of the
 /// MachineInstrs that correspond to that Instruction.
-void getMappingInfoForFunction::writeLLVMToMImap(Function &FI) {
-
+void getMappingInfoForFunction::writeLLVMToMImap(Function &FI, unsigned num) {
   unsigned bb = 0;
+  const std::string MapComment = "LLVM I TO MI MAP";
+  const std::string MapSymbolPrefix = "LMIMap";
+  writePrologue(MapComment, MapSymbolPrefix, num);
   for (Function::iterator BI = FI.begin(), BE = FI.end(); 
        BI != BE; ++BI, ++bb) {
     unsigned li = 0;
@@ -216,4 +230,5 @@
       }
     }
   } 
+  writeEpilogue(MapSymbolPrefix, num); 
 }





More information about the llvm-commits mailing list