25 MachineOperatorBuilder machine;
28 SimplifiedOperatorReducer reducer(&jsgraph);
29 return reducer.Reduce(node);
42 public ::testing::WithParamInterface<T> {
53 -
V8_INFINITY, -6.52696e+290, -1.05768e+290, -5.34203e+268, -1.01997e+268,
54 -8.22758e+266, -1.58402e+261, -5.15246e+241, -5.92107e+226, -1.21477e+226,
55 -1.67913e+188, -1.6257e+184, -2.60043e+170, -2.52941e+168, -3.06033e+116,
56 -4.56201e+52, -3.56788e+50, -9.9066e+38, -3.07261e+31, -2.1271e+09,
57 -1.91489e+09, -1.73053e+09, -9.30675e+08, -26030, -20453,
58 -15790, -11699, -111, -97, -78,
59 -63, -58, -1.53858e-06, -2.98914e-12, -1.14741e-39,
60 -8.20347e-57, -1.48932e-59, -3.17692e-66, -8.93103e-81, -3.91337e-83,
61 -6.0489e-92, -8.83291e-113, -4.28266e-117, -1.92058e-178, -2.0567e-192,
62 -1.68167e-194, -1.51841e-214, -3.98738e-234, -7.31851e-242, -2.21875e-253,
63 -1.11612e-293, -0.0, 0.0, 2.22507e-308, 1.06526e-307,
64 4.16643e-227, 6.76624e-223, 2.0432e-197, 3.16254e-184, 1.37315e-173,
65 2.88603e-172, 1.54155e-99, 4.42923e-81, 1.40539e-73, 5.4462e-73,
66 1.24064e-58, 3.11167e-58, 2.75826e-39, 0.143815, 58,
67 67, 601, 7941, 11644, 13697,
68 25680, 29882, 1.32165e+08, 1.62439e+08, 4.16837e+08,
69 9.59097e+08, 1.32491e+09, 1.8728e+09, 1.0672e+17, 2.69606e+46,
70 1.98285e+79, 1.0098e+82, 7.93064e+88, 3.67444e+121, 9.36506e+123,
71 7.27954e+162, 3.05316e+168, 1.16171e+175, 1.64771e+189, 1.1622e+202,
72 2.00748e+239, 2.51778e+244, 3.90282e+306, 1.79769e+308,
V8_INFINITY};
76 -2147483647 - 1, -2104508227, -2103151830, -1435284490, -1378926425,
77 -1318814539, -1289388009, -1287537572, -1279026536, -1241605942,
78 -1226046939, -941837148, -779818051, -413830641, -245798087,
79 -184657557, -127145950, -105483328, -32325, -26653,
80 -23858, -23834, -22363, -19858, -19044,
81 -18744, -15528, -5309, -3372, -2093,
82 -104, -98, -97, -93, -84,
83 -80, -78, -76, -72, -58,
84 -57, -56, -55, -45, -40,
85 -34, -32, -25, -24, -5,
90 102, 103, 104, 106, 107,
91 109, 116, 122, 3653, 4485,
92 12405, 16504, 26262, 28704, 29755,
93 30554, 16476817, 605431957, 832401070, 873617242,
94 914205764, 1062628108, 1087581664, 1488498068, 1534668023,
95 1661587028, 1696896187, 1866841746, 2032089723, 2147483647};
99 0x0, 0x5, 0x8, 0xc, 0xd, 0x26,
100 0x28, 0x29, 0x30, 0x34, 0x3e, 0x42,
101 0x50, 0x5b, 0x63, 0x71, 0x77, 0x7c,
102 0x83, 0x88, 0x96, 0x9c, 0xa3, 0xfa,
103 0x7a7, 0x165d, 0x234d, 0x3acb, 0x43a5, 0x4573,
104 0x5b4f, 0x5f14, 0x6996, 0x6c6e, 0x7289, 0x7b9a,
105 0x7bc9, 0x86bb, 0xa839, 0xaa41, 0xb03b, 0xc942,
106 0xce68, 0xcf4c, 0xd3ad, 0xdea3, 0xe90c, 0xed86,
107 0xfba5, 0x172dcc6, 0x114d8fc1, 0x182d6c9d, 0x1b1e3fad, 0x1db033bf,
108 0x1e1de755, 0x1f625c80, 0x28f6cf00, 0x2acb6a94, 0x2c20240e, 0x2f0fe54e,
109 0x31863a7c, 0x33325474, 0x3532fae3, 0x3bab82ea, 0x4c4b83a2, 0x4cd93d1e,
110 0x4f7331d4, 0x5491b09b, 0x57cc6ff9, 0x60d3b4dc, 0x653f5904, 0x690ae256,
111 0x69fe3276, 0x6bebf0ba, 0x6e2c69a3, 0x73b84ff7, 0x7b3a1924, 0x7ed032d9,
112 0x84dd734b, 0x8552ea53, 0x8680754f, 0x8e9660eb, 0x94fe2b9c, 0x972d30cf,
113 0x9b98c482, 0xb158667e, 0xb432932c, 0xb5b70989, 0xb669971a, 0xb7c359d1,
114 0xbeb15c0d, 0xc171c53d, 0xc743dd38, 0xc8e2af50, 0xc98e2df0, 0xd9d1cdf9,
115 0xdcc91049, 0xe46f396d, 0xee991950, 0xef64e521, 0xf7aeefc9, 0xffffffff};
118 MATCHER(IsNaN, std::string(negation ?
"isn't" :
"is") +
" NaN") {
119 return std::isnan(arg);
143 {&SimplifiedOperatorBuilder::BooleanNot,
"BooleanNot"},
144 {&SimplifiedOperatorBuilder::ChangeBitToBool,
"ChangeBitToBool"},
145 {&SimplifiedOperatorBuilder::ChangeBoolToBit,
"ChangeBoolToBit"},
146 {&SimplifiedOperatorBuilder::ChangeFloat64ToTagged,
147 "ChangeFloat64ToTagged"},
148 {&SimplifiedOperatorBuilder::ChangeInt32ToTagged,
"ChangeInt32ToTagged"},
149 {&SimplifiedOperatorBuilder::ChangeTaggedToFloat64,
150 "ChangeTaggedToFloat64"},
151 {&SimplifiedOperatorBuilder::ChangeTaggedToInt32,
"ChangeTaggedToInt32"},
152 {&SimplifiedOperatorBuilder::ChangeTaggedToUint32,
"ChangeTaggedToUint32"},
153 {&SimplifiedOperatorBuilder::ChangeUint32ToTagged,
"ChangeUint32ToTagged"}};
158 typedef SimplifiedOperatorReducerTestWithParam<UnaryOperator>
163 const UnaryOperator& unop = GetParam();
164 Reduction reduction = Reduce(
165 graph()->NewNode((simplified()->*unop.constructor)(), Parameter(0)));
166 EXPECT_FALSE(reduction.Changed());
180 Node* param0 = Parameter(0);
181 Reduction reduction = Reduce(
182 graph()->NewNode(simplified()->BooleanNot(),
183 graph()->NewNode(simplified()->BooleanNot(), param0)));
184 ASSERT_TRUE(reduction.Changed());
185 EXPECT_EQ(param0, reduction.replacement());
190 Reduction reduction0 =
191 Reduce(graph()->NewNode(simplified()->BooleanNot(), FalseConstant()));
192 ASSERT_TRUE(reduction0.Changed());
193 EXPECT_THAT(reduction0.replacement(), IsTrueConstant());
198 Reduction reduction1 =
199 Reduce(graph()->NewNode(simplified()->BooleanNot(), TrueConstant()));
200 ASSERT_TRUE(reduction1.Changed());
201 EXPECT_THAT(reduction1.replacement(), IsFalseConstant());
210 Node* param0 = Parameter(0);
211 Reduction reduction = Reduce(graph()->NewNode(
212 simplified()->ChangeBitToBool(),
213 graph()->NewNode(simplified()->ChangeBoolToBit(), param0)));
214 ASSERT_TRUE(reduction.Changed());
215 EXPECT_EQ(param0, reduction.replacement());
220 Reduction reduction = Reduce(
221 graph()->NewNode(simplified()->ChangeBitToBool(), Int32Constant(0)));
222 ASSERT_TRUE(reduction.Changed());
223 EXPECT_THAT(reduction.replacement(), IsFalseConstant());
228 Reduction reduction = Reduce(
229 graph()->NewNode(simplified()->ChangeBitToBool(), Int32Constant(1)));
230 ASSERT_TRUE(reduction.Changed());
231 EXPECT_THAT(reduction.replacement(), IsTrueConstant());
240 Reduction reduction = Reduce(
241 graph()->NewNode(simplified()->ChangeBoolToBit(), FalseConstant()));
242 ASSERT_TRUE(reduction.Changed());
248 Reduction reduction =
249 Reduce(graph()->NewNode(simplified()->ChangeBoolToBit(), TrueConstant()));
250 ASSERT_TRUE(reduction.Changed());
256 Node* param0 = Parameter(0);
257 Reduction reduction = Reduce(graph()->NewNode(
258 simplified()->ChangeBoolToBit(),
259 graph()->NewNode(simplified()->ChangeBitToBool(), param0)));
260 ASSERT_TRUE(reduction.Changed());
261 EXPECT_EQ(param0, reduction.replacement());
271 Reduction reduction = Reduce(graph()->NewNode(
272 simplified()->ChangeFloat64ToTagged(), Float64Constant(n)));
273 ASSERT_TRUE(reduction.Changed());
285 Reduction reduction = Reduce(graph()->NewNode(
286 simplified()->ChangeInt32ToTagged(), Int32Constant(n)));
287 ASSERT_TRUE(reduction.Changed());
298 ChangeTaggedToFloat64WithChangeFloat64ToTagged) {
299 Node* param0 = Parameter(0);
300 Reduction reduction = Reduce(graph()->NewNode(
301 simplified()->ChangeTaggedToFloat64(),
302 graph()->NewNode(simplified()->ChangeFloat64ToTagged(), param0)));
303 ASSERT_TRUE(reduction.Changed());
304 EXPECT_EQ(param0, reduction.replacement());
309 ChangeTaggedToFloat64WithChangeInt32ToTagged) {
310 Node* param0 = Parameter(0);
311 Reduction reduction = Reduce(graph()->NewNode(
312 simplified()->ChangeTaggedToFloat64(),
313 graph()->NewNode(simplified()->ChangeInt32ToTagged(), param0)));
314 ASSERT_TRUE(reduction.Changed());
320 ChangeTaggedToFloat64WithChangeUint32ToTagged) {
321 Node* param0 = Parameter(0);
322 Reduction reduction = Reduce(graph()->NewNode(
323 simplified()->ChangeTaggedToFloat64(),
324 graph()->NewNode(simplified()->ChangeUint32ToTagged(), param0)));
325 ASSERT_TRUE(reduction.Changed());
332 Reduction reduction = Reduce(graph()->NewNode(
333 simplified()->ChangeTaggedToFloat64(), NumberConstant(n)));
334 ASSERT_TRUE(reduction.Changed());
341 Reduction reduction =
342 Reduce(graph()->NewNode(simplified()->ChangeTaggedToFloat64(),
344 ASSERT_TRUE(reduction.Changed());
350 Reduction reduction =
351 Reduce(graph()->NewNode(simplified()->ChangeTaggedToFloat64(),
353 ASSERT_TRUE(reduction.Changed());
363 ChangeTaggedToInt32WithChangeFloat64ToTagged) {
364 Node* param0 = Parameter(0);
365 Reduction reduction = Reduce(graph()->NewNode(
366 simplified()->ChangeTaggedToInt32(),
367 graph()->NewNode(simplified()->ChangeFloat64ToTagged(), param0)));
368 ASSERT_TRUE(reduction.Changed());
374 ChangeTaggedToInt32WithChangeInt32ToTagged) {
375 Node* param0 = Parameter(0);
376 Reduction reduction = Reduce(graph()->NewNode(
377 simplified()->ChangeTaggedToInt32(),
378 graph()->NewNode(simplified()->ChangeInt32ToTagged(), param0)));
379 ASSERT_TRUE(reduction.Changed());
380 EXPECT_EQ(param0, reduction.replacement());
386 Reduction reduction = Reduce(graph()->NewNode(
387 simplified()->ChangeTaggedToInt32(), NumberConstant(n)));
388 ASSERT_TRUE(reduction.Changed());
395 Reduction reduction =
396 Reduce(graph()->NewNode(simplified()->ChangeTaggedToInt32(),
398 ASSERT_TRUE(reduction.Changed());
404 Reduction reduction =
405 Reduce(graph()->NewNode(simplified()->ChangeTaggedToInt32(),
407 ASSERT_TRUE(reduction.Changed());
417 ChangeTaggedToUint32WithChangeFloat64ToTagged) {
418 Node* param0 = Parameter(0);
419 Reduction reduction = Reduce(graph()->NewNode(
420 simplified()->ChangeTaggedToUint32(),
421 graph()->NewNode(simplified()->ChangeFloat64ToTagged(), param0)));
422 ASSERT_TRUE(reduction.Changed());
428 ChangeTaggedToUint32WithChangeUint32ToTagged) {
429 Node* param0 = Parameter(0);
430 Reduction reduction = Reduce(graph()->NewNode(
431 simplified()->ChangeTaggedToUint32(),
432 graph()->NewNode(simplified()->ChangeUint32ToTagged(), param0)));
433 ASSERT_TRUE(reduction.Changed());
434 EXPECT_EQ(param0, reduction.replacement());
440 Reduction reduction = Reduce(graph()->NewNode(
441 simplified()->ChangeTaggedToUint32(), NumberConstant(n)));
442 ASSERT_TRUE(reduction.Changed());
443 EXPECT_THAT(reduction.replacement(),
450 Reduction reduction =
451 Reduce(graph()->NewNode(simplified()->ChangeTaggedToUint32(),
453 ASSERT_TRUE(reduction.Changed());
459 Reduction reduction =
460 Reduce(graph()->NewNode(simplified()->ChangeTaggedToUint32(),
462 ASSERT_TRUE(reduction.Changed());
473 Reduction reduction =
474 Reduce(graph()->NewNode(simplified()->ChangeUint32ToTagged(),
475 Int32Constant(bit_cast<int32_t>(n))));
476 ASSERT_TRUE(reduction.Changed());
static double nan_value()
CommonOperatorBuilder * common()
virtual ~SimplifiedOperatorReducerTestWithParam()
SimplifiedOperatorReducerTestWithParam(int num_parameters=1)
SimplifiedOperatorReducerTest(int num_parameters=1)
SimplifiedOperatorBuilder simplified_
SimplifiedOperatorBuilder * simplified()
Reduction Reduce(Node *node)
virtual ~SimplifiedOperatorReducerTest()
static const int32_t kInt32Values[]
static const uint32_t kUint32Values[]
MATCHER(IsNaN, std::string(negation ? "isn't" :"is")+" NaN")
static const UnaryOperator kUnaryOperators[]
static const double kFloat64Values[]
Matcher< Node * > IsFloat64Constant(const Matcher< double > &value_matcher)
Matcher< Node * > IsChangeUint32ToFloat64(const Matcher< Node * > &input_matcher)
std::ostream & operator<<(std::ostream &os, const MachineType &type)
Matcher< Node * > IsNumberConstant(const Matcher< double > &value_matcher)
Matcher< Node * > IsChangeInt32ToFloat64(const Matcher< Node * > &input_matcher)
Matcher< Node * > IsInt32Constant(const Matcher< int32_t > &value_matcher)
TEST_P(InstructionSelectorDPITest, Parameters)
INSTANTIATE_TEST_CASE_P(InstructionSelectorTest, InstructionSelectorDPITest, ::testing::ValuesIn(kDPIs))
Matcher< Node * > IsChangeFloat64ToUint32(const Matcher< Node * > &input_matcher)
SimplifiedOperatorReducerTestWithParam< UnaryOperator > SimplifiedUnaryOperatorTest
TEST_F(InstructionSelectorTest, ChangeFloat32ToFloat64WithParameter)
Matcher< Node * > IsChangeFloat64ToInt32(const Matcher< Node * > &input_matcher)
uint32_t DoubleToUint32(double x)
int32_t DoubleToInt32(double x)
double FastUI2D(unsigned x)
Debugger support for the V8 JavaScript engine.
const char * constructor_name
const Operator *(SimplifiedOperatorBuilder::* constructor)()