Print profile info if exit() is called
authorChris Lattner <sabre@nondot.org>
Mon, 12 Nov 2001 16:28:48 +0000 (16:28 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 12 Nov 2001 16:28:48 +0000 (16:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1268 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/Interpreter/Execution.cpp

index c19d15cff42584ddff569f560f19186f74b12164..5c763d79fbd465e0dd95e8ef4536c41009c31d66 100644 (file)
@@ -599,6 +599,34 @@ static void executeBinaryInst(BinaryOperator *I, ExecutionContext &SF) {
 //                     Terminator Instruction Implementations
 //===----------------------------------------------------------------------===//
 
+static void PerformExitStuff() {
+#ifdef PROFILE_STRUCTURE_FIELDS
+  // Print out structure field accounting information...
+  if (!FieldAccessCounts.empty()) {
+    CW << "Field Access Profile Information:\n";
+    map<const StructType *, vector<unsigned> >::iterator 
+      I = FieldAccessCounts.begin(), E = FieldAccessCounts.end();
+    for (; I != E; ++I) {
+      vector<unsigned> &OfC = I->second;
+      CW << "  '" << (Value*)I->first << "'\t- Sum=";
+      
+      unsigned Sum = 0;
+      for (unsigned i = 0; i < OfC.size(); ++i)
+        Sum += OfC[i];
+      CW << Sum << " - ";
+      
+      for (unsigned i = 0; i < OfC.size(); ++i) {
+        if (i) CW << ", ";
+        CW << OfC[i];
+      }
+      CW << endl;
+    }
+    CW << endl;
+    FieldAccessCounts.clear();
+  }
+#endif
+}
+
 void Interpreter::exitCalled(GenericValue GV) {
   cout << "Program returned ";
   print(Type::IntTy, GV);
@@ -606,6 +634,7 @@ void Interpreter::exitCalled(GenericValue GV) {
 
   ExitCode = GV.SByteVal;
   ECStack.clear();
+  PerformExitStuff();
 }
 
 void Interpreter::executeRetInst(ReturnInst *I, ExecutionContext &SF) {
@@ -637,32 +666,7 @@ void Interpreter::executeRetInst(ReturnInst *I, ExecutionContext &SF) {
       ExitCode = 0;
     }
 
-#ifdef PROFILE_STRUCTURE_FIELDS
-    // Print out structure field accounting information...
-    if (!FieldAccessCounts.empty()) {
-      CW << "Field Access Profile Information:\n";
-      map<const StructType *, vector<unsigned> >::iterator 
-        I = FieldAccessCounts.begin(), E = FieldAccessCounts.end();
-      for (; I != E; ++I) {
-        vector<unsigned> &OfC = I->second;
-        CW << "  '" << (Value*)I->first << "'\t- Sum=";
-
-        unsigned Sum = 0;
-        for (unsigned i = 0; i < OfC.size(); ++i)
-          Sum += OfC[i];
-        CW << Sum << " - ";
-
-        for (unsigned i = 0; i < OfC.size(); ++i) {
-          if (i) CW << ", ";
-          CW << OfC[i];
-        }
-        CW << endl;
-      }
-      CW << endl;
-      FieldAccessCounts.clear();
-    }
-#endif
-
+    PerformExitStuff();
     return;
   }