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/change-lowering.h" | 5 #include "src/compiler/change-lowering.h" |
6 #include "src/compiler/js-graph.h" | 6 #include "src/compiler/js-graph.h" |
7 #include "src/compiler/node-properties-inl.h" | 7 #include "src/compiler/node-properties-inl.h" |
8 #include "src/compiler/simplified-operator.h" | 8 #include "src/compiler/simplified-operator.h" |
9 #include "src/compiler/typer.h" | 9 #include "src/compiler/typer.h" |
10 #include "test/unittests/compiler/compiler-test-utils.h" | 10 #include "test/unittests/compiler/compiler-test-utils.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 Reduction reduction = Reduce(node); | 153 Reduction reduction = Reduce(node); |
154 ASSERT_TRUE(reduction.Changed()); | 154 ASSERT_TRUE(reduction.Changed()); |
155 | 155 |
156 Node* finish = reduction.replacement(); | 156 Node* finish = reduction.replacement(); |
157 Capture<Node*> heap_number; | 157 Capture<Node*> heap_number; |
158 EXPECT_THAT( | 158 EXPECT_THAT( |
159 finish, | 159 finish, |
160 IsFinish( | 160 IsFinish( |
161 AllOf(CaptureEq(&heap_number), | 161 AllOf(CaptureEq(&heap_number), |
162 IsAllocateHeapNumber(IsValueEffect(val), graph()->start())), | 162 IsAllocateHeapNumber(IsValueEffect(val), graph()->start())), |
163 IsStore(kMachFloat64, kNoWriteBarrier, CaptureEq(&heap_number), | 163 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), |
| 164 CaptureEq(&heap_number), |
164 IsInt32Constant(HeapNumberValueOffset()), val, | 165 IsInt32Constant(HeapNumberValueOffset()), val, |
165 CaptureEq(&heap_number), graph()->start()))); | 166 CaptureEq(&heap_number), graph()->start()))); |
166 } | 167 } |
167 | 168 |
168 | 169 |
169 TARGET_TEST_P(ChangeLoweringCommonTest, StringAdd) { | 170 TARGET_TEST_P(ChangeLoweringCommonTest, StringAdd) { |
170 Node* node = | 171 Node* node = |
171 graph()->NewNode(simplified()->StringAdd(), Parameter(0), Parameter(1)); | 172 graph()->NewNode(simplified()->StringAdd(), Parameter(0), Parameter(1)); |
172 Reduction reduction = Reduce(node); | 173 Reduction reduction = Reduce(node); |
173 EXPECT_FALSE(reduction.Changed()); | 174 EXPECT_FALSE(reduction.Changed()); |
(...skipping 21 matching lines...) Expand all Loading... |
195 Node* val = Parameter(0); | 196 Node* val = Parameter(0); |
196 Node* node = graph()->NewNode(simplified()->ChangeInt32ToTagged(), val); | 197 Node* node = graph()->NewNode(simplified()->ChangeInt32ToTagged(), val); |
197 Reduction reduction = Reduce(node); | 198 Reduction reduction = Reduce(node); |
198 ASSERT_TRUE(reduction.Changed()); | 199 ASSERT_TRUE(reduction.Changed()); |
199 | 200 |
200 Node* phi = reduction.replacement(); | 201 Node* phi = reduction.replacement(); |
201 Capture<Node*> add, branch, heap_number, if_true; | 202 Capture<Node*> add, branch, heap_number, if_true; |
202 EXPECT_THAT( | 203 EXPECT_THAT( |
203 phi, | 204 phi, |
204 IsPhi(kMachAnyTagged, | 205 IsPhi(kMachAnyTagged, |
205 IsFinish( | 206 IsFinish(AllOf(CaptureEq(&heap_number), |
206 AllOf(CaptureEq(&heap_number), | 207 IsAllocateHeapNumber(_, CaptureEq(&if_true))), |
207 IsAllocateHeapNumber(_, CaptureEq(&if_true))), | 208 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), |
208 IsStore(kMachFloat64, kNoWriteBarrier, CaptureEq(&heap_number), | 209 CaptureEq(&heap_number), |
209 IsInt32Constant(HeapNumberValueOffset()), | 210 IsInt32Constant(HeapNumberValueOffset()), |
210 IsChangeInt32ToFloat64(val), CaptureEq(&heap_number), | 211 IsChangeInt32ToFloat64(val), |
211 CaptureEq(&if_true))), | 212 CaptureEq(&heap_number), CaptureEq(&if_true))), |
212 IsProjection( | 213 IsProjection( |
213 0, AllOf(CaptureEq(&add), IsInt32AddWithOverflow(val, val))), | 214 0, AllOf(CaptureEq(&add), IsInt32AddWithOverflow(val, val))), |
214 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))), | 215 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))), |
215 IsIfFalse(AllOf(CaptureEq(&branch), | 216 IsIfFalse(AllOf(CaptureEq(&branch), |
216 IsBranch(IsProjection(1, CaptureEq(&add)), | 217 IsBranch(IsProjection(1, CaptureEq(&add)), |
217 graph()->start())))))); | 218 graph()->start())))))); |
218 } | 219 } |
219 | 220 |
220 | 221 |
221 TARGET_TEST_F(ChangeLowering32Test, ChangeTaggedToFloat64) { | 222 TARGET_TEST_F(ChangeLowering32Test, ChangeTaggedToFloat64) { |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 Node* node = graph()->NewNode(simplified()->ChangeUint32ToTagged(), val); | 302 Node* node = graph()->NewNode(simplified()->ChangeUint32ToTagged(), val); |
302 Reduction reduction = Reduce(node); | 303 Reduction reduction = Reduce(node); |
303 ASSERT_TRUE(reduction.Changed()); | 304 ASSERT_TRUE(reduction.Changed()); |
304 | 305 |
305 Node* phi = reduction.replacement(); | 306 Node* phi = reduction.replacement(); |
306 Capture<Node*> branch, heap_number, if_false; | 307 Capture<Node*> branch, heap_number, if_false; |
307 EXPECT_THAT( | 308 EXPECT_THAT( |
308 phi, | 309 phi, |
309 IsPhi( | 310 IsPhi( |
310 kMachAnyTagged, IsWord32Shl(val, IsInt32Constant(SmiShiftAmount())), | 311 kMachAnyTagged, IsWord32Shl(val, IsInt32Constant(SmiShiftAmount())), |
311 IsFinish( | 312 IsFinish(AllOf(CaptureEq(&heap_number), |
312 AllOf(CaptureEq(&heap_number), | 313 IsAllocateHeapNumber(_, CaptureEq(&if_false))), |
313 IsAllocateHeapNumber(_, CaptureEq(&if_false))), | 314 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), |
314 IsStore(kMachFloat64, kNoWriteBarrier, CaptureEq(&heap_number), | 315 CaptureEq(&heap_number), |
315 IsInt32Constant(HeapNumberValueOffset()), | 316 IsInt32Constant(HeapNumberValueOffset()), |
316 IsChangeUint32ToFloat64(val), CaptureEq(&heap_number), | 317 IsChangeUint32ToFloat64(val), |
317 CaptureEq(&if_false))), | 318 CaptureEq(&heap_number), CaptureEq(&if_false))), |
318 IsMerge( | 319 IsMerge( |
319 IsIfTrue(AllOf(CaptureEq(&branch), | 320 IsIfTrue(AllOf(CaptureEq(&branch), |
320 IsBranch(IsUint32LessThanOrEqual( | 321 IsBranch(IsUint32LessThanOrEqual( |
321 val, IsInt32Constant(SmiMaxValue())), | 322 val, IsInt32Constant(SmiMaxValue())), |
322 graph()->start()))), | 323 graph()->start()))), |
323 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); | 324 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); |
324 } | 325 } |
325 | 326 |
326 | 327 |
327 // ----------------------------------------------------------------------------- | 328 // ----------------------------------------------------------------------------- |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 Reduction reduction = Reduce(node); | 436 Reduction reduction = Reduce(node); |
436 ASSERT_TRUE(reduction.Changed()); | 437 ASSERT_TRUE(reduction.Changed()); |
437 | 438 |
438 Node* phi = reduction.replacement(); | 439 Node* phi = reduction.replacement(); |
439 Capture<Node*> branch, heap_number, if_false; | 440 Capture<Node*> branch, heap_number, if_false; |
440 EXPECT_THAT( | 441 EXPECT_THAT( |
441 phi, | 442 phi, |
442 IsPhi( | 443 IsPhi( |
443 kMachAnyTagged, IsWord64Shl(IsChangeUint32ToUint64(val), | 444 kMachAnyTagged, IsWord64Shl(IsChangeUint32ToUint64(val), |
444 IsInt32Constant(SmiShiftAmount())), | 445 IsInt32Constant(SmiShiftAmount())), |
445 IsFinish( | 446 IsFinish(AllOf(CaptureEq(&heap_number), |
446 AllOf(CaptureEq(&heap_number), | 447 IsAllocateHeapNumber(_, CaptureEq(&if_false))), |
447 IsAllocateHeapNumber(_, CaptureEq(&if_false))), | 448 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), |
448 IsStore(kMachFloat64, kNoWriteBarrier, CaptureEq(&heap_number), | 449 CaptureEq(&heap_number), |
449 IsInt32Constant(HeapNumberValueOffset()), | 450 IsInt32Constant(HeapNumberValueOffset()), |
450 IsChangeUint32ToFloat64(val), CaptureEq(&heap_number), | 451 IsChangeUint32ToFloat64(val), |
451 CaptureEq(&if_false))), | 452 CaptureEq(&heap_number), CaptureEq(&if_false))), |
452 IsMerge( | 453 IsMerge( |
453 IsIfTrue(AllOf(CaptureEq(&branch), | 454 IsIfTrue(AllOf(CaptureEq(&branch), |
454 IsBranch(IsUint32LessThanOrEqual( | 455 IsBranch(IsUint32LessThanOrEqual( |
455 val, IsInt32Constant(SmiMaxValue())), | 456 val, IsInt32Constant(SmiMaxValue())), |
456 graph()->start()))), | 457 graph()->start()))), |
457 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); | 458 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); |
458 } | 459 } |
459 | 460 |
460 } // namespace compiler | 461 } // namespace compiler |
461 } // namespace internal | 462 } // namespace internal |
462 } // namespace v8 | 463 } // namespace v8 |
OLD | NEW |