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

Side by Side 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, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/js-builtin-reducer.h" 5 #include "src/compiler/js-builtin-reducer.h"
6 #include "src/compiler/js-graph.h" 6 #include "src/compiler/js-graph.h"
7 #include "src/compiler/node-matchers.h" 7 #include "src/compiler/node-matchers.h"
8 #include "src/compiler/node-properties.h" 8 #include "src/compiler/node-properties.h"
9 #include "src/compiler/simplified-operator.h" 9 #include "src/compiler/simplified-operator.h"
10 #include "src/objects-inl.h" 10 #include "src/objects-inl.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 JSCallReduction r(node); 96 JSCallReduction r(node);
97 if (r.InputsMatchOne(Type::PlainPrimitive())) { 97 if (r.InputsMatchOne(Type::PlainPrimitive())) {
98 // Math.abs(a:plain-primitive) -> NumberAbs(ToNumber(a)) 98 // Math.abs(a:plain-primitive) -> NumberAbs(ToNumber(a))
99 Node* input = ToNumber(r.GetJSCallInput(0)); 99 Node* input = ToNumber(r.GetJSCallInput(0));
100 Node* value = graph()->NewNode(simplified()->NumberAbs(), input); 100 Node* value = graph()->NewNode(simplified()->NumberAbs(), input);
101 return Replace(value); 101 return Replace(value);
102 } 102 }
103 return NoChange(); 103 return NoChange();
104 } 104 }
105 105
106 // ES6 section 20.2.2.2 Math.acos ( x )
107 Reduction JSBuiltinReducer::ReduceMathAcos(Node* node) {
108 JSCallReduction r(node);
109 if (r.InputsMatchOne(Type::PlainPrimitive())) {
110 // Math.acos(a:plain-primitive) -> NumberAcos(ToNumber(a))
111 Node* input = ToNumber(r.GetJSCallInput(0));
112 Node* value = graph()->NewNode(simplified()->NumberAcos(), input);
113 return Replace(value);
114 }
115 return NoChange();
116 }
117
118 // ES6 section 20.2.2.3 Math.acosh ( x )
119 Reduction JSBuiltinReducer::ReduceMathAcosh(Node* node) {
120 JSCallReduction r(node);
121 if (r.InputsMatchOne(Type::PlainPrimitive())) {
122 // Math.acosh(a:plain-primitive) -> NumberAcosh(ToNumber(a))
123 Node* input = ToNumber(r.GetJSCallInput(0));
124 Node* value = graph()->NewNode(simplified()->NumberAcosh(), input);
125 return Replace(value);
126 }
127 return NoChange();
128 }
129
130 // ES6 section 20.2.2.4 Math.asin ( x )
131 Reduction JSBuiltinReducer::ReduceMathAsin(Node* node) {
132 JSCallReduction r(node);
133 if (r.InputsMatchOne(Type::PlainPrimitive())) {
134 // Math.asin(a:plain-primitive) -> NumberAsin(ToNumber(a))
135 Node* input = ToNumber(r.GetJSCallInput(0));
136 Node* value = graph()->NewNode(simplified()->NumberAsin(), input);
137 return Replace(value);
138 }
139 return NoChange();
140 }
141
142 // ES6 section 20.2.2.5 Math.asinh ( x )
143 Reduction JSBuiltinReducer::ReduceMathAsinh(Node* node) {
144 JSCallReduction r(node);
145 if (r.InputsMatchOne(Type::PlainPrimitive())) {
146 // Math.asinh(a:plain-primitive) -> NumberAsinh(ToNumber(a))
147 Node* input = ToNumber(r.GetJSCallInput(0));
148 Node* value = graph()->NewNode(simplified()->NumberAsinh(), input);
149 return Replace(value);
150 }
151 return NoChange();
152 }
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
153
106 // ES6 section 20.2.2.6 Math.atan ( x ) 154 // ES6 section 20.2.2.6 Math.atan ( x )
107 Reduction JSBuiltinReducer::ReduceMathAtan(Node* node) { 155 Reduction JSBuiltinReducer::ReduceMathAtan(Node* node) {
108 JSCallReduction r(node); 156 JSCallReduction r(node);
109 if (r.InputsMatchOne(Type::PlainPrimitive())) { 157 if (r.InputsMatchOne(Type::PlainPrimitive())) {
110 // Math.atan(a:plain-primitive) -> NumberAtan(ToNumber(a)) 158 // Math.atan(a:plain-primitive) -> NumberAtan(ToNumber(a))
111 Node* input = ToNumber(r.GetJSCallInput(0)); 159 Node* input = ToNumber(r.GetJSCallInput(0));
112 Node* value = graph()->NewNode(simplified()->NumberAtan(), input); 160 Node* value = graph()->NewNode(simplified()->NumberAtan(), input);
113 return Replace(value); 161 return Replace(value);
114 } 162 }
115 return NoChange(); 163 return NoChange();
116 } 164 }
117 165
166 // ES6 section 20.2.2.7 Math.atanh ( x )
167 Reduction JSBuiltinReducer::ReduceMathAtanh(Node* node) {
168 JSCallReduction r(node);
169 if (r.InputsMatchOne(Type::PlainPrimitive())) {
170 // Math.atanh(a:plain-primitive) -> NumberAtanh(ToNumber(a))
171 Node* input = ToNumber(r.GetJSCallInput(0));
172 Node* value = graph()->NewNode(simplified()->NumberAtanh(), input);
173 return Replace(value);
174 }
175 return NoChange();
176 }
177
118 // ES6 section 20.2.2.8 Math.atan2 ( y, x ) 178 // ES6 section 20.2.2.8 Math.atan2 ( y, x )
119 Reduction JSBuiltinReducer::ReduceMathAtan2(Node* node) { 179 Reduction JSBuiltinReducer::ReduceMathAtan2(Node* node) {
120 JSCallReduction r(node); 180 JSCallReduction r(node);
121 if (r.InputsMatchTwo(Type::PlainPrimitive(), Type::PlainPrimitive())) { 181 if (r.InputsMatchTwo(Type::PlainPrimitive(), Type::PlainPrimitive())) {
122 // Math.atan2(a:plain-primitive, 182 // Math.atan2(a:plain-primitive,
123 // b:plain-primitive) -> NumberAtan2(ToNumber(a), 183 // b:plain-primitive) -> NumberAtan2(ToNumber(a),
124 // ToNumber(b)) 184 // ToNumber(b))
125 Node* left = ToNumber(r.left()); 185 Node* left = ToNumber(r.left());
126 Node* right = ToNumber(r.right()); 186 Node* right = ToNumber(r.right());
127 Node* value = graph()->NewNode(simplified()->NumberAtan2(), left, right); 187 Node* value = graph()->NewNode(simplified()->NumberAtan2(), left, right);
128 return Replace(value); 188 return Replace(value);
129 } 189 }
130 return NoChange(); 190 return NoChange();
131 } 191 }
132 192
133 // ES6 section 20.2.2.7 Math.atanh ( x )
134 Reduction JSBuiltinReducer::ReduceMathAtanh(Node* node) {
135 JSCallReduction r(node);
136 if (r.InputsMatchOne(Type::Number())) {
137 // Math.atanh(a:number) -> NumberAtanh(a)
138 Node* value = graph()->NewNode(simplified()->NumberAtanh(), r.left());
139 return Replace(value);
140 }
141 return NoChange();
142 }
143
144 // ES6 section 20.2.2.10 Math.ceil ( x ) 193 // ES6 section 20.2.2.10 Math.ceil ( x )
145 Reduction JSBuiltinReducer::ReduceMathCeil(Node* node) { 194 Reduction JSBuiltinReducer::ReduceMathCeil(Node* node) {
146 JSCallReduction r(node); 195 JSCallReduction r(node);
147 if (r.InputsMatchOne(Type::PlainPrimitive())) { 196 if (r.InputsMatchOne(Type::PlainPrimitive())) {
148 // Math.ceil(a:plain-primitive) -> NumberCeil(ToNumber(a)) 197 // Math.ceil(a:plain-primitive) -> NumberCeil(ToNumber(a))
149 Node* input = ToNumber(r.GetJSCallInput(0)); 198 Node* input = ToNumber(r.GetJSCallInput(0));
150 Node* value = graph()->NewNode(simplified()->NumberCeil(), input); 199 Node* value = graph()->NewNode(simplified()->NumberCeil(), input);
151 return Replace(value); 200 return Replace(value);
152 } 201 }
153 return NoChange(); 202 return NoChange();
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 Reduction JSBuiltinReducer::ReduceMathCbrt(Node* node) { 430 Reduction JSBuiltinReducer::ReduceMathCbrt(Node* node) {
382 JSCallReduction r(node); 431 JSCallReduction r(node);
383 if (r.InputsMatchOne(Type::Number())) { 432 if (r.InputsMatchOne(Type::Number())) {
384 // Math.cbrt(a:number) -> NumberCbrt(a) 433 // Math.cbrt(a:number) -> NumberCbrt(a)
385 Node* value = graph()->NewNode(simplified()->NumberCbrt(), r.left()); 434 Node* value = graph()->NewNode(simplified()->NumberCbrt(), r.left());
386 return Replace(value); 435 return Replace(value);
387 } 436 }
388 return NoChange(); 437 return NoChange();
389 } 438 }
390 439
440 // ES6 section 20.2.2.29 Math.sign ( x )
441 Reduction JSBuiltinReducer::ReduceMathSign(Node* node) {
442 JSCallReduction r(node);
443 if (r.InputsMatchOne(Type::PlainPrimitive())) {
444 // Math.sign(a:plain-primitive) -> NumberSign(ToNumber(a))
445 Node* input = ToNumber(r.GetJSCallInput(0));
446 Node* value = graph()->NewNode(simplified()->NumberSign(), input);
447 return Replace(value);
448 }
449 return NoChange();
450 }
451
391 // ES6 section 20.2.2.30 Math.sin ( x ) 452 // ES6 section 20.2.2.30 Math.sin ( x )
392 Reduction JSBuiltinReducer::ReduceMathSin(Node* node) { 453 Reduction JSBuiltinReducer::ReduceMathSin(Node* node) {
393 JSCallReduction r(node); 454 JSCallReduction r(node);
394 if (r.InputsMatchOne(Type::PlainPrimitive())) { 455 if (r.InputsMatchOne(Type::PlainPrimitive())) {
395 // Math.sin(a:plain-primitive) -> NumberSin(ToNumber(a)) 456 // Math.sin(a:plain-primitive) -> NumberSin(ToNumber(a))
396 Node* input = ToNumber(r.GetJSCallInput(0)); 457 Node* input = ToNumber(r.GetJSCallInput(0));
397 Node* value = graph()->NewNode(simplified()->NumberSin(), input); 458 Node* value = graph()->NewNode(simplified()->NumberSin(), input);
398 return Replace(value); 459 return Replace(value);
399 } 460 }
400 return NoChange(); 461 return NoChange();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 Reduction JSBuiltinReducer::Reduce(Node* node) { 536 Reduction JSBuiltinReducer::Reduce(Node* node) {
476 Reduction reduction = NoChange(); 537 Reduction reduction = NoChange();
477 JSCallReduction r(node); 538 JSCallReduction r(node);
478 539
479 // Dispatch according to the BuiltinFunctionId if present. 540 // Dispatch according to the BuiltinFunctionId if present.
480 if (!r.HasBuiltinFunctionId()) return NoChange(); 541 if (!r.HasBuiltinFunctionId()) return NoChange();
481 switch (r.GetBuiltinFunctionId()) { 542 switch (r.GetBuiltinFunctionId()) {
482 case kMathAbs: 543 case kMathAbs:
483 reduction = ReduceMathAbs(node); 544 reduction = ReduceMathAbs(node);
484 break; 545 break;
546 case kMathAcos:
547 reduction = ReduceMathAcos(node);
548 break;
549 case kMathAcosh:
550 reduction = ReduceMathAcosh(node);
551 break;
552 case kMathAsin:
553 reduction = ReduceMathAsin(node);
554 break;
555 case kMathAsinh:
556 reduction = ReduceMathAsinh(node);
557 break;
485 case kMathAtan: 558 case kMathAtan:
486 reduction = ReduceMathAtan(node); 559 reduction = ReduceMathAtan(node);
487 break; 560 break;
561 case kMathAtanh:
562 reduction = ReduceMathAtanh(node);
563 break;
488 case kMathAtan2: 564 case kMathAtan2:
489 reduction = ReduceMathAtan2(node); 565 reduction = ReduceMathAtan2(node);
490 break; 566 break;
491 case kMathAtanh:
492 reduction = ReduceMathAtanh(node);
493 break;
494 case kMathCbrt: 567 case kMathCbrt:
495 reduction = ReduceMathCbrt(node); 568 reduction = ReduceMathCbrt(node);
496 break; 569 break;
497 case kMathCeil: 570 case kMathCeil:
498 reduction = ReduceMathCeil(node); 571 reduction = ReduceMathCeil(node);
499 break; 572 break;
500 case kMathClz32: 573 case kMathClz32:
501 reduction = ReduceMathClz32(node); 574 reduction = ReduceMathClz32(node);
502 break; 575 break;
503 case kMathCos: 576 case kMathCos:
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 break; 611 break;
539 case kMathMin: 612 case kMathMin:
540 reduction = ReduceMathMin(node); 613 reduction = ReduceMathMin(node);
541 break; 614 break;
542 case kMathPow: 615 case kMathPow:
543 reduction = ReduceMathPow(node); 616 reduction = ReduceMathPow(node);
544 break; 617 break;
545 case kMathRound: 618 case kMathRound:
546 reduction = ReduceMathRound(node); 619 reduction = ReduceMathRound(node);
547 break; 620 break;
621 case kMathSign:
622 reduction = ReduceMathSign(node);
623 break;
548 case kMathSin: 624 case kMathSin:
549 reduction = ReduceMathSin(node); 625 reduction = ReduceMathSin(node);
550 break; 626 break;
551 case kMathSinh: 627 case kMathSinh:
552 reduction = ReduceMathSinh(node); 628 reduction = ReduceMathSinh(node);
553 break; 629 break;
554 case kMathSqrt: 630 case kMathSqrt:
555 reduction = ReduceMathSqrt(node); 631 reduction = ReduceMathSqrt(node);
556 break; 632 break;
557 case kMathTan: 633 case kMathTan:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 } 677 }
602 678
603 679
604 SimplifiedOperatorBuilder* JSBuiltinReducer::simplified() const { 680 SimplifiedOperatorBuilder* JSBuiltinReducer::simplified() const {
605 return jsgraph()->simplified(); 681 return jsgraph()->simplified();
606 } 682 }
607 683
608 } // namespace compiler 684 } // namespace compiler
609 } // namespace internal 685 } // namespace internal
610 } // namespace v8 686 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698