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

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

Issue 2528033002: [wasm] Add a flag --wasm-opt to test optimizations in the WASM pipeline. (Closed)
Patch Set: [wasm] Add a flag --wasm-opt to test optimizations in the WASM pipeline. Created 4 years 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/compiler/pipeline.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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 return graph()->NewNode(common()->Int64Constant(value)); 43 return graph()->NewNode(common()->Int64Constant(value));
44 } 44 }
45 45
46 Node* MachineOperatorReducer::Float64Mul(Node* lhs, Node* rhs) { 46 Node* MachineOperatorReducer::Float64Mul(Node* lhs, Node* rhs) {
47 return graph()->NewNode(machine()->Float64Mul(), lhs, rhs); 47 return graph()->NewNode(machine()->Float64Mul(), lhs, rhs);
48 } 48 }
49 49
50 Node* MachineOperatorReducer::Float64PowHalf(Node* value) { 50 Node* MachineOperatorReducer::Float64PowHalf(Node* value) {
51 value = 51 value =
52 graph()->NewNode(machine()->Float64Add(), Float64Constant(0.0), value); 52 graph()->NewNode(machine()->Float64Add(), Float64Constant(0.0), value);
53 return graph()->NewNode( 53 Diamond d(graph(), common(),
54 common()->Select(MachineRepresentation::kFloat64, BranchHint::kFalse), 54 graph()->NewNode(machine()->Float64LessThanOrEqual(), value,
55 graph()->NewNode(machine()->Float64LessThanOrEqual(), value, 55 Float64Constant(-V8_INFINITY)),
56 Float64Constant(-V8_INFINITY)), 56 BranchHint::kFalse);
57 Float64Constant(V8_INFINITY), 57 return d.Phi(MachineRepresentation::kFloat64, Float64Constant(V8_INFINITY),
58 graph()->NewNode(machine()->Float64Sqrt(), value)); 58 graph()->NewNode(machine()->Float64Sqrt(), value));
59 } 59 }
60 60
61 Node* MachineOperatorReducer::Word32And(Node* lhs, Node* rhs) { 61 Node* MachineOperatorReducer::Word32And(Node* lhs, Node* rhs) {
62 Node* const node = graph()->NewNode(machine()->Word32And(), lhs, rhs); 62 Node* const node = graph()->NewNode(machine()->Word32And(), lhs, rhs);
63 Reduction const reduction = ReduceWord32And(node); 63 Reduction const reduction = ReduceWord32And(node);
64 return reduction.Changed() ? reduction.replacement() : node; 64 return reduction.Changed() ? reduction.replacement() : node;
65 } 65 }
66 66
67 67
68 Node* MachineOperatorReducer::Word32Sar(Node* lhs, uint32_t rhs) { 68 Node* MachineOperatorReducer::Word32Sar(Node* lhs, uint32_t rhs) {
(...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 if (m.IsFoldable()) { // K % K => K 834 if (m.IsFoldable()) { // K % K => K
835 return ReplaceInt32( 835 return ReplaceInt32(
836 base::bits::SignedMod32(m.left().Value(), m.right().Value())); 836 base::bits::SignedMod32(m.left().Value(), m.right().Value()));
837 } 837 }
838 if (m.right().HasValue()) { 838 if (m.right().HasValue()) {
839 Node* const dividend = m.left().node(); 839 Node* const dividend = m.left().node();
840 int32_t const divisor = Abs(m.right().Value()); 840 int32_t const divisor = Abs(m.right().Value());
841 if (base::bits::IsPowerOfTwo32(divisor)) { 841 if (base::bits::IsPowerOfTwo32(divisor)) {
842 uint32_t const mask = divisor - 1; 842 uint32_t const mask = divisor - 1;
843 Node* const zero = Int32Constant(0); 843 Node* const zero = Int32Constant(0);
844 node->ReplaceInput( 844 Diamond d(graph(), common(),
845 0, graph()->NewNode(machine()->Int32LessThan(), dividend, zero)); 845 graph()->NewNode(machine()->Int32LessThan(), dividend, zero),
846 node->ReplaceInput( 846 BranchHint::kFalse);
847 1, Int32Sub(zero, Word32And(Int32Sub(zero, dividend), mask))); 847 return Replace(
848 node->ReplaceInput(2, Word32And(dividend, mask)); 848 d.Phi(MachineRepresentation::kWord32,
849 NodeProperties::ChangeOp( 849 Int32Sub(zero, Word32And(Int32Sub(zero, dividend), mask)),
850 node, 850 Word32And(dividend, mask)));
851 common()->Select(MachineRepresentation::kWord32, BranchHint::kFalse));
852 } else { 851 } else {
853 Node* quotient = Int32Div(dividend, divisor); 852 Node* quotient = Int32Div(dividend, divisor);
854 DCHECK_EQ(dividend, node->InputAt(0)); 853 DCHECK_EQ(dividend, node->InputAt(0));
855 node->ReplaceInput(1, Int32Mul(quotient, Int32Constant(divisor))); 854 node->ReplaceInput(1, Int32Mul(quotient, Int32Constant(divisor)));
856 node->TrimInputCount(2); 855 node->TrimInputCount(2);
857 NodeProperties::ChangeOp(node, machine()->Int32Sub()); 856 NodeProperties::ChangeOp(node, machine()->Int32Sub());
858 } 857 }
859 return Changed(node); 858 return Changed(node);
860 } 859 }
861 return NoChange(); 860 return NoChange();
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
1401 MachineOperatorBuilder* MachineOperatorReducer::machine() const { 1400 MachineOperatorBuilder* MachineOperatorReducer::machine() const {
1402 return jsgraph()->machine(); 1401 return jsgraph()->machine();
1403 } 1402 }
1404 1403
1405 1404
1406 Graph* MachineOperatorReducer::graph() const { return jsgraph()->graph(); } 1405 Graph* MachineOperatorReducer::graph() const { return jsgraph()->graph(); }
1407 1406
1408 } // namespace compiler 1407 } // namespace compiler
1409 } // namespace internal 1408 } // namespace internal
1410 } // namespace v8 1409 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/pipeline.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698