OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/effect-control-linearizer.h" | 5 #include "src/compiler/effect-control-linearizer.h" |
6 | 6 |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/compiler/access-builder.h" | 8 #include "src/compiler/access-builder.h" |
9 #include "src/compiler/compiler-source-position-table.h" | 9 #include "src/compiler/compiler-source-position-table.h" |
10 #include "src/compiler/js-graph.h" | 10 #include "src/compiler/js-graph.h" |
(...skipping 2112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2123 __ Word32And(value_bit_field, | 2123 __ Word32And(value_bit_field, |
2124 __ Int32Constant(JSArrayBuffer::WasNeutered::kMask)), | 2124 __ Int32Constant(JSArrayBuffer::WasNeutered::kMask)), |
2125 __ Int32Constant(0)), | 2125 __ Int32Constant(0)), |
2126 __ Int32Constant(0)); | 2126 __ Int32Constant(0)); |
2127 } | 2127 } |
2128 | 2128 |
2129 Node* EffectControlLinearizer::LowerStringCharAt(Node* node) { | 2129 Node* EffectControlLinearizer::LowerStringCharAt(Node* node) { |
2130 Node* receiver = node->InputAt(0); | 2130 Node* receiver = node->InputAt(0); |
2131 Node* position = node->InputAt(1); | 2131 Node* position = node->InputAt(1); |
2132 | 2132 |
2133 Callable const callable = CodeFactory::StringCharAt(isolate()); | 2133 Callable const callable = |
| 2134 Builtins::CallableFor(isolate(), Builtins::kStringCharAt); |
2134 Operator::Properties properties = Operator::kNoThrow | Operator::kNoWrite; | 2135 Operator::Properties properties = Operator::kNoThrow | Operator::kNoWrite; |
2135 CallDescriptor::Flags flags = CallDescriptor::kNoFlags; | 2136 CallDescriptor::Flags flags = CallDescriptor::kNoFlags; |
2136 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 2137 CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
2137 isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties); | 2138 isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties); |
2138 return __ Call(desc, __ HeapConstant(callable.code()), receiver, position, | 2139 return __ Call(desc, __ HeapConstant(callable.code()), receiver, position, |
2139 __ NoContextConstant()); | 2140 __ NoContextConstant()); |
2140 } | 2141 } |
2141 | 2142 |
2142 Node* EffectControlLinearizer::LowerStringCharCodeAt(Node* node) { | 2143 Node* EffectControlLinearizer::LowerStringCharCodeAt(Node* node) { |
2143 Node* receiver = node->InputAt(0); | 2144 Node* receiver = node->InputAt(0); |
2144 Node* position = node->InputAt(1); | 2145 Node* position = node->InputAt(1); |
2145 | 2146 |
2146 Callable const callable = CodeFactory::StringCharCodeAt(isolate()); | 2147 Callable const callable = |
| 2148 Builtins::CallableFor(isolate(), Builtins::kStringCharCodeAt); |
2147 Operator::Properties properties = Operator::kNoThrow | Operator::kNoWrite; | 2149 Operator::Properties properties = Operator::kNoThrow | Operator::kNoWrite; |
2148 CallDescriptor::Flags flags = CallDescriptor::kNoFlags; | 2150 CallDescriptor::Flags flags = CallDescriptor::kNoFlags; |
2149 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 2151 CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
2150 isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties, | 2152 isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties, |
2151 MachineType::TaggedSigned()); | 2153 MachineType::TaggedSigned()); |
2152 return __ Call(desc, __ HeapConstant(callable.code()), receiver, position, | 2154 return __ Call(desc, __ HeapConstant(callable.code()), receiver, position, |
2153 __ NoContextConstant()); | 2155 __ NoContextConstant()); |
2154 } | 2156 } |
2155 | 2157 |
2156 Node* EffectControlLinearizer::LowerSeqStringCharCodeAt(Node* node) { | 2158 Node* EffectControlLinearizer::LowerSeqStringCharCodeAt(Node* node) { |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2375 | 2377 |
2376 Operator::Properties properties = Operator::kEliminatable; | 2378 Operator::Properties properties = Operator::kEliminatable; |
2377 CallDescriptor::Flags flags = CallDescriptor::kNoFlags; | 2379 CallDescriptor::Flags flags = CallDescriptor::kNoFlags; |
2378 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 2380 CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
2379 isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties); | 2381 isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties); |
2380 return __ Call(desc, __ HeapConstant(callable.code()), lhs, rhs, | 2382 return __ Call(desc, __ HeapConstant(callable.code()), lhs, rhs, |
2381 __ NoContextConstant()); | 2383 __ NoContextConstant()); |
2382 } | 2384 } |
2383 | 2385 |
2384 Node* EffectControlLinearizer::LowerStringEqual(Node* node) { | 2386 Node* EffectControlLinearizer::LowerStringEqual(Node* node) { |
2385 return LowerStringComparison(CodeFactory::StringEqual(isolate()), node); | 2387 return LowerStringComparison( |
| 2388 Builtins::CallableFor(isolate(), Builtins::kStringEqual), node); |
2386 } | 2389 } |
2387 | 2390 |
2388 Node* EffectControlLinearizer::LowerStringLessThan(Node* node) { | 2391 Node* EffectControlLinearizer::LowerStringLessThan(Node* node) { |
2389 return LowerStringComparison(CodeFactory::StringLessThan(isolate()), node); | 2392 return LowerStringComparison( |
| 2393 Builtins::CallableFor(isolate(), Builtins::kStringLessThan), node); |
2390 } | 2394 } |
2391 | 2395 |
2392 Node* EffectControlLinearizer::LowerStringLessThanOrEqual(Node* node) { | 2396 Node* EffectControlLinearizer::LowerStringLessThanOrEqual(Node* node) { |
2393 return LowerStringComparison(CodeFactory::StringLessThanOrEqual(isolate()), | 2397 return LowerStringComparison( |
2394 node); | 2398 Builtins::CallableFor(isolate(), Builtins::kStringLessThanOrEqual), node); |
2395 } | 2399 } |
2396 | 2400 |
2397 Node* EffectControlLinearizer::LowerCheckFloat64Hole(Node* node, | 2401 Node* EffectControlLinearizer::LowerCheckFloat64Hole(Node* node, |
2398 Node* frame_state) { | 2402 Node* frame_state) { |
2399 // If we reach this point w/o eliminating the {node} that's marked | 2403 // If we reach this point w/o eliminating the {node} that's marked |
2400 // with allow-return-hole, we cannot do anything, so just deoptimize | 2404 // with allow-return-hole, we cannot do anything, so just deoptimize |
2401 // in case of the hole NaN (similar to Crankshaft). | 2405 // in case of the hole NaN (similar to Crankshaft). |
2402 Node* value = node->InputAt(0); | 2406 Node* value = node->InputAt(0); |
2403 Node* check = __ Word32Equal(__ Float64ExtractHighWord32(value), | 2407 Node* check = __ Word32Equal(__ Float64ExtractHighWord32(value), |
2404 __ Int32Constant(kHoleNanUpper32)); | 2408 __ Int32Constant(kHoleNanUpper32)); |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3061 return isolate()->factory(); | 3065 return isolate()->factory(); |
3062 } | 3066 } |
3063 | 3067 |
3064 Isolate* EffectControlLinearizer::isolate() const { | 3068 Isolate* EffectControlLinearizer::isolate() const { |
3065 return jsgraph()->isolate(); | 3069 return jsgraph()->isolate(); |
3066 } | 3070 } |
3067 | 3071 |
3068 } // namespace compiler | 3072 } // namespace compiler |
3069 } // namespace internal | 3073 } // namespace internal |
3070 } // namespace v8 | 3074 } // namespace v8 |
OLD | NEW |