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

Side by Side Diff: src/compiler/machine-operator-reducer.cc

Issue 2333663002: [turbofan] Do constant folding for Float64Pow. (Closed)
Patch Set: Make sure to have exponent 0/-0 properly. Created 4 years, 3 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
« no previous file with comments | « no previous file | src/utils.h » ('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 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/machine-operator-reducer.h" 5 #include "src/compiler/machine-operator-reducer.h"
6 6
7 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/base/division-by-constant.h" 8 #include "src/base/division-by-constant.h"
9 #include "src/base/ieee754.h" 9 #include "src/base/ieee754.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 if (m.HasValue()) return ReplaceFloat64(base::ieee754::log10(m.Value())); 534 if (m.HasValue()) return ReplaceFloat64(base::ieee754::log10(m.Value()));
535 break; 535 break;
536 } 536 }
537 case IrOpcode::kFloat64Log2: { 537 case IrOpcode::kFloat64Log2: {
538 Float64Matcher m(node->InputAt(0)); 538 Float64Matcher m(node->InputAt(0));
539 if (m.HasValue()) return ReplaceFloat64(base::ieee754::log2(m.Value())); 539 if (m.HasValue()) return ReplaceFloat64(base::ieee754::log2(m.Value()));
540 break; 540 break;
541 } 541 }
542 case IrOpcode::kFloat64Pow: { 542 case IrOpcode::kFloat64Pow: {
543 Float64BinopMatcher m(node); 543 Float64BinopMatcher m(node);
544 // TODO(bmeurer): Constant fold once we have a unified pow implementation. 544 if (m.IsFoldable()) {
545 if (m.right().Is(0.0)) { // x ** +-0.0 => 1.0 545 return ReplaceFloat64(Pow(m.left().Value(), m.right().Value()));
546 } else if (m.right().Is(0.0)) { // x ** +-0.0 => 1.0
546 return ReplaceFloat64(1.0); 547 return ReplaceFloat64(1.0);
547 } else if (m.right().Is(-2.0)) { // x ** -2.0 => 1 / (x * x) 548 } else if (m.right().Is(-2.0)) { // x ** -2.0 => 1 / (x * x)
548 node->ReplaceInput(0, Float64Constant(1.0)); 549 node->ReplaceInput(0, Float64Constant(1.0));
549 node->ReplaceInput(1, Float64Mul(m.left().node(), m.left().node())); 550 node->ReplaceInput(1, Float64Mul(m.left().node(), m.left().node()));
550 NodeProperties::ChangeOp(node, machine()->Float64Div()); 551 NodeProperties::ChangeOp(node, machine()->Float64Div());
551 return Changed(node); 552 return Changed(node);
552 } else if (m.right().Is(2.0)) { // x ** 2.0 => x * x 553 } else if (m.right().Is(2.0)) { // x ** 2.0 => x * x
553 node->ReplaceInput(1, m.left().node()); 554 node->ReplaceInput(1, m.left().node());
554 NodeProperties::ChangeOp(node, machine()->Float64Mul()); 555 NodeProperties::ChangeOp(node, machine()->Float64Mul());
555 return Changed(node); 556 return Changed(node);
(...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after
1370 MachineOperatorBuilder* MachineOperatorReducer::machine() const { 1371 MachineOperatorBuilder* MachineOperatorReducer::machine() const {
1371 return jsgraph()->machine(); 1372 return jsgraph()->machine();
1372 } 1373 }
1373 1374
1374 1375
1375 Graph* MachineOperatorReducer::graph() const { return jsgraph()->graph(); } 1376 Graph* MachineOperatorReducer::graph() const { return jsgraph()->graph(); }
1376 1377
1377 } // namespace compiler 1378 } // namespace compiler
1378 } // namespace internal 1379 } // namespace internal
1379 } // namespace v8 1380 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698