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

Unified Diff: src/compiler/js-builtin-reducer.cc

Issue 2116753002: [builtins] Unify most of the remaining Math builtins. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@2102223005
Patch Set: Created 4 years, 6 months 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 side-by-side diff with in-line comments
Download patch
Index: src/compiler/js-builtin-reducer.cc
diff --git a/src/compiler/js-builtin-reducer.cc b/src/compiler/js-builtin-reducer.cc
index 063327c92e111ee4f483372d2ad37b710d038a43..75eccb72647cf5a75316841c70d1c5e1e01773b7 100644
--- a/src/compiler/js-builtin-reducer.cc
+++ b/src/compiler/js-builtin-reducer.cc
@@ -103,6 +103,54 @@ Reduction JSBuiltinReducer::ReduceMathAbs(Node* node) {
return NoChange();
}
+// ES6 section 20.2.2.2 Math.acos ( x )
+Reduction JSBuiltinReducer::ReduceMathAcos(Node* node) {
+ JSCallReduction r(node);
+ if (r.InputsMatchOne(Type::PlainPrimitive())) {
+ // Math.acos(a:plain-primitive) -> NumberAcos(ToNumber(a))
+ Node* input = ToNumber(r.GetJSCallInput(0));
+ Node* value = graph()->NewNode(simplified()->NumberAcos(), input);
+ return Replace(value);
+ }
+ return NoChange();
+}
+
+// ES6 section 20.2.2.3 Math.acosh ( x )
+Reduction JSBuiltinReducer::ReduceMathAcosh(Node* node) {
+ JSCallReduction r(node);
+ if (r.InputsMatchOne(Type::PlainPrimitive())) {
+ // Math.acosh(a:plain-primitive) -> NumberAcosh(ToNumber(a))
+ Node* input = ToNumber(r.GetJSCallInput(0));
+ Node* value = graph()->NewNode(simplified()->NumberAcosh(), input);
+ return Replace(value);
+ }
+ return NoChange();
+}
+
+// ES6 section 20.2.2.4 Math.asin ( x )
+Reduction JSBuiltinReducer::ReduceMathAsin(Node* node) {
+ JSCallReduction r(node);
+ if (r.InputsMatchOne(Type::PlainPrimitive())) {
+ // Math.asin(a:plain-primitive) -> NumberAsin(ToNumber(a))
+ Node* input = ToNumber(r.GetJSCallInput(0));
+ Node* value = graph()->NewNode(simplified()->NumberAsin(), input);
+ return Replace(value);
+ }
+ return NoChange();
+}
+
+// ES6 section 20.2.2.5 Math.asinh ( x )
+Reduction JSBuiltinReducer::ReduceMathAsinh(Node* node) {
+ JSCallReduction r(node);
+ if (r.InputsMatchOne(Type::PlainPrimitive())) {
+ // Math.asinh(a:plain-primitive) -> NumberAsinh(ToNumber(a))
+ Node* input = ToNumber(r.GetJSCallInput(0));
+ Node* value = graph()->NewNode(simplified()->NumberAsinh(), input);
+ return Replace(value);
+ }
+ return NoChange();
+}
Franzi 2016/07/01 09:09:48 This is a lot of code duplication. Can we use a ma
Benedikt Meurer 2016/07/01 10:48:33 Not a macro, but we will unify this whole file usi
+
// ES6 section 20.2.2.6 Math.atan ( x )
Reduction JSBuiltinReducer::ReduceMathAtan(Node* node) {
JSCallReduction r(node);
@@ -115,6 +163,18 @@ Reduction JSBuiltinReducer::ReduceMathAtan(Node* node) {
return NoChange();
}
+// ES6 section 20.2.2.7 Math.atanh ( x )
+Reduction JSBuiltinReducer::ReduceMathAtanh(Node* node) {
+ JSCallReduction r(node);
+ if (r.InputsMatchOne(Type::PlainPrimitive())) {
+ // Math.atanh(a:plain-primitive) -> NumberAtanh(ToNumber(a))
+ Node* input = ToNumber(r.GetJSCallInput(0));
+ Node* value = graph()->NewNode(simplified()->NumberAtanh(), input);
+ return Replace(value);
+ }
+ return NoChange();
+}
+
// ES6 section 20.2.2.8 Math.atan2 ( y, x )
Reduction JSBuiltinReducer::ReduceMathAtan2(Node* node) {
JSCallReduction r(node);
@@ -130,17 +190,6 @@ Reduction JSBuiltinReducer::ReduceMathAtan2(Node* node) {
return NoChange();
}
-// ES6 section 20.2.2.7 Math.atanh ( x )
-Reduction JSBuiltinReducer::ReduceMathAtanh(Node* node) {
- JSCallReduction r(node);
- if (r.InputsMatchOne(Type::Number())) {
- // Math.atanh(a:number) -> NumberAtanh(a)
- Node* value = graph()->NewNode(simplified()->NumberAtanh(), r.left());
- return Replace(value);
- }
- return NoChange();
-}
-
// ES6 section 20.2.2.10 Math.ceil ( x )
Reduction JSBuiltinReducer::ReduceMathCeil(Node* node) {
JSCallReduction r(node);
@@ -388,6 +437,18 @@ Reduction JSBuiltinReducer::ReduceMathCbrt(Node* node) {
return NoChange();
}
+// ES6 section 20.2.2.29 Math.sign ( x )
+Reduction JSBuiltinReducer::ReduceMathSign(Node* node) {
+ JSCallReduction r(node);
+ if (r.InputsMatchOne(Type::PlainPrimitive())) {
+ // Math.sign(a:plain-primitive) -> NumberSign(ToNumber(a))
+ Node* input = ToNumber(r.GetJSCallInput(0));
+ Node* value = graph()->NewNode(simplified()->NumberSign(), input);
+ return Replace(value);
+ }
+ return NoChange();
+}
+
// ES6 section 20.2.2.30 Math.sin ( x )
Reduction JSBuiltinReducer::ReduceMathSin(Node* node) {
JSCallReduction r(node);
@@ -482,15 +543,27 @@ Reduction JSBuiltinReducer::Reduce(Node* node) {
case kMathAbs:
reduction = ReduceMathAbs(node);
break;
+ case kMathAcos:
+ reduction = ReduceMathAcos(node);
+ break;
+ case kMathAcosh:
+ reduction = ReduceMathAcosh(node);
+ break;
+ case kMathAsin:
+ reduction = ReduceMathAsin(node);
+ break;
+ case kMathAsinh:
+ reduction = ReduceMathAsinh(node);
+ break;
case kMathAtan:
reduction = ReduceMathAtan(node);
break;
- case kMathAtan2:
- reduction = ReduceMathAtan2(node);
- break;
case kMathAtanh:
reduction = ReduceMathAtanh(node);
break;
+ case kMathAtan2:
+ reduction = ReduceMathAtan2(node);
+ break;
case kMathCbrt:
reduction = ReduceMathCbrt(node);
break;
@@ -545,6 +618,9 @@ Reduction JSBuiltinReducer::Reduce(Node* node) {
case kMathRound:
reduction = ReduceMathRound(node);
break;
+ case kMathSign:
+ reduction = ReduceMathSign(node);
+ break;
case kMathSin:
reduction = ReduceMathSin(node);
break;

Powered by Google App Engine
This is Rietveld 408576698