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/diamond.h" | 5 #include "src/compiler/diamond.h" |
6 #include "src/compiler/js-builtin-reducer.h" | 6 #include "src/compiler/js-builtin-reducer.h" |
7 #include "src/compiler/js-graph.h" | 7 #include "src/compiler/js-graph.h" |
8 #include "src/compiler/node-matchers.h" | 8 #include "src/compiler/node-matchers.h" |
9 #include "src/compiler/node-properties.h" | 9 #include "src/compiler/node-properties.h" |
10 #include "src/types.h" | 10 #include "src/types.h" |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 Node* value = | 179 Node* value = |
180 graph()->NewNode(machine()->TruncateFloat64ToFloat32(), r.left()); | 180 graph()->NewNode(machine()->TruncateFloat64ToFloat32(), r.left()); |
181 return Replace(value); | 181 return Replace(value); |
182 } | 182 } |
183 return NoChange(); | 183 return NoChange(); |
184 } | 184 } |
185 | 185 |
186 | 186 |
187 // ES6 draft 10-14-14, section 20.2.2.16. | 187 // ES6 draft 10-14-14, section 20.2.2.16. |
188 Reduction JSBuiltinReducer::ReduceMathFloor(Node* node) { | 188 Reduction JSBuiltinReducer::ReduceMathFloor(Node* node) { |
189 if (!machine()->HasFloat64Floor()) return NoChange(); | 189 if (!machine()->HasFloat64RoundDown()) return NoChange(); |
190 JSCallReduction r(node); | 190 JSCallReduction r(node); |
191 if (r.InputsMatchOne(Type::Number())) { | 191 if (r.InputsMatchOne(Type::Number())) { |
192 // Math.floor(a:number) -> Float64Floor(a) | 192 // Math.floor(a:number) -> Float64RoundDown(a) |
193 Node* value = graph()->NewNode(machine()->Float64Floor(), r.left()); | 193 Node* value = graph()->NewNode(machine()->Float64RoundDown(), r.left()); |
194 return Replace(value); | 194 return Replace(value); |
195 } | 195 } |
196 return NoChange(); | 196 return NoChange(); |
197 } | |
198 | |
199 | |
200 // ES6 draft 10-14-14, section 20.2.2.10. | |
201 Reduction JSBuiltinReducer::ReduceMathCeil(Node* node) { | |
202 if (!machine()->HasFloat64Ceil()) return NoChange(); | |
203 JSCallReduction r(node); | |
204 if (r.InputsMatchOne(Type::Number())) { | |
205 // Math.ceil(a:number) -> Float64Ceil(a) | |
206 Node* value = graph()->NewNode(machine()->Float64Ceil(), r.left()); | |
207 return Replace(value); | |
208 } | |
209 return NoChange(); | |
210 } | 197 } |
211 | 198 |
212 | 199 |
213 Reduction JSBuiltinReducer::Reduce(Node* node) { | 200 Reduction JSBuiltinReducer::Reduce(Node* node) { |
214 JSCallReduction r(node); | 201 JSCallReduction r(node); |
215 | 202 |
216 // Dispatch according to the BuiltinFunctionId if present. | 203 // Dispatch according to the BuiltinFunctionId if present. |
217 if (!r.HasBuiltinFunctionId()) return NoChange(); | 204 if (!r.HasBuiltinFunctionId()) return NoChange(); |
218 switch (r.GetBuiltinFunctionId()) { | 205 switch (r.GetBuiltinFunctionId()) { |
219 case kMathAbs: | 206 case kMathAbs: |
220 return ReplaceWithPureReduction(node, ReduceMathAbs(node)); | 207 return ReplaceWithPureReduction(node, ReduceMathAbs(node)); |
221 case kMathSqrt: | 208 case kMathSqrt: |
222 return ReplaceWithPureReduction(node, ReduceMathSqrt(node)); | 209 return ReplaceWithPureReduction(node, ReduceMathSqrt(node)); |
223 case kMathMax: | 210 case kMathMax: |
224 return ReplaceWithPureReduction(node, ReduceMathMax(node)); | 211 return ReplaceWithPureReduction(node, ReduceMathMax(node)); |
225 case kMathImul: | 212 case kMathImul: |
226 return ReplaceWithPureReduction(node, ReduceMathImul(node)); | 213 return ReplaceWithPureReduction(node, ReduceMathImul(node)); |
227 case kMathFround: | 214 case kMathFround: |
228 return ReplaceWithPureReduction(node, ReduceMathFround(node)); | 215 return ReplaceWithPureReduction(node, ReduceMathFround(node)); |
229 case kMathFloor: | 216 case kMathFloor: |
230 return ReplaceWithPureReduction(node, ReduceMathFloor(node)); | 217 return ReplaceWithPureReduction(node, ReduceMathFloor(node)); |
231 case kMathCeil: | |
232 return ReplaceWithPureReduction(node, ReduceMathCeil(node)); | |
233 default: | 218 default: |
234 break; | 219 break; |
235 } | 220 } |
236 return NoChange(); | 221 return NoChange(); |
237 } | 222 } |
238 | 223 |
239 | 224 |
240 Graph* JSBuiltinReducer::graph() const { return jsgraph()->graph(); } | 225 Graph* JSBuiltinReducer::graph() const { return jsgraph()->graph(); } |
241 | 226 |
242 | 227 |
243 CommonOperatorBuilder* JSBuiltinReducer::common() const { | 228 CommonOperatorBuilder* JSBuiltinReducer::common() const { |
244 return jsgraph()->common(); | 229 return jsgraph()->common(); |
245 } | 230 } |
246 | 231 |
247 | 232 |
248 MachineOperatorBuilder* JSBuiltinReducer::machine() const { | 233 MachineOperatorBuilder* JSBuiltinReducer::machine() const { |
249 return jsgraph()->machine(); | 234 return jsgraph()->machine(); |
250 } | 235 } |
251 | 236 |
252 } // namespace compiler | 237 } // namespace compiler |
253 } // namespace internal | 238 } // namespace internal |
254 } // namespace v8 | 239 } // namespace v8 |
OLD | NEW |