From 9a0a86fd4cdde647570cfabf4a08ab211d4f4ca6 Mon Sep 17 00:00:00 2001 From: "bmeurer@chromium.org" Date: Tue, 11 Feb 2014 10:48:37 +0000 Subject: [PATCH] Get rid of the function sorting in for polymorphic calls. The idea of this code was to sort functions according to ticks spend executing them, but now these ticks are always zero and therefore we fall back to sorting by AST length (or even worse by source length) all the time, which is a bad, arbitrary measure. R=verwaest@chromium.org Review URL: https://codereview.chromium.org/159653003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19267 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/hydrogen.cc | 43 +++---------------------------------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/src/hydrogen.cc b/src/hydrogen.cc index b035ed1..f2b2d55 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -6772,44 +6772,13 @@ HInstruction* HOptimizedGraphBuilder::BuildCallConstantFunction( } -class FunctionSorter { - public: - FunctionSorter() : index_(0), ticks_(0), ast_length_(0), src_length_(0) { } - FunctionSorter(int index, int ticks, int ast_length, int src_length) - : index_(index), - ticks_(ticks), - ast_length_(ast_length), - src_length_(src_length) { } - - int index() const { return index_; } - int ticks() const { return ticks_; } - int ast_length() const { return ast_length_; } - int src_length() const { return src_length_; } - - private: - int index_; - int ticks_; - int ast_length_; - int src_length_; -}; - - -inline bool operator<(const FunctionSorter& lhs, const FunctionSorter& rhs) { - int diff = lhs.ticks() - rhs.ticks(); - if (diff != 0) return diff > 0; - diff = lhs.ast_length() - rhs.ast_length(); - if (diff != 0) return diff < 0; - return lhs.src_length() < rhs.src_length(); -} - - void HOptimizedGraphBuilder::HandlePolymorphicCallNamed( Call* expr, HValue* receiver, SmallMapList* types, Handle name) { int argument_count = expr->arguments()->length() + 1; // Includes receiver. - FunctionSorter order[kMaxCallPolymorphism]; + int order[kMaxCallPolymorphism]; bool handle_smi = false; bool handled_string = false; @@ -6831,23 +6800,17 @@ void HOptimizedGraphBuilder::HandlePolymorphicCallNamed( handle_smi = true; } expr->set_target(target); - order[ordered_functions++] = - FunctionSorter(i, - expr->target()->shared()->profiler_ticks(), - InliningAstSize(expr->target()), - expr->target()->shared()->SourceSize()); + order[ordered_functions++] = i; } } - std::sort(order, order + ordered_functions); - HBasicBlock* number_block = NULL; HBasicBlock* join = NULL; handled_string = false; int count = 0; for (int fn = 0; fn < ordered_functions; ++fn) { - int i = order[fn].index(); + int i = order[fn]; PropertyAccessInfo info(this, LOAD, ToType(types->at(i)), name); if (info.type()->Is(Type::String())) { if (handled_string) continue; -- 2.7.4