| 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/access-builder.h" | 5 #include "src/compiler/access-builder.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/simplified-operator-reducer.h" | 9 #include "src/compiler/simplified-operator-reducer.h" |
| 10 #include "src/conversions.h" | 10 #include "src/conversions.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 0x69fe3276, 0x6bebf0ba, 0x6e2c69a3, 0x73b84ff7, 0x7b3a1924, 0x7ed032d9, | 117 0x69fe3276, 0x6bebf0ba, 0x6e2c69a3, 0x73b84ff7, 0x7b3a1924, 0x7ed032d9, |
| 118 0x84dd734b, 0x8552ea53, 0x8680754f, 0x8e9660eb, 0x94fe2b9c, 0x972d30cf, | 118 0x84dd734b, 0x8552ea53, 0x8680754f, 0x8e9660eb, 0x94fe2b9c, 0x972d30cf, |
| 119 0x9b98c482, 0xb158667e, 0xb432932c, 0xb5b70989, 0xb669971a, 0xb7c359d1, | 119 0x9b98c482, 0xb158667e, 0xb432932c, 0xb5b70989, 0xb669971a, 0xb7c359d1, |
| 120 0xbeb15c0d, 0xc171c53d, 0xc743dd38, 0xc8e2af50, 0xc98e2df0, 0xd9d1cdf9, | 120 0xbeb15c0d, 0xc171c53d, 0xc743dd38, 0xc8e2af50, 0xc98e2df0, 0xd9d1cdf9, |
| 121 0xdcc91049, 0xe46f396d, 0xee991950, 0xef64e521, 0xf7aeefc9, 0xffffffff}; | 121 0xdcc91049, 0xe46f396d, 0xee991950, 0xef64e521, 0xf7aeefc9, 0xffffffff}; |
| 122 | 122 |
| 123 } // namespace | 123 } // namespace |
| 124 | 124 |
| 125 | 125 |
| 126 // ----------------------------------------------------------------------------- | 126 // ----------------------------------------------------------------------------- |
| 127 // Unary operators | |
| 128 | |
| 129 | |
| 130 namespace { | |
| 131 | |
| 132 struct UnaryOperator { | |
| 133 const Operator* (SimplifiedOperatorBuilder::*constructor)(); | |
| 134 const char* constructor_name; | |
| 135 }; | |
| 136 | |
| 137 | |
| 138 std::ostream& operator<<(std::ostream& os, const UnaryOperator& unop) { | |
| 139 return os << unop.constructor_name; | |
| 140 } | |
| 141 | |
| 142 | |
| 143 static const UnaryOperator kUnaryOperators[] = { | |
| 144 {&SimplifiedOperatorBuilder::AnyToBoolean, "AnyToBoolean"}, | |
| 145 {&SimplifiedOperatorBuilder::BooleanNot, "BooleanNot"}, | |
| 146 {&SimplifiedOperatorBuilder::ChangeBitToBool, "ChangeBitToBool"}, | |
| 147 {&SimplifiedOperatorBuilder::ChangeBoolToBit, "ChangeBoolToBit"}, | |
| 148 {&SimplifiedOperatorBuilder::ChangeFloat64ToTagged, | |
| 149 "ChangeFloat64ToTagged"}, | |
| 150 {&SimplifiedOperatorBuilder::ChangeInt32ToTagged, "ChangeInt32ToTagged"}, | |
| 151 {&SimplifiedOperatorBuilder::ChangeTaggedToFloat64, | |
| 152 "ChangeTaggedToFloat64"}, | |
| 153 {&SimplifiedOperatorBuilder::ChangeTaggedToInt32, "ChangeTaggedToInt32"}, | |
| 154 {&SimplifiedOperatorBuilder::ChangeTaggedToUint32, "ChangeTaggedToUint32"}, | |
| 155 {&SimplifiedOperatorBuilder::ChangeUint32ToTagged, "ChangeUint32ToTagged"}}; | |
| 156 | |
| 157 } // namespace | |
| 158 | |
| 159 | |
| 160 typedef SimplifiedOperatorReducerTestWithParam<UnaryOperator> | |
| 161 SimplifiedUnaryOperatorTest; | |
| 162 | |
| 163 | |
| 164 TEST_P(SimplifiedUnaryOperatorTest, Parameter) { | |
| 165 const UnaryOperator& unop = GetParam(); | |
| 166 Reduction reduction = Reduce(graph()->NewNode( | |
| 167 (simplified()->*unop.constructor)(), Parameter(Type::Any()))); | |
| 168 EXPECT_FALSE(reduction.Changed()); | |
| 169 } | |
| 170 | |
| 171 | |
| 172 INSTANTIATE_TEST_CASE_P(SimplifiedOperatorReducerTest, | |
| 173 SimplifiedUnaryOperatorTest, | |
| 174 ::testing::ValuesIn(kUnaryOperators)); | |
| 175 | |
| 176 | |
| 177 // ----------------------------------------------------------------------------- | |
| 178 // AnyToBoolean | 127 // AnyToBoolean |
| 179 | 128 |
| 180 | 129 |
| 181 TEST_F(SimplifiedOperatorReducerTest, AnyToBooleanWithBoolean) { | 130 TEST_F(SimplifiedOperatorReducerTest, AnyToBooleanWithBoolean) { |
| 182 Node* p = Parameter(Type::Boolean()); | 131 Node* p = Parameter(Type::Boolean()); |
| 183 Reduction r = Reduce(graph()->NewNode(simplified()->AnyToBoolean(), p)); | 132 Reduction r = Reduce(graph()->NewNode(simplified()->AnyToBoolean(), p)); |
| 184 ASSERT_TRUE(r.Changed()); | 133 ASSERT_TRUE(r.Changed()); |
| 185 EXPECT_EQ(p, r.replacement()); | 134 EXPECT_EQ(p, r.replacement()); |
| 186 } | 135 } |
| 187 | 136 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 Node* param0 = Parameter(0); | 240 Node* param0 = Parameter(0); |
| 292 Reduction reduction = Reduce(graph()->NewNode( | 241 Reduction reduction = Reduce(graph()->NewNode( |
| 293 simplified()->ChangeBoolToBit(), | 242 simplified()->ChangeBoolToBit(), |
| 294 graph()->NewNode(simplified()->ChangeBitToBool(), param0))); | 243 graph()->NewNode(simplified()->ChangeBitToBool(), param0))); |
| 295 ASSERT_TRUE(reduction.Changed()); | 244 ASSERT_TRUE(reduction.Changed()); |
| 296 EXPECT_EQ(param0, reduction.replacement()); | 245 EXPECT_EQ(param0, reduction.replacement()); |
| 297 } | 246 } |
| 298 | 247 |
| 299 | 248 |
| 300 // ----------------------------------------------------------------------------- | 249 // ----------------------------------------------------------------------------- |
| 301 // ChangeWord32ToBit | |
| 302 | |
| 303 | |
| 304 TEST_F(SimplifiedOperatorReducerTest, ChangeWord32ToBitWithBitType) { | |
| 305 Handle<Object> zero = factory()->NewNumber(0); | |
| 306 Handle<Object> one = factory()->NewNumber(1); | |
| 307 Type* const kBitTypes[] = { | |
| 308 Type::Constant(zero, zone()), Type::Constant(one, zone()), | |
| 309 Type::Range(zero, zero, zone()), Type::Range(one, one, zone()), | |
| 310 Type::Range(zero, one, zone())}; | |
| 311 TRACED_FOREACH(Type*, type, kBitTypes) { | |
| 312 Node* param0 = Parameter(type, 0); | |
| 313 Reduction reduction = | |
| 314 Reduce(graph()->NewNode(simplified()->ChangeWord32ToBit(), param0)); | |
| 315 ASSERT_TRUE(reduction.Changed()); | |
| 316 EXPECT_EQ(param0, reduction.replacement()); | |
| 317 } | |
| 318 } | |
| 319 | |
| 320 | |
| 321 // ----------------------------------------------------------------------------- | |
| 322 // ChangeFloat64ToTagged | 250 // ChangeFloat64ToTagged |
| 323 | 251 |
| 324 | 252 |
| 325 TEST_F(SimplifiedOperatorReducerTest, ChangeFloat64ToTaggedWithConstant) { | 253 TEST_F(SimplifiedOperatorReducerTest, ChangeFloat64ToTaggedWithConstant) { |
| 326 TRACED_FOREACH(double, n, kFloat64Values) { | 254 TRACED_FOREACH(double, n, kFloat64Values) { |
| 327 Reduction reduction = Reduce(graph()->NewNode( | 255 Reduction reduction = Reduce(graph()->NewNode( |
| 328 simplified()->ChangeFloat64ToTagged(), Float64Constant(n))); | 256 simplified()->ChangeFloat64ToTagged(), Float64Constant(n))); |
| 329 ASSERT_TRUE(reduction.Changed()); | 257 ASSERT_TRUE(reduction.Changed()); |
| 330 EXPECT_THAT(reduction.replacement(), IsNumberConstant(BitEq(n))); | 258 EXPECT_THAT(reduction.replacement(), IsNumberConstant(BitEq(n))); |
| 331 } | 259 } |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 Reduce(graph()->NewNode(simplified()->ChangeUint32ToTagged(), | 460 Reduce(graph()->NewNode(simplified()->ChangeUint32ToTagged(), |
| 533 Int32Constant(bit_cast<int32_t>(n)))); | 461 Int32Constant(bit_cast<int32_t>(n)))); |
| 534 ASSERT_TRUE(reduction.Changed()); | 462 ASSERT_TRUE(reduction.Changed()); |
| 535 EXPECT_THAT(reduction.replacement(), IsNumberConstant(BitEq(FastUI2D(n)))); | 463 EXPECT_THAT(reduction.replacement(), IsNumberConstant(BitEq(FastUI2D(n)))); |
| 536 } | 464 } |
| 537 } | 465 } |
| 538 | 466 |
| 539 } // namespace compiler | 467 } // namespace compiler |
| 540 } // namespace internal | 468 } // namespace internal |
| 541 } // namespace v8 | 469 } // namespace v8 |
| OLD | NEW |