Chromium Code Reviews| 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 <climits> | |
| 6 | |
| 5 #include "src/compiler/access-builder.h" | 7 #include "src/compiler/access-builder.h" |
| 6 #include "src/compiler/js-graph.h" | 8 #include "src/compiler/js-graph.h" |
| 7 #include "src/compiler/js-operator.h" | 9 #include "src/compiler/js-operator.h" |
| 8 #include "src/compiler/js-typed-lowering.h" | 10 #include "src/compiler/js-typed-lowering.h" |
| 9 #include "src/compiler/machine-operator.h" | 11 #include "src/compiler/machine-operator.h" |
| 10 #include "src/compiler/node-properties-inl.h" | 12 #include "src/compiler/node-properties-inl.h" |
| 11 #include "src/compiler/typer.h" | 13 #include "src/compiler/typer.h" |
| 12 #include "test/unittests/compiler/compiler-test-utils.h" | 14 #include "test/unittests/compiler/compiler-test-utils.h" |
| 13 #include "test/unittests/compiler/graph-unittest.h" | 15 #include "test/unittests/compiler/graph-unittest.h" |
| 14 #include "test/unittests/compiler/node-test-utils.h" | 16 #include "test/unittests/compiler/node-test-utils.h" |
| 17 #include "testing/gmock-support.h" | |
| 18 | |
| 19 using testing::IsNaN; | |
| 20 | |
| 15 | 21 |
| 16 namespace v8 { | 22 namespace v8 { |
| 17 namespace internal { | 23 namespace internal { |
| 18 namespace compiler { | 24 namespace compiler { |
| 19 | 25 |
| 20 namespace { | 26 namespace { |
| 21 | 27 |
| 22 const ExternalArrayType kExternalArrayTypes[] = { | 28 const ExternalArrayType kExternalArrayTypes[] = { |
| 23 kExternalUint8Array, kExternalInt8Array, kExternalUint16Array, | 29 kExternalUint8Array, kExternalInt8Array, kExternalUint16Array, |
| 24 kExternalInt16Array, kExternalUint32Array, kExternalInt32Array, | 30 kExternalInt16Array, kExternalUint32Array, kExternalInt32Array, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 } | 68 } |
| 63 | 69 |
| 64 JSOperatorBuilder* javascript() { return &javascript_; } | 70 JSOperatorBuilder* javascript() { return &javascript_; } |
| 65 | 71 |
| 66 private: | 72 private: |
| 67 JSOperatorBuilder javascript_; | 73 JSOperatorBuilder javascript_; |
| 68 }; | 74 }; |
| 69 | 75 |
| 70 | 76 |
| 71 // ----------------------------------------------------------------------------- | 77 // ----------------------------------------------------------------------------- |
| 78 // Constant propagation | |
| 79 | |
| 80 | |
| 81 TEST_F(JSTypedLoweringTest, ParameterWithMinusZero) { | |
| 82 Reduction r = Reduce(Parameter(Type::MinusZero())); | |
| 83 ASSERT_TRUE(r.Changed()); | |
| 84 EXPECT_THAT(r.replacement(), IsNumberConstant(-0.0)); | |
| 85 } | |
|
Jarin
2015/01/05 09:41:21
Could we have test checking that type 0 <union> -0
Benedikt Meurer
2015/01/05 12:37:12
Done.
| |
| 86 | |
| 87 | |
| 88 TEST_F(JSTypedLoweringTest, ParameterWithNaN) { | |
| 89 Reduction r = Reduce(Parameter(Type::NaN())); | |
| 90 ASSERT_TRUE(r.Changed()); | |
| 91 EXPECT_THAT(r.replacement(), IsNumberConstant(IsNaN())); | |
| 92 } | |
| 93 | |
| 94 | |
| 95 TEST_F(JSTypedLoweringTest, ParameterWithSingletonRange) { | |
| 96 static const double kValues[] = { | |
| 97 -V8_INFINITY, INT_MIN, -1000.0, -42.0, -1.0, 0.0, | |
| 98 1.0, 42.0, 1000.0, INT_MAX, UINT_MAX, +V8_INFINITY}; | |
| 99 TRACED_FOREACH(double, value, kValues) { | |
| 100 Handle<Object> constant = factory()->NewNumber(value); | |
| 101 Reduction r = Reduce(Parameter(Type::Range(constant, constant, zone()))); | |
| 102 ASSERT_TRUE(r.Changed()); | |
| 103 EXPECT_THAT(r.replacement(), IsNumberConstant(value)); | |
| 104 } | |
| 105 } | |
| 106 | |
| 107 | |
| 108 // ----------------------------------------------------------------------------- | |
| 72 // JSToBoolean | 109 // JSToBoolean |
| 73 | 110 |
| 74 | 111 |
| 75 TEST_F(JSTypedLoweringTest, JSToBooleanWithBoolean) { | 112 TEST_F(JSTypedLoweringTest, JSToBooleanWithBoolean) { |
| 76 Node* input = Parameter(Type::Boolean()); | 113 Node* input = Parameter(Type::Boolean()); |
| 77 Node* context = UndefinedConstant(); | 114 Node* context = UndefinedConstant(); |
| 78 | 115 |
| 79 Reduction r = | 116 Reduction r = |
| 80 Reduce(graph()->NewNode(javascript()->ToBoolean(), input, context)); | 117 Reduce(graph()->NewNode(javascript()->ToBoolean(), input, context)); |
| 81 ASSERT_TRUE(r.Changed()); | 118 ASSERT_TRUE(r.Changed()); |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 626 IsStoreElement( | 663 IsStoreElement( |
| 627 access, IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])), | 664 access, IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])), |
| 628 key, value, effect, control)); | 665 key, value, effect, control)); |
| 629 } | 666 } |
| 630 } | 667 } |
| 631 } | 668 } |
| 632 | 669 |
| 633 } // namespace compiler | 670 } // namespace compiler |
| 634 } // namespace internal | 671 } // namespace internal |
| 635 } // namespace v8 | 672 } // namespace v8 |
| OLD | NEW |