Chromium Code Reviews| Index: src/compiler/js-intrinsic-lowering.cc |
| diff --git a/src/compiler/js-intrinsic-lowering.cc b/src/compiler/js-intrinsic-lowering.cc |
| index 5a03f5dbbd69c39ce274d8934bf41b36a4d7db9f..31100293329cd91fdbbebc119836d8f23e7316d4 100644 |
| --- a/src/compiler/js-intrinsic-lowering.cc |
| +++ b/src/compiler/js-intrinsic-lowering.cc |
| @@ -53,8 +53,16 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) { |
| return ReduceMathFloor(node); |
| case Runtime::kInlineMathSqrt: |
| return ReduceMathSqrt(node); |
| + case Runtime::kInlineOneByteSeqStringGetChar: |
| + return ReduceSeqStringGetChar(node, String::ONE_BYTE_ENCODING); |
| + case Runtime::kInlineOneByteSeqStringSetChar: |
| + return ReduceSeqStringSetChar(node, String::ONE_BYTE_ENCODING); |
| case Runtime::kInlineStringGetLength: |
| return ReduceStringGetLength(node); |
| + case Runtime::kInlineTwoByteSeqStringGetChar: |
| + return ReduceSeqStringGetChar(node, String::TWO_BYTE_ENCODING); |
| + case Runtime::kInlineTwoByteSeqStringSetChar: |
| + return ReduceSeqStringSetChar(node, String::TWO_BYTE_ENCODING); |
| case Runtime::kInlineValueOf: |
| return ReduceValueOf(node); |
| default: |
| @@ -221,6 +229,42 @@ Reduction JSIntrinsicLowering::ReduceMathSqrt(Node* node) { |
| } |
| +Reduction JSIntrinsicLowering::ReduceSeqStringGetChar( |
| + Node* node, String::Encoding encoding) { |
| + Node* effect = NodeProperties::GetEffectInput(node); |
| + Node* control = NodeProperties::GetControlInput(node); |
| + node->set_op( |
| + simplified()->LoadElement(AccessBuilder::ForSeqStringChar(encoding))); |
| + node->ReplaceInput(2, effect); |
| + node->ReplaceInput(3, control); |
| + node->TrimInputCount(4); |
| + NodeProperties::ReplaceWithValue(node, node, node); |
| + return Changed(node); |
| +} |
| + |
| + |
| +Reduction JSIntrinsicLowering::ReduceSeqStringSetChar( |
| + Node* node, String::Encoding encoding) { |
| + // Note: The intrinsic has a strange argument order, so we need to reshuffle. |
| + Node* index = NodeProperties::GetValueInput(node, 0); |
| + Node* chr = NodeProperties::GetValueInput(node, 1); |
| + Node* string = NodeProperties::GetValueInput(node, 2); |
| + Node* effect = NodeProperties::GetEffectInput(node); |
| + Node* control = NodeProperties::GetControlInput(node); |
| + node->set_op( |
| + simplified()->StoreElement(AccessBuilder::ForSeqStringChar(encoding))); |
| + node->ReplaceInput(0, string); |
| + node->ReplaceInput(1, index); |
| + node->ReplaceInput(2, chr); |
| + node->ReplaceInput(3, effect); |
| + node->ReplaceInput(4, control); |
| + node->TrimInputCount(5); |
| + NodeProperties::RemoveBounds(node); |
| + NodeProperties::ReplaceWithValue(node, node, node); |
|
Michael Starzinger
2015/03/25 17:41:55
Let's just use "string" as the second argument to
Sven Panne
2015/03/26 08:02:34
Done.
|
| + return Changed(node); |
| +} |
| + |
| + |
| Reduction JSIntrinsicLowering::ReduceStringGetLength(Node* node) { |
| Node* value = NodeProperties::GetValueInput(node, 0); |
| Node* effect = NodeProperties::GetEffectInput(node); |