]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - bytecode/DFGExitProfile.cpp
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / bytecode / DFGExitProfile.cpp
index 69fdc37371989d515eaa12e4889cb12af543e6b6..40a25ced61a2f59256fa029677f232c5565f91df 100644 (file)
 #include "config.h"
 #include "DFGExitProfile.h"
 
 #include "config.h"
 #include "DFGExitProfile.h"
 
-#include <wtf/PassOwnPtr.h>
+#if ENABLE(DFG_JIT)
 
 namespace JSC { namespace DFG {
 
 ExitProfile::ExitProfile() { }
 ExitProfile::~ExitProfile() { }
 
 
 namespace JSC { namespace DFG {
 
 ExitProfile::ExitProfile() { }
 ExitProfile::~ExitProfile() { }
 
-bool ExitProfile::add(const FrequentExitSite& site)
+bool ExitProfile::add(const ConcurrentJITLocker&, const FrequentExitSite& site)
 {
 {
+    ASSERT(site.jitType() != ExitFromAnything);
+    
     // If we've never seen any frequent exits then create the list and put this site
     // into it.
     if (!m_frequentExitSites) {
     // If we've never seen any frequent exits then create the list and put this site
     // into it.
     if (!m_frequentExitSites) {
-        m_frequentExitSites = adoptPtr(new Vector<FrequentExitSite>());
+        m_frequentExitSites = std::make_unique<Vector<FrequentExitSite>>();
         m_frequentExitSites->append(site);
         return true;
     }
         m_frequentExitSites->append(site);
         return true;
     }
@@ -55,7 +57,37 @@ bool ExitProfile::add(const FrequentExitSite& site)
     return true;
 }
 
     return true;
 }
 
-QueryableExitProfile::QueryableExitProfile(const ExitProfile& profile)
+Vector<FrequentExitSite> ExitProfile::exitSitesFor(unsigned bytecodeIndex)
+{
+    Vector<FrequentExitSite> result;
+    
+    if (!m_frequentExitSites)
+        return result;
+    
+    for (unsigned i = 0; i < m_frequentExitSites->size(); ++i) {
+        if (m_frequentExitSites->at(i).bytecodeOffset() == bytecodeIndex)
+            result.append(m_frequentExitSites->at(i));
+    }
+    
+    return result;
+}
+
+bool ExitProfile::hasExitSite(const ConcurrentJITLocker&, const FrequentExitSite& site) const
+{
+    if (!m_frequentExitSites)
+        return false;
+    
+    for (unsigned i = m_frequentExitSites->size(); i--;) {
+        if (site.subsumes(m_frequentExitSites->at(i)))
+            return true;
+    }
+    return false;
+}
+
+QueryableExitProfile::QueryableExitProfile() { }
+QueryableExitProfile::~QueryableExitProfile() { }
+
+void QueryableExitProfile::initialize(const ConcurrentJITLocker&, const ExitProfile& profile)
 {
     if (!profile.m_frequentExitSites)
         return;
 {
     if (!profile.m_frequentExitSites)
         return;
@@ -64,6 +96,6 @@ QueryableExitProfile::QueryableExitProfile(const ExitProfile& profile)
         m_frequentExitSites.add(profile.m_frequentExitSites->at(i));
 }
 
         m_frequentExitSites.add(profile.m_frequentExitSites->at(i));
 }
 
-QueryableExitProfile::~QueryableExitProfile() { }
-
 } } // namespace JSC::DFG
 } } // namespace JSC::DFG
+
+#endif