Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: src/hydrogen.cc

Issue 59153007: Revert "Implement Math.sin, cos and tan using table lookup and spline interpolation." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/arm/full-codegen-arm.cc ('k') | src/ia32/full-codegen-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 6335 matching lines...) Expand 10 before | Expand all | Expand 10 after
6346 6346
6347 6347
6348 int HOptimizedGraphBuilder::InliningAstSize(Handle<JSFunction> target) { 6348 int HOptimizedGraphBuilder::InliningAstSize(Handle<JSFunction> target) {
6349 if (!FLAG_use_inlining) return kNotInlinable; 6349 if (!FLAG_use_inlining) return kNotInlinable;
6350 6350
6351 // Precondition: call is monomorphic and we have found a target with the 6351 // Precondition: call is monomorphic and we have found a target with the
6352 // appropriate arity. 6352 // appropriate arity.
6353 Handle<JSFunction> caller = current_info()->closure(); 6353 Handle<JSFunction> caller = current_info()->closure();
6354 Handle<SharedFunctionInfo> target_shared(target->shared()); 6354 Handle<SharedFunctionInfo> target_shared(target->shared());
6355 6355
6356 // Always inline builtins marked for inlining.
6357 if (target->IsBuiltin()) {
6358 return target_shared->inline_builtin() ? 0 : kNotInlinable;
6359 }
6360
6361 // Do a quick check on source code length to avoid parsing large 6356 // Do a quick check on source code length to avoid parsing large
6362 // inlining candidates. 6357 // inlining candidates.
6363 if (target_shared->SourceSize() > 6358 if (target_shared->SourceSize() >
6364 Min(FLAG_max_inlined_source_size, kUnlimitedMaxInlinedSourceSize)) { 6359 Min(FLAG_max_inlined_source_size, kUnlimitedMaxInlinedSourceSize)) {
6365 TraceInline(target, caller, "target text too big"); 6360 TraceInline(target, caller, "target text too big");
6366 return kNotInlinable; 6361 return kNotInlinable;
6367 } 6362 }
6368 6363
6369 // Target must be inlineable. 6364 // Target must be inlineable.
6370 if (!target_shared->IsInlineable()) { 6365 if (!target->IsInlineable()) {
6371 TraceInline(target, caller, "target not inlineable"); 6366 TraceInline(target, caller, "target not inlineable");
6372 return kNotInlinable; 6367 return kNotInlinable;
6373 } 6368 }
6374 if (target_shared->dont_inline() || target_shared->dont_optimize()) { 6369 if (target_shared->dont_inline() || target_shared->dont_optimize()) {
6375 TraceInline(target, caller, "target contains unsupported syntax [early]"); 6370 TraceInline(target, caller, "target contains unsupported syntax [early]");
6376 return kNotInlinable; 6371 return kNotInlinable;
6377 } 6372 }
6378 6373
6379 int nodes_added = target_shared->ast_node_count(); 6374 int nodes_added = target_shared->ast_node_count();
6380 return nodes_added; 6375 return nodes_added;
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
6740 BuiltinFunctionId id = expr->target()->shared()->builtin_function_id(); 6735 BuiltinFunctionId id = expr->target()->shared()->builtin_function_id();
6741 switch (id) { 6736 switch (id) {
6742 case kMathExp: 6737 case kMathExp:
6743 if (!FLAG_fast_math) break; 6738 if (!FLAG_fast_math) break;
6744 // Fall through if FLAG_fast_math. 6739 // Fall through if FLAG_fast_math.
6745 case kMathRound: 6740 case kMathRound:
6746 case kMathFloor: 6741 case kMathFloor:
6747 case kMathAbs: 6742 case kMathAbs:
6748 case kMathSqrt: 6743 case kMathSqrt:
6749 case kMathLog: 6744 case kMathLog:
6745 case kMathSin:
6746 case kMathCos:
6747 case kMathTan:
6750 if (expr->arguments()->length() == 1) { 6748 if (expr->arguments()->length() == 1) {
6751 HValue* argument = Pop(); 6749 HValue* argument = Pop();
6752 Drop(1); // Receiver. 6750 Drop(1); // Receiver.
6753 HInstruction* op = NewUncasted<HUnaryMathOperation>(argument, id); 6751 HInstruction* op = NewUncasted<HUnaryMathOperation>(argument, id);
6754 if (drop_extra) Drop(1); // Optionally drop the function. 6752 if (drop_extra) Drop(1); // Optionally drop the function.
6755 ast_context()->ReturnInstruction(op, expr->id()); 6753 ast_context()->ReturnInstruction(op, expr->id());
6756 return true; 6754 return true;
6757 } 6755 }
6758 break; 6756 break;
6759 case kMathImul: 6757 case kMathImul:
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
6818 } 6816 }
6819 break; 6817 break;
6820 case kMathExp: 6818 case kMathExp:
6821 if (!FLAG_fast_math) break; 6819 if (!FLAG_fast_math) break;
6822 // Fall through if FLAG_fast_math. 6820 // Fall through if FLAG_fast_math.
6823 case kMathRound: 6821 case kMathRound:
6824 case kMathFloor: 6822 case kMathFloor:
6825 case kMathAbs: 6823 case kMathAbs:
6826 case kMathSqrt: 6824 case kMathSqrt:
6827 case kMathLog: 6825 case kMathLog:
6826 case kMathSin:
6827 case kMathCos:
6828 case kMathTan:
6828 if (argument_count == 2 && check_type == RECEIVER_MAP_CHECK) { 6829 if (argument_count == 2 && check_type == RECEIVER_MAP_CHECK) {
6829 AddCheckConstantFunction(expr->holder(), receiver, receiver_map); 6830 AddCheckConstantFunction(expr->holder(), receiver, receiver_map);
6830 HValue* argument = Pop(); 6831 HValue* argument = Pop();
6831 Drop(1); // Receiver. 6832 Drop(1); // Receiver.
6832 HInstruction* op = NewUncasted<HUnaryMathOperation>(argument, id); 6833 HInstruction* op = NewUncasted<HUnaryMathOperation>(argument, id);
6833 ast_context()->ReturnInstruction(op, expr->id()); 6834 ast_context()->ReturnInstruction(op, expr->id());
6834 return true; 6835 return true;
6835 } 6836 }
6836 break; 6837 break;
6837 case kMathPow: 6838 case kMathPow:
(...skipping 2299 matching lines...) Expand 10 before | Expand all | Expand 10 after
9137 ASSERT_EQ(2, call->arguments()->length()); 9138 ASSERT_EQ(2, call->arguments()->length());
9138 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); 9139 CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
9139 CHECK_ALIVE(VisitForValue(call->arguments()->at(1))); 9140 CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
9140 HValue* right = Pop(); 9141 HValue* right = Pop();
9141 HValue* left = Pop(); 9142 HValue* left = Pop();
9142 HInstruction* result = NewUncasted<HPower>(left, right); 9143 HInstruction* result = NewUncasted<HPower>(left, right);
9143 return ast_context()->ReturnInstruction(result, call->id()); 9144 return ast_context()->ReturnInstruction(result, call->id());
9144 } 9145 }
9145 9146
9146 9147
9148 void HOptimizedGraphBuilder::GenerateMathSin(CallRuntime* call) {
9149 ASSERT_EQ(1, call->arguments()->length());
9150 CHECK_ALIVE(VisitArgumentList(call->arguments()));
9151 HCallStub* result = New<HCallStub>(CodeStub::TranscendentalCache, 1);
9152 result->set_transcendental_type(TranscendentalCache::SIN);
9153 Drop(1);
9154 return ast_context()->ReturnInstruction(result, call->id());
9155 }
9156
9157
9158 void HOptimizedGraphBuilder::GenerateMathCos(CallRuntime* call) {
9159 ASSERT_EQ(1, call->arguments()->length());
9160 CHECK_ALIVE(VisitArgumentList(call->arguments()));
9161 HCallStub* result = New<HCallStub>(CodeStub::TranscendentalCache, 1);
9162 result->set_transcendental_type(TranscendentalCache::COS);
9163 Drop(1);
9164 return ast_context()->ReturnInstruction(result, call->id());
9165 }
9166
9167
9168 void HOptimizedGraphBuilder::GenerateMathTan(CallRuntime* call) {
9169 ASSERT_EQ(1, call->arguments()->length());
9170 CHECK_ALIVE(VisitArgumentList(call->arguments()));
9171 HCallStub* result = New<HCallStub>(CodeStub::TranscendentalCache, 1);
9172 result->set_transcendental_type(TranscendentalCache::TAN);
9173 Drop(1);
9174 return ast_context()->ReturnInstruction(result, call->id());
9175 }
9176
9177
9147 void HOptimizedGraphBuilder::GenerateMathLog(CallRuntime* call) { 9178 void HOptimizedGraphBuilder::GenerateMathLog(CallRuntime* call) {
9148 ASSERT_EQ(1, call->arguments()->length()); 9179 ASSERT_EQ(1, call->arguments()->length());
9149 CHECK_ALIVE(VisitArgumentList(call->arguments())); 9180 CHECK_ALIVE(VisitArgumentList(call->arguments()));
9150 HCallStub* result = New<HCallStub>(CodeStub::TranscendentalCache, 1); 9181 HCallStub* result = New<HCallStub>(CodeStub::TranscendentalCache, 1);
9151 result->set_transcendental_type(TranscendentalCache::LOG); 9182 result->set_transcendental_type(TranscendentalCache::LOG);
9152 Drop(1); 9183 Drop(1);
9153 return ast_context()->ReturnInstruction(result, call->id()); 9184 return ast_context()->ReturnInstruction(result, call->id());
9154 } 9185 }
9155 9186
9156 9187
9157 void HOptimizedGraphBuilder::GenerateMathSqrt(CallRuntime* call) { 9188 void HOptimizedGraphBuilder::GenerateMathSqrt(CallRuntime* call) {
9158 ASSERT(call->arguments()->length() == 1); 9189 ASSERT(call->arguments()->length() == 1);
9159 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); 9190 CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
9160 HValue* value = Pop(); 9191 HValue* value = Pop();
9161 HInstruction* result = New<HUnaryMathOperation>(value, kMathSqrt); 9192 HInstruction* result = New<HUnaryMathOperation>(value, kMathSqrt);
9162 return ast_context()->ReturnInstruction(result, call->id()); 9193 return ast_context()->ReturnInstruction(result, call->id());
9163 } 9194 }
9164 9195
9165
9166 void HOptimizedGraphBuilder::GenerateMathFloor(CallRuntime* call) {
9167 ASSERT(call->arguments()->length() == 1);
9168 CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
9169 HValue* value = Pop();
9170 HInstruction* result = New<HUnaryMathOperation>(value, kMathFloor);
9171 return ast_context()->ReturnInstruction(result, call->id());
9172 }
9173
9174 9196
9175 // Check whether two RegExps are equivalent 9197 // Check whether two RegExps are equivalent
9176 void HOptimizedGraphBuilder::GenerateIsRegExpEquivalent(CallRuntime* call) { 9198 void HOptimizedGraphBuilder::GenerateIsRegExpEquivalent(CallRuntime* call) {
9177 return Bailout(kInlinedRuntimeFunctionIsRegExpEquivalent); 9199 return Bailout(kInlinedRuntimeFunctionIsRegExpEquivalent);
9178 } 9200 }
9179 9201
9180 9202
9181 void HOptimizedGraphBuilder::GenerateGetCachedArrayIndex(CallRuntime* call) { 9203 void HOptimizedGraphBuilder::GenerateGetCachedArrayIndex(CallRuntime* call) {
9182 ASSERT(call->arguments()->length() == 1); 9204 ASSERT(call->arguments()->length() == 1);
9183 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); 9205 CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after
9816 if (ShouldProduceTraceOutput()) { 9838 if (ShouldProduceTraceOutput()) {
9817 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 9839 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
9818 } 9840 }
9819 9841
9820 #ifdef DEBUG 9842 #ifdef DEBUG
9821 graph_->Verify(false); // No full verify. 9843 graph_->Verify(false); // No full verify.
9822 #endif 9844 #endif
9823 } 9845 }
9824 9846
9825 } } // namespace v8::internal 9847 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/full-codegen-arm.cc ('k') | src/ia32/full-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698