From 32abf472e03f84fa4e99b5e37ae870317f190b3d Mon Sep 17 00:00:00 2001 From: Shu-yu Guo Date: Thu, 26 Mar 2015 14:16:58 -0700 Subject: [PATCH] Bug 1147224 - Only keep the optimization information of the last time IonBuilder visits a bytecode location. (r=djvj) --- js/src/jit/OptimizationTracking.cpp | 5 +++++ js/src/jit/OptimizationTracking.h | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/js/src/jit/OptimizationTracking.cpp b/js/src/jit/OptimizationTracking.cpp index be78e56a7b3..765400df58b 100644 --- a/js/src/jit/OptimizationTracking.cpp +++ b/js/src/jit/OptimizationTracking.cpp @@ -1040,6 +1040,11 @@ IonBuilder::startTrackingOptimizations() // OOMs are handled as if optimization tracking were turned off. if (!trackedOptimizationSites_.append(site)) site = nullptr; + } else { + // The same bytecode may be visited multiple times (see + // restartLoop). Only the last time matters, so clear any previous + // tracked optimizations. + site->optimizations()->clear(); } if (site) diff --git a/js/src/jit/OptimizationTracking.h b/js/src/jit/OptimizationTracking.h index a2b65e41b47..8be16a3f4ac 100644 --- a/js/src/jit/OptimizationTracking.h +++ b/js/src/jit/OptimizationTracking.h @@ -107,6 +107,12 @@ class TrackedOptimizations : public TempObject currentAttempt_(UINT32_MAX) { } + void clear() { + types_.clear(); + attempts_.clear(); + currentAttempt_ = UINT32_MAX; + } + bool trackTypeInfo(OptimizationTypeInfo &&ty); bool trackAttempt(JS::TrackedStrategy strategy);