Print profile info if exit() is called


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1268 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp
index c19d15c..5c763d7 100644
--- a/lib/ExecutionEngine/Interpreter/Execution.cpp
+++ b/lib/ExecutionEngine/Interpreter/Execution.cpp
@@ -599,6 +599,34 @@
 //                     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 @@
 
   ExitCode = GV.SByteVal;
   ECStack.clear();
+  PerformExitStuff();
 }
 
 void Interpreter::executeRetInst(ReturnInst *I, ExecutionContext &SF) {
@@ -637,32 +666,7 @@
       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;
   }