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/code-stubs.h" | 5 #include "src/code-stubs.h" |
6 #include "src/compiler/change-lowering.h" | 6 #include "src/compiler/change-lowering.h" |
7 #include "src/compiler/js-graph.h" | 7 #include "src/compiler/js-graph.h" |
8 #include "src/compiler/linkage.h" | 8 #include "src/compiler/linkage.h" |
9 #include "src/compiler/node-properties.h" | 9 #include "src/compiler/node-properties.h" |
10 #include "src/compiler/simplified-operator.h" | 10 #include "src/compiler/simplified-operator.h" |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 | 121 |
122 | 122 |
123 TARGET_TEST_P(ChangeLoweringCommonTest, ChangeFloat64ToTagged) { | 123 TARGET_TEST_P(ChangeLoweringCommonTest, ChangeFloat64ToTagged) { |
124 Node* value = Parameter(Type::Number()); | 124 Node* value = Parameter(Type::Number()); |
125 Reduction r = | 125 Reduction r = |
126 Reduce(graph()->NewNode(simplified()->ChangeFloat64ToTagged(), value)); | 126 Reduce(graph()->NewNode(simplified()->ChangeFloat64ToTagged(), value)); |
127 ASSERT_TRUE(r.Changed()); | 127 ASSERT_TRUE(r.Changed()); |
128 Capture<Node*> heap_number; | 128 Capture<Node*> heap_number; |
129 EXPECT_THAT( | 129 EXPECT_THAT( |
130 r.replacement(), | 130 r.replacement(), |
131 IsFinish( | 131 IsFinishRegion( |
132 AllOf(CaptureEq(&heap_number), | 132 AllOf(CaptureEq(&heap_number), |
133 IsAllocateHeapNumber(IsValueEffect(value), graph()->start())), | 133 IsAllocateHeapNumber(IsBeginRegion(graph()->start()), |
| 134 graph()->start())), |
134 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), | 135 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), |
135 CaptureEq(&heap_number), | 136 CaptureEq(&heap_number), |
136 IsIntPtrConstant(HeapNumber::kValueOffset - kHeapObjectTag), | 137 IsIntPtrConstant(HeapNumber::kValueOffset - kHeapObjectTag), |
137 value, CaptureEq(&heap_number), graph()->start()))); | 138 value, CaptureEq(&heap_number), graph()->start()))); |
138 } | 139 } |
139 | 140 |
140 | 141 |
141 TARGET_TEST_P(ChangeLoweringCommonTest, ChangeInt32ToTaggedWithSignedSmall) { | 142 TARGET_TEST_P(ChangeLoweringCommonTest, ChangeInt32ToTaggedWithSignedSmall) { |
142 Node* value = Parameter(Type::SignedSmall()); | 143 Node* value = Parameter(Type::SignedSmall()); |
143 Reduction r = | 144 Reduction r = |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 | 212 |
212 TARGET_TEST_F(ChangeLowering32Test, ChangeInt32ToTagged) { | 213 TARGET_TEST_F(ChangeLowering32Test, ChangeInt32ToTagged) { |
213 Node* value = Parameter(Type::Integral32()); | 214 Node* value = Parameter(Type::Integral32()); |
214 Node* node = graph()->NewNode(simplified()->ChangeInt32ToTagged(), value); | 215 Node* node = graph()->NewNode(simplified()->ChangeInt32ToTagged(), value); |
215 Reduction r = Reduce(node); | 216 Reduction r = Reduce(node); |
216 ASSERT_TRUE(r.Changed()); | 217 ASSERT_TRUE(r.Changed()); |
217 Capture<Node*> add, branch, heap_number, if_true; | 218 Capture<Node*> add, branch, heap_number, if_true; |
218 EXPECT_THAT( | 219 EXPECT_THAT( |
219 r.replacement(), | 220 r.replacement(), |
220 IsPhi(kMachAnyTagged, | 221 IsPhi(kMachAnyTagged, |
221 IsFinish(AllOf(CaptureEq(&heap_number), | 222 IsFinishRegion( |
222 IsAllocateHeapNumber(_, CaptureEq(&if_true))), | 223 AllOf(CaptureEq(&heap_number), |
223 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), | 224 IsAllocateHeapNumber(_, CaptureEq(&if_true))), |
224 CaptureEq(&heap_number), | 225 IsStore( |
225 IsIntPtrConstant(HeapNumber::kValueOffset - | 226 StoreRepresentation(kMachFloat64, kNoWriteBarrier), |
226 kHeapObjectTag), | 227 CaptureEq(&heap_number), |
227 IsChangeInt32ToFloat64(value), | 228 IsIntPtrConstant(HeapNumber::kValueOffset - kHeapObjectTag), |
228 CaptureEq(&heap_number), CaptureEq(&if_true))), | 229 IsChangeInt32ToFloat64(value), CaptureEq(&heap_number), |
| 230 CaptureEq(&if_true))), |
229 IsProjection(0, AllOf(CaptureEq(&add), | 231 IsProjection(0, AllOf(CaptureEq(&add), |
230 IsInt32AddWithOverflow(value, value))), | 232 IsInt32AddWithOverflow(value, value))), |
231 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))), | 233 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))), |
232 IsIfFalse(AllOf(CaptureEq(&branch), | 234 IsIfFalse(AllOf(CaptureEq(&branch), |
233 IsBranch(IsProjection(1, CaptureEq(&add)), | 235 IsBranch(IsProjection(1, CaptureEq(&add)), |
234 graph()->start())))))); | 236 graph()->start())))))); |
235 } | 237 } |
236 | 238 |
237 | 239 |
238 TARGET_TEST_F(ChangeLowering32Test, ChangeTaggedToFloat64) { | 240 TARGET_TEST_F(ChangeLowering32Test, ChangeTaggedToFloat64) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 Node* value = Parameter(Type::Number()); | 314 Node* value = Parameter(Type::Number()); |
313 Node* node = graph()->NewNode(simplified()->ChangeUint32ToTagged(), value); | 315 Node* node = graph()->NewNode(simplified()->ChangeUint32ToTagged(), value); |
314 Reduction r = Reduce(node); | 316 Reduction r = Reduce(node); |
315 ASSERT_TRUE(r.Changed()); | 317 ASSERT_TRUE(r.Changed()); |
316 Capture<Node*> branch, heap_number, if_false; | 318 Capture<Node*> branch, heap_number, if_false; |
317 EXPECT_THAT( | 319 EXPECT_THAT( |
318 r.replacement(), | 320 r.replacement(), |
319 IsPhi( | 321 IsPhi( |
320 kMachAnyTagged, | 322 kMachAnyTagged, |
321 IsWord32Shl(value, IsInt32Constant(kSmiTagSize + kSmiShiftSize)), | 323 IsWord32Shl(value, IsInt32Constant(kSmiTagSize + kSmiShiftSize)), |
322 IsFinish(AllOf(CaptureEq(&heap_number), | 324 IsFinishRegion( |
323 IsAllocateHeapNumber(_, CaptureEq(&if_false))), | 325 AllOf(CaptureEq(&heap_number), |
324 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), | 326 IsAllocateHeapNumber(_, CaptureEq(&if_false))), |
325 CaptureEq(&heap_number), | 327 IsStore( |
326 IsInt32Constant(HeapNumber::kValueOffset - | 328 StoreRepresentation(kMachFloat64, kNoWriteBarrier), |
327 kHeapObjectTag), | 329 CaptureEq(&heap_number), |
328 IsChangeUint32ToFloat64(value), | 330 IsInt32Constant(HeapNumber::kValueOffset - kHeapObjectTag), |
329 CaptureEq(&heap_number), CaptureEq(&if_false))), | 331 IsChangeUint32ToFloat64(value), CaptureEq(&heap_number), |
| 332 CaptureEq(&if_false))), |
330 IsMerge(IsIfTrue(AllOf( | 333 IsMerge(IsIfTrue(AllOf( |
331 CaptureEq(&branch), | 334 CaptureEq(&branch), |
332 IsBranch(IsUint32LessThanOrEqual( | 335 IsBranch(IsUint32LessThanOrEqual( |
333 value, IsInt32Constant(Smi::kMaxValue)), | 336 value, IsInt32Constant(Smi::kMaxValue)), |
334 graph()->start()))), | 337 graph()->start()))), |
335 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); | 338 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); |
336 } | 339 } |
337 | 340 |
338 | 341 |
339 // ----------------------------------------------------------------------------- | 342 // ----------------------------------------------------------------------------- |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 Node* node = graph()->NewNode(simplified()->ChangeUint32ToTagged(), value); | 439 Node* node = graph()->NewNode(simplified()->ChangeUint32ToTagged(), value); |
437 Reduction r = Reduce(node); | 440 Reduction r = Reduce(node); |
438 ASSERT_TRUE(r.Changed()); | 441 ASSERT_TRUE(r.Changed()); |
439 Capture<Node*> branch, heap_number, if_false; | 442 Capture<Node*> branch, heap_number, if_false; |
440 EXPECT_THAT( | 443 EXPECT_THAT( |
441 r.replacement(), | 444 r.replacement(), |
442 IsPhi( | 445 IsPhi( |
443 kMachAnyTagged, | 446 kMachAnyTagged, |
444 IsWord64Shl(IsChangeUint32ToUint64(value), | 447 IsWord64Shl(IsChangeUint32ToUint64(value), |
445 IsInt64Constant(kSmiTagSize + kSmiShiftSize)), | 448 IsInt64Constant(kSmiTagSize + kSmiShiftSize)), |
446 IsFinish(AllOf(CaptureEq(&heap_number), | 449 IsFinishRegion( |
447 IsAllocateHeapNumber(_, CaptureEq(&if_false))), | 450 AllOf(CaptureEq(&heap_number), |
448 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), | 451 IsAllocateHeapNumber(_, CaptureEq(&if_false))), |
449 CaptureEq(&heap_number), | 452 IsStore( |
450 IsInt64Constant(HeapNumber::kValueOffset - | 453 StoreRepresentation(kMachFloat64, kNoWriteBarrier), |
451 kHeapObjectTag), | 454 CaptureEq(&heap_number), |
452 IsChangeUint32ToFloat64(value), | 455 IsInt64Constant(HeapNumber::kValueOffset - kHeapObjectTag), |
453 CaptureEq(&heap_number), CaptureEq(&if_false))), | 456 IsChangeUint32ToFloat64(value), CaptureEq(&heap_number), |
| 457 CaptureEq(&if_false))), |
454 IsMerge(IsIfTrue(AllOf( | 458 IsMerge(IsIfTrue(AllOf( |
455 CaptureEq(&branch), | 459 CaptureEq(&branch), |
456 IsBranch(IsUint32LessThanOrEqual( | 460 IsBranch(IsUint32LessThanOrEqual( |
457 value, IsInt32Constant(Smi::kMaxValue)), | 461 value, IsInt32Constant(Smi::kMaxValue)), |
458 graph()->start()))), | 462 graph()->start()))), |
459 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); | 463 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); |
460 } | 464 } |
461 | 465 |
462 } // namespace compiler | 466 } // namespace compiler |
463 } // namespace internal | 467 } // namespace internal |
464 } // namespace v8 | 468 } // namespace v8 |
OLD | NEW |