| 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/access-builder.h" | 5 #include "src/compiler/access-builder.h" |
| 6 #include "src/compiler/js-graph.h" | 6 #include "src/compiler/js-graph.h" |
| 7 #include "src/compiler/js-typed-lowering.h" | 7 #include "src/compiler/js-typed-lowering.h" |
| 8 #include "src/compiler/node-aux-data-inl.h" | 8 #include "src/compiler/node-aux-data-inl.h" |
| 9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
| 10 #include "src/compiler/node-properties.h" | 10 #include "src/compiler/node-properties.h" |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 r.ConvertInputsToString(); | 265 r.ConvertInputsToString(); |
| 266 return r.ChangeToPureOperator(simplified()->StringAdd()); | 266 return r.ChangeToPureOperator(simplified()->StringAdd()); |
| 267 } | 267 } |
| 268 #endif | 268 #endif |
| 269 return NoChange(); | 269 return NoChange(); |
| 270 } | 270 } |
| 271 | 271 |
| 272 | 272 |
| 273 Reduction JSTypedLowering::ReduceJSBitwiseOr(Node* node) { | 273 Reduction JSTypedLowering::ReduceJSBitwiseOr(Node* node) { |
| 274 JSBinopReduction r(this, node); | 274 JSBinopReduction r(this, node); |
| 275 if (r.BothInputsAre(Type::Primitive()) || r.OneInputIs(zero_range_)) { | 275 |
| 276 // TODO(jarin): Propagate frame state input from non-primitive input node to | 276 // We can only reduce to Word32Or if we are sure the to-number conversions |
| 277 // JSToNumber node. | 277 // cannot lazily deoptimize. |
| 278 bool shortcut_or_zero = |
| 279 !FLAG_turbo_deoptimization && r.OneInputIs(zero_range_); |
| 280 if (r.BothInputsAre(Type::Primitive()) || shortcut_or_zero) { |
| 278 // TODO(titzer): some Smi bitwise operations don't really require going | 281 // TODO(titzer): some Smi bitwise operations don't really require going |
| 279 // all the way to int32, which can save tagging/untagging for some | 282 // all the way to int32, which can save tagging/untagging for some |
| 280 // operations | 283 // operations on some platforms. |
| 281 // on some platforms. | |
| 282 // TODO(turbofan): make this heuristic configurable for code size. | 284 // TODO(turbofan): make this heuristic configurable for code size. |
| 283 r.ConvertInputsToUI32(kSigned, kSigned); | 285 r.ConvertInputsToUI32(kSigned, kSigned); |
| 284 return r.ChangeToPureOperator(machine()->Word32Or(), Type::Integral32()); | 286 return r.ChangeToPureOperator(machine()->Word32Or(), Type::Integral32()); |
| 285 } | 287 } |
| 286 return NoChange(); | 288 return NoChange(); |
| 287 } | 289 } |
| 288 | 290 |
| 289 | 291 |
| 290 Reduction JSTypedLowering::ReduceJSMultiply(Node* node) { | 292 Reduction JSTypedLowering::ReduceJSMultiply(Node* node) { |
| 291 JSBinopReduction r(this, node); | 293 JSBinopReduction r(this, node); |
| 292 if (r.BothInputsAre(Type::Primitive()) || r.OneInputIs(one_range_)) { | 294 |
| 293 // TODO(jarin): Propagate frame state input from non-primitive input node to | 295 // We can only reduce to NumberMultiply if we are sure the to-number |
| 294 // JSToNumber node. | 296 // conversions cannot lazily deoptimize. |
| 297 bool shortcut_multiply_one = |
| 298 !FLAG_turbo_deoptimization && r.OneInputIs(one_range_); |
| 299 |
| 300 if (r.BothInputsAre(Type::Primitive()) || shortcut_multiply_one) { |
| 295 r.ConvertInputsToNumber(); | 301 r.ConvertInputsToNumber(); |
| 296 return r.ChangeToPureOperator(simplified()->NumberMultiply(), | 302 return r.ChangeToPureOperator(simplified()->NumberMultiply(), |
| 297 Type::Number()); | 303 Type::Number()); |
| 298 } | 304 } |
| 299 // TODO(turbofan): relax/remove the effects of this operator in other cases. | 305 // TODO(turbofan): relax/remove the effects of this operator in other cases. |
| 300 return NoChange(); | 306 return NoChange(); |
| 301 } | 307 } |
| 302 | 308 |
| 303 | 309 |
| 304 Reduction JSTypedLowering::ReduceNumberBinop(Node* node, | 310 Reduction JSTypedLowering::ReduceNumberBinop(Node* node, |
| (...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 } | 1015 } |
| 1010 | 1016 |
| 1011 | 1017 |
| 1012 MachineOperatorBuilder* JSTypedLowering::machine() const { | 1018 MachineOperatorBuilder* JSTypedLowering::machine() const { |
| 1013 return jsgraph()->machine(); | 1019 return jsgraph()->machine(); |
| 1014 } | 1020 } |
| 1015 | 1021 |
| 1016 } // namespace compiler | 1022 } // namespace compiler |
| 1017 } // namespace internal | 1023 } // namespace internal |
| 1018 } // namespace v8 | 1024 } // namespace v8 |
| OLD | NEW |