Commit a6f06b4d authored by neis@chromium.org's avatar neis@chromium.org

Give simple types to Math.Min, Math.Max, Math.Fround, Math.Clz32.

R=rossberg@chromium.org
BUG=

Review URL: https://codereview.chromium.org/657793002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24640 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 4f9fd83d
......@@ -65,6 +65,8 @@ Typer::Typer(Graph* graph, MaybeHandle<Context> context)
number_fun2_ = Type::Function(number, number, number, zone);
weakint_fun1_ = Type::Function(weakint, number, zone);
imul_fun_ = Type::Function(signed32, integral32, integral32, zone);
clz32_fun_ = Type::Function(
Type::Range(zero, f->NewNumber(32), zone), number, zone);
random_fun_ = Type::Function(Type::Union(
Type::UnsignedSmall(), Type::OtherNumber(), zone), zone);
......@@ -1554,40 +1556,48 @@ Type* Typer::Visitor::TypeConstant(Handle<Object> value) {
if (value->IsJSFunction()) {
if (JSFunction::cast(*value)->shared()->HasBuiltinFunctionId()) {
switch (JSFunction::cast(*value)->shared()->builtin_function_id()) {
// TODO(rossberg): can't express overloading
case kMathRandom:
return typer_->random_fun_;
case kMathFloor:
return typer_->weakint_fun1_;
case kMathRound:
return typer_->weakint_fun1_;
case kMathCeil:
return typer_->weakint_fun1_;
case kMathAbs:
// TODO(rossberg): can't express overloading
return typer_->number_fun1_;
case kMathAcos:
case kMathLog:
return typer_->number_fun1_;
case kMathAsin:
case kMathExp:
return typer_->number_fun1_;
case kMathAtan:
case kMathSqrt:
return typer_->number_fun1_;
case kMathAtan2:
case kMathPow:
return typer_->number_fun2_;
case kMathMax:
return typer_->number_fun2_;
case kMathMin:
return typer_->number_fun2_;
case kMathCeil:
return typer_->weakint_fun1_;
case kMathCos:
return typer_->number_fun1_;
case kMathExp:
case kMathSin:
return typer_->number_fun1_;
case kMathFloor:
return typer_->weakint_fun1_;
case kMathImul:
return typer_->imul_fun_;
case kMathLog:
case kMathTan:
return typer_->number_fun1_;
case kMathPow:
return typer_->number_fun2_;
case kMathRandom:
return typer_->random_fun_;
case kMathRound:
return typer_->weakint_fun1_;
case kMathSin:
case kMathAcos:
return typer_->number_fun1_;
case kMathSqrt:
case kMathAsin:
return typer_->number_fun1_;
case kMathTan:
case kMathAtan:
return typer_->number_fun1_;
case kMathAtan2:
return typer_->number_fun2_;
case kMathImul:
return typer_->imul_fun_;
case kMathClz32:
return typer_->clz32_fun_;
case kMathFround:
return typer_->number_fun1_;
default:
break;
......
......@@ -56,6 +56,7 @@ class Typer {
Type* number_fun2_;
Type* weakint_fun1_;
Type* imul_fun_;
Type* clz32_fun_;
Type* random_fun_;
Type* array_buffer_fun_;
Type* int8_array_fun_;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment