OLD | NEW |
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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 value = graph()->NewNode( | 110 value = graph()->NewNode( |
111 common()->Select(MachineRepresentation::kNone), | 111 common()->Select(MachineRepresentation::kNone), |
112 graph()->NewNode(simplified()->NumberLessThan(), input, value), value, | 112 graph()->NewNode(simplified()->NumberLessThan(), input, value), value, |
113 input); | 113 input); |
114 } | 114 } |
115 return Replace(value); | 115 return Replace(value); |
116 } | 116 } |
117 return NoChange(); | 117 return NoChange(); |
118 } | 118 } |
119 | 119 |
120 | 120 // ES6 section 20.2.2.19 Math.imul ( x, y ) |
121 // ES6 draft 08-24-14, section 20.2.2.19. | |
122 Reduction JSBuiltinReducer::ReduceMathImul(Node* node) { | 121 Reduction JSBuiltinReducer::ReduceMathImul(Node* node) { |
123 JSCallReduction r(node); | 122 JSCallReduction r(node); |
124 if (r.InputsMatchTwo(Type::Integral32(), Type::Integral32())) { | 123 if (r.InputsMatchTwo(Type::Number(), Type::Number())) { |
125 // Math.imul(a:int32, b:int32) -> Int32Mul(a, b) | 124 // Math.imul(a:number, b:number) -> NumberImul(NumberToUint32(a), |
126 Node* value = graph()->NewNode(machine()->Int32Mul(), r.left(), r.right()); | 125 // NumberToUint32(b)) |
| 126 Node* a = graph()->NewNode(simplified()->NumberToUint32(), r.left()); |
| 127 Node* b = graph()->NewNode(simplified()->NumberToUint32(), r.right()); |
| 128 Node* value = graph()->NewNode(simplified()->NumberImul(), a, b); |
127 return Replace(value); | 129 return Replace(value); |
128 } | 130 } |
129 return NoChange(); | 131 return NoChange(); |
130 } | 132 } |
131 | 133 |
132 // ES6 section 20.2.2.10 Math.ceil ( x ) | 134 // ES6 section 20.2.2.10 Math.ceil ( x ) |
133 Reduction JSBuiltinReducer::ReduceMathCeil(Node* node) { | 135 Reduction JSBuiltinReducer::ReduceMathCeil(Node* node) { |
134 JSCallReduction r(node); | 136 JSCallReduction r(node); |
135 if (r.InputsMatchOne(Type::Number())) { | 137 if (r.InputsMatchOne(Type::Number())) { |
136 // Math.ceil(a:number) -> NumberCeil(a) | 138 // Math.ceil(a:number) -> NumberCeil(a) |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 } | 278 } |
277 | 279 |
278 | 280 |
279 SimplifiedOperatorBuilder* JSBuiltinReducer::simplified() const { | 281 SimplifiedOperatorBuilder* JSBuiltinReducer::simplified() const { |
280 return jsgraph()->simplified(); | 282 return jsgraph()->simplified(); |
281 } | 283 } |
282 | 284 |
283 } // namespace compiler | 285 } // namespace compiler |
284 } // namespace internal | 286 } // namespace internal |
285 } // namespace v8 | 287 } // namespace v8 |
OLD | NEW |