Print percentages for profiling info better


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1274 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp
index 5c763d7..692f8f4 100644
--- a/lib/ExecutionEngine/Interpreter/Execution.cpp
+++ b/lib/ExecutionEngine/Interpreter/Execution.cpp
@@ -603,7 +603,7 @@
 #ifdef PROFILE_STRUCTURE_FIELDS
   // Print out structure field accounting information...
   if (!FieldAccessCounts.empty()) {
-    CW << "Field Access Profile Information:\n";
+    CW << "Profile Field Access Counts:\n";
     map<const StructType *, vector<unsigned> >::iterator 
       I = FieldAccessCounts.begin(), E = FieldAccessCounts.end();
     for (; I != E; ++I) {
@@ -622,6 +622,24 @@
       CW << endl;
     }
     CW << endl;
+
+    CW << "Profile Field Access Percentages:\n";
+    cout.precision(3);
+    for (I = FieldAccessCounts.begin(); I != E; ++I) {
+      vector<unsigned> &OfC = I->second;
+      unsigned Sum = 0;
+      for (unsigned i = 0; i < OfC.size(); ++i)
+        Sum += OfC[i];
+      
+      CW << "  '" << (Value*)I->first << "'\t- ";
+      for (unsigned i = 0; i < OfC.size(); ++i) {
+        if (i) CW << ", ";
+        CW << double(OfC[i])/Sum;
+      }
+      CW << endl;
+    }
+    CW << endl;
+
     FieldAccessCounts.clear();
   }
 #endif