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/js-builtin-reducer.h" | 5 #include "src/compiler/js-builtin-reducer.h" |
6 #include "src/compiler/js-graph.h" | 6 #include "src/compiler/js-graph.h" |
7 #include "src/compiler/node-properties.h" | 7 #include "src/compiler/node-properties.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 "src/isolate-inl.h" | 10 #include "src/isolate-inl.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 | 116 |
117 TEST_F(JSBuiltinReducerTest, GlobalIsFiniteWithNumber) { | 117 TEST_F(JSBuiltinReducerTest, GlobalIsFiniteWithNumber) { |
118 Node* function = GlobalFunction("isFinite"); | 118 Node* function = GlobalFunction("isFinite"); |
119 | 119 |
120 Node* effect = graph()->start(); | 120 Node* effect = graph()->start(); |
121 Node* control = graph()->start(); | 121 Node* control = graph()->start(); |
122 Node* context = UndefinedConstant(); | 122 Node* context = UndefinedConstant(); |
123 Node* frame_state = graph()->start(); | 123 Node* frame_state = graph()->start(); |
124 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 124 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
125 Node* p0 = Parameter(t0, 0); | 125 Node* p0 = Parameter(t0, 0); |
126 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 126 Node* call = |
127 UndefinedConstant(), p0, context, frame_state, | 127 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
128 effect, control); | 128 p0, context, frame_state, effect, control); |
129 Reduction r = Reduce(call); | 129 Reduction r = Reduce(call); |
130 | 130 |
131 ASSERT_TRUE(r.Changed()); | 131 ASSERT_TRUE(r.Changed()); |
132 EXPECT_THAT(r.replacement(), IsNumberEqual(IsNumberSubtract(p0, p0), | 132 EXPECT_THAT(r.replacement(), IsNumberEqual(IsNumberSubtract(p0, p0), |
133 IsNumberSubtract(p0, p0))); | 133 IsNumberSubtract(p0, p0))); |
134 } | 134 } |
135 } | 135 } |
136 | 136 |
137 TEST_F(JSBuiltinReducerTest, GlobalIsFiniteWithPlainPrimitive) { | 137 TEST_F(JSBuiltinReducerTest, GlobalIsFiniteWithPlainPrimitive) { |
138 Node* function = GlobalFunction("isFinite"); | 138 Node* function = GlobalFunction("isFinite"); |
139 | 139 |
140 Node* effect = graph()->start(); | 140 Node* effect = graph()->start(); |
141 Node* control = graph()->start(); | 141 Node* control = graph()->start(); |
142 Node* context = UndefinedConstant(); | 142 Node* context = UndefinedConstant(); |
143 Node* frame_state = graph()->start(); | 143 Node* frame_state = graph()->start(); |
144 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 144 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
145 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 145 Node* call = |
146 UndefinedConstant(), p0, context, frame_state, | 146 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
147 effect, control); | 147 context, frame_state, effect, control); |
148 Reduction r = Reduce(call); | 148 Reduction r = Reduce(call); |
149 | 149 |
150 ASSERT_TRUE(r.Changed()); | 150 ASSERT_TRUE(r.Changed()); |
151 EXPECT_THAT(r.replacement(), | 151 EXPECT_THAT(r.replacement(), |
152 IsNumberEqual(IsNumberSubtract(IsPlainPrimitiveToNumber(p0), | 152 IsNumberEqual(IsNumberSubtract(IsPlainPrimitiveToNumber(p0), |
153 IsPlainPrimitiveToNumber(p0)), | 153 IsPlainPrimitiveToNumber(p0)), |
154 IsNumberSubtract(IsPlainPrimitiveToNumber(p0), | 154 IsNumberSubtract(IsPlainPrimitiveToNumber(p0), |
155 IsPlainPrimitiveToNumber(p0)))); | 155 IsPlainPrimitiveToNumber(p0)))); |
156 } | 156 } |
157 | 157 |
158 // ----------------------------------------------------------------------------- | 158 // ----------------------------------------------------------------------------- |
159 // isNaN | 159 // isNaN |
160 | 160 |
161 TEST_F(JSBuiltinReducerTest, GlobalIsNaNWithNumber) { | 161 TEST_F(JSBuiltinReducerTest, GlobalIsNaNWithNumber) { |
162 Node* function = GlobalFunction("isNaN"); | 162 Node* function = GlobalFunction("isNaN"); |
163 | 163 |
164 Node* effect = graph()->start(); | 164 Node* effect = graph()->start(); |
165 Node* control = graph()->start(); | 165 Node* control = graph()->start(); |
166 Node* context = UndefinedConstant(); | 166 Node* context = UndefinedConstant(); |
167 Node* frame_state = graph()->start(); | 167 Node* frame_state = graph()->start(); |
168 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 168 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
169 Node* p0 = Parameter(t0, 0); | 169 Node* p0 = Parameter(t0, 0); |
170 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 170 Node* call = |
171 UndefinedConstant(), p0, context, frame_state, | 171 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
172 effect, control); | 172 p0, context, frame_state, effect, control); |
173 Reduction r = Reduce(call); | 173 Reduction r = Reduce(call); |
174 | 174 |
175 ASSERT_TRUE(r.Changed()); | 175 ASSERT_TRUE(r.Changed()); |
176 EXPECT_THAT(r.replacement(), IsBooleanNot(IsNumberEqual(p0, p0))); | 176 EXPECT_THAT(r.replacement(), IsBooleanNot(IsNumberEqual(p0, p0))); |
177 } | 177 } |
178 } | 178 } |
179 | 179 |
180 TEST_F(JSBuiltinReducerTest, GlobalIsNaNWithPlainPrimitive) { | 180 TEST_F(JSBuiltinReducerTest, GlobalIsNaNWithPlainPrimitive) { |
181 Node* function = GlobalFunction("isNaN"); | 181 Node* function = GlobalFunction("isNaN"); |
182 | 182 |
183 Node* effect = graph()->start(); | 183 Node* effect = graph()->start(); |
184 Node* control = graph()->start(); | 184 Node* control = graph()->start(); |
185 Node* context = UndefinedConstant(); | 185 Node* context = UndefinedConstant(); |
186 Node* frame_state = graph()->start(); | 186 Node* frame_state = graph()->start(); |
187 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 187 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
188 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 188 Node* call = |
189 UndefinedConstant(), p0, context, frame_state, | 189 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
190 effect, control); | 190 context, frame_state, effect, control); |
191 Reduction r = Reduce(call); | 191 Reduction r = Reduce(call); |
192 | 192 |
193 ASSERT_TRUE(r.Changed()); | 193 ASSERT_TRUE(r.Changed()); |
194 EXPECT_THAT(r.replacement(), | 194 EXPECT_THAT(r.replacement(), |
195 IsBooleanNot(IsNumberEqual(IsPlainPrimitiveToNumber(p0), | 195 IsBooleanNot(IsNumberEqual(IsPlainPrimitiveToNumber(p0), |
196 IsPlainPrimitiveToNumber(p0)))); | 196 IsPlainPrimitiveToNumber(p0)))); |
197 } | 197 } |
198 | 198 |
199 // ----------------------------------------------------------------------------- | 199 // ----------------------------------------------------------------------------- |
200 // Math.abs | 200 // Math.abs |
201 | 201 |
202 TEST_F(JSBuiltinReducerTest, MathAbsWithNumber) { | 202 TEST_F(JSBuiltinReducerTest, MathAbsWithNumber) { |
203 Node* function = MathFunction("abs"); | 203 Node* function = MathFunction("abs"); |
204 | 204 |
205 Node* effect = graph()->start(); | 205 Node* effect = graph()->start(); |
206 Node* control = graph()->start(); | 206 Node* control = graph()->start(); |
207 Node* context = UndefinedConstant(); | 207 Node* context = UndefinedConstant(); |
208 Node* frame_state = graph()->start(); | 208 Node* frame_state = graph()->start(); |
209 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 209 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
210 Node* p0 = Parameter(t0, 0); | 210 Node* p0 = Parameter(t0, 0); |
211 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 211 Node* call = |
212 UndefinedConstant(), p0, context, frame_state, | 212 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
213 effect, control); | 213 p0, context, frame_state, effect, control); |
214 Reduction r = Reduce(call); | 214 Reduction r = Reduce(call); |
215 | 215 |
216 ASSERT_TRUE(r.Changed()); | 216 ASSERT_TRUE(r.Changed()); |
217 EXPECT_THAT(r.replacement(), IsNumberAbs(p0)); | 217 EXPECT_THAT(r.replacement(), IsNumberAbs(p0)); |
218 } | 218 } |
219 } | 219 } |
220 | 220 |
221 TEST_F(JSBuiltinReducerTest, MathAbsWithPlainPrimitive) { | 221 TEST_F(JSBuiltinReducerTest, MathAbsWithPlainPrimitive) { |
222 Node* function = MathFunction("abs"); | 222 Node* function = MathFunction("abs"); |
223 | 223 |
224 Node* effect = graph()->start(); | 224 Node* effect = graph()->start(); |
225 Node* control = graph()->start(); | 225 Node* control = graph()->start(); |
226 Node* context = UndefinedConstant(); | 226 Node* context = UndefinedConstant(); |
227 Node* frame_state = graph()->start(); | 227 Node* frame_state = graph()->start(); |
228 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 228 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
229 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 229 Node* call = |
230 UndefinedConstant(), p0, context, frame_state, | 230 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
231 effect, control); | 231 context, frame_state, effect, control); |
232 Reduction r = Reduce(call); | 232 Reduction r = Reduce(call); |
233 | 233 |
234 ASSERT_TRUE(r.Changed()); | 234 ASSERT_TRUE(r.Changed()); |
235 EXPECT_THAT(r.replacement(), IsNumberAbs(IsPlainPrimitiveToNumber(p0))); | 235 EXPECT_THAT(r.replacement(), IsNumberAbs(IsPlainPrimitiveToNumber(p0))); |
236 } | 236 } |
237 | 237 |
238 // ----------------------------------------------------------------------------- | 238 // ----------------------------------------------------------------------------- |
239 // Math.acos | 239 // Math.acos |
240 | 240 |
241 TEST_F(JSBuiltinReducerTest, MathAcosWithNumber) { | 241 TEST_F(JSBuiltinReducerTest, MathAcosWithNumber) { |
242 Node* function = MathFunction("acos"); | 242 Node* function = MathFunction("acos"); |
243 | 243 |
244 Node* effect = graph()->start(); | 244 Node* effect = graph()->start(); |
245 Node* control = graph()->start(); | 245 Node* control = graph()->start(); |
246 Node* context = UndefinedConstant(); | 246 Node* context = UndefinedConstant(); |
247 Node* frame_state = graph()->start(); | 247 Node* frame_state = graph()->start(); |
248 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 248 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
249 Node* p0 = Parameter(t0, 0); | 249 Node* p0 = Parameter(t0, 0); |
250 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 250 Node* call = |
251 UndefinedConstant(), p0, context, frame_state, | 251 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
252 effect, control); | 252 p0, context, frame_state, effect, control); |
253 Reduction r = Reduce(call); | 253 Reduction r = Reduce(call); |
254 | 254 |
255 ASSERT_TRUE(r.Changed()); | 255 ASSERT_TRUE(r.Changed()); |
256 EXPECT_THAT(r.replacement(), IsNumberAcos(p0)); | 256 EXPECT_THAT(r.replacement(), IsNumberAcos(p0)); |
257 } | 257 } |
258 } | 258 } |
259 | 259 |
260 TEST_F(JSBuiltinReducerTest, MathAcosWithPlainPrimitive) { | 260 TEST_F(JSBuiltinReducerTest, MathAcosWithPlainPrimitive) { |
261 Node* function = MathFunction("acos"); | 261 Node* function = MathFunction("acos"); |
262 | 262 |
263 Node* effect = graph()->start(); | 263 Node* effect = graph()->start(); |
264 Node* control = graph()->start(); | 264 Node* control = graph()->start(); |
265 Node* context = UndefinedConstant(); | 265 Node* context = UndefinedConstant(); |
266 Node* frame_state = graph()->start(); | 266 Node* frame_state = graph()->start(); |
267 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 267 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
268 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 268 Node* call = |
269 UndefinedConstant(), p0, context, frame_state, | 269 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
270 effect, control); | 270 context, frame_state, effect, control); |
271 Reduction r = Reduce(call); | 271 Reduction r = Reduce(call); |
272 | 272 |
273 ASSERT_TRUE(r.Changed()); | 273 ASSERT_TRUE(r.Changed()); |
274 EXPECT_THAT(r.replacement(), IsNumberAcos(IsPlainPrimitiveToNumber(p0))); | 274 EXPECT_THAT(r.replacement(), IsNumberAcos(IsPlainPrimitiveToNumber(p0))); |
275 } | 275 } |
276 | 276 |
277 // ----------------------------------------------------------------------------- | 277 // ----------------------------------------------------------------------------- |
278 // Math.acosh | 278 // Math.acosh |
279 | 279 |
280 TEST_F(JSBuiltinReducerTest, MathAcoshWithNumber) { | 280 TEST_F(JSBuiltinReducerTest, MathAcoshWithNumber) { |
281 Node* function = MathFunction("acosh"); | 281 Node* function = MathFunction("acosh"); |
282 | 282 |
283 Node* effect = graph()->start(); | 283 Node* effect = graph()->start(); |
284 Node* control = graph()->start(); | 284 Node* control = graph()->start(); |
285 Node* context = UndefinedConstant(); | 285 Node* context = UndefinedConstant(); |
286 Node* frame_state = graph()->start(); | 286 Node* frame_state = graph()->start(); |
287 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 287 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
288 Node* p0 = Parameter(t0, 0); | 288 Node* p0 = Parameter(t0, 0); |
289 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 289 Node* call = |
290 UndefinedConstant(), p0, context, frame_state, | 290 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
291 effect, control); | 291 p0, context, frame_state, effect, control); |
292 Reduction r = Reduce(call); | 292 Reduction r = Reduce(call); |
293 | 293 |
294 ASSERT_TRUE(r.Changed()); | 294 ASSERT_TRUE(r.Changed()); |
295 EXPECT_THAT(r.replacement(), IsNumberAcosh(p0)); | 295 EXPECT_THAT(r.replacement(), IsNumberAcosh(p0)); |
296 } | 296 } |
297 } | 297 } |
298 | 298 |
299 TEST_F(JSBuiltinReducerTest, MathAcoshWithPlainPrimitive) { | 299 TEST_F(JSBuiltinReducerTest, MathAcoshWithPlainPrimitive) { |
300 Node* function = MathFunction("acosh"); | 300 Node* function = MathFunction("acosh"); |
301 | 301 |
302 Node* effect = graph()->start(); | 302 Node* effect = graph()->start(); |
303 Node* control = graph()->start(); | 303 Node* control = graph()->start(); |
304 Node* context = UndefinedConstant(); | 304 Node* context = UndefinedConstant(); |
305 Node* frame_state = graph()->start(); | 305 Node* frame_state = graph()->start(); |
306 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 306 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
307 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 307 Node* call = |
308 UndefinedConstant(), p0, context, frame_state, | 308 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
309 effect, control); | 309 context, frame_state, effect, control); |
310 Reduction r = Reduce(call); | 310 Reduction r = Reduce(call); |
311 | 311 |
312 ASSERT_TRUE(r.Changed()); | 312 ASSERT_TRUE(r.Changed()); |
313 EXPECT_THAT(r.replacement(), IsNumberAcosh(IsPlainPrimitiveToNumber(p0))); | 313 EXPECT_THAT(r.replacement(), IsNumberAcosh(IsPlainPrimitiveToNumber(p0))); |
314 } | 314 } |
315 | 315 |
316 // ----------------------------------------------------------------------------- | 316 // ----------------------------------------------------------------------------- |
317 // Math.asin | 317 // Math.asin |
318 | 318 |
319 TEST_F(JSBuiltinReducerTest, MathAsinWithNumber) { | 319 TEST_F(JSBuiltinReducerTest, MathAsinWithNumber) { |
320 Node* function = MathFunction("asin"); | 320 Node* function = MathFunction("asin"); |
321 | 321 |
322 Node* effect = graph()->start(); | 322 Node* effect = graph()->start(); |
323 Node* control = graph()->start(); | 323 Node* control = graph()->start(); |
324 Node* context = UndefinedConstant(); | 324 Node* context = UndefinedConstant(); |
325 Node* frame_state = graph()->start(); | 325 Node* frame_state = graph()->start(); |
326 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 326 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
327 Node* p0 = Parameter(t0, 0); | 327 Node* p0 = Parameter(t0, 0); |
328 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 328 Node* call = |
329 UndefinedConstant(), p0, context, frame_state, | 329 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
330 effect, control); | 330 p0, context, frame_state, effect, control); |
331 Reduction r = Reduce(call); | 331 Reduction r = Reduce(call); |
332 | 332 |
333 ASSERT_TRUE(r.Changed()); | 333 ASSERT_TRUE(r.Changed()); |
334 EXPECT_THAT(r.replacement(), IsNumberAsin(p0)); | 334 EXPECT_THAT(r.replacement(), IsNumberAsin(p0)); |
335 } | 335 } |
336 } | 336 } |
337 | 337 |
338 TEST_F(JSBuiltinReducerTest, MathAsinWithPlainPrimitive) { | 338 TEST_F(JSBuiltinReducerTest, MathAsinWithPlainPrimitive) { |
339 Node* function = MathFunction("asin"); | 339 Node* function = MathFunction("asin"); |
340 | 340 |
341 Node* effect = graph()->start(); | 341 Node* effect = graph()->start(); |
342 Node* control = graph()->start(); | 342 Node* control = graph()->start(); |
343 Node* context = UndefinedConstant(); | 343 Node* context = UndefinedConstant(); |
344 Node* frame_state = graph()->start(); | 344 Node* frame_state = graph()->start(); |
345 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 345 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
346 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 346 Node* call = |
347 UndefinedConstant(), p0, context, frame_state, | 347 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
348 effect, control); | 348 context, frame_state, effect, control); |
349 Reduction r = Reduce(call); | 349 Reduction r = Reduce(call); |
350 | 350 |
351 ASSERT_TRUE(r.Changed()); | 351 ASSERT_TRUE(r.Changed()); |
352 EXPECT_THAT(r.replacement(), IsNumberAsin(IsPlainPrimitiveToNumber(p0))); | 352 EXPECT_THAT(r.replacement(), IsNumberAsin(IsPlainPrimitiveToNumber(p0))); |
353 } | 353 } |
354 | 354 |
355 // ----------------------------------------------------------------------------- | 355 // ----------------------------------------------------------------------------- |
356 // Math.asinh | 356 // Math.asinh |
357 | 357 |
358 TEST_F(JSBuiltinReducerTest, MathAsinhWithNumber) { | 358 TEST_F(JSBuiltinReducerTest, MathAsinhWithNumber) { |
359 Node* function = MathFunction("asinh"); | 359 Node* function = MathFunction("asinh"); |
360 | 360 |
361 Node* effect = graph()->start(); | 361 Node* effect = graph()->start(); |
362 Node* control = graph()->start(); | 362 Node* control = graph()->start(); |
363 Node* context = UndefinedConstant(); | 363 Node* context = UndefinedConstant(); |
364 Node* frame_state = graph()->start(); | 364 Node* frame_state = graph()->start(); |
365 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 365 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
366 Node* p0 = Parameter(t0, 0); | 366 Node* p0 = Parameter(t0, 0); |
367 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 367 Node* call = |
368 UndefinedConstant(), p0, context, frame_state, | 368 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
369 effect, control); | 369 p0, context, frame_state, effect, control); |
370 Reduction r = Reduce(call); | 370 Reduction r = Reduce(call); |
371 | 371 |
372 ASSERT_TRUE(r.Changed()); | 372 ASSERT_TRUE(r.Changed()); |
373 EXPECT_THAT(r.replacement(), IsNumberAsinh(p0)); | 373 EXPECT_THAT(r.replacement(), IsNumberAsinh(p0)); |
374 } | 374 } |
375 } | 375 } |
376 | 376 |
377 TEST_F(JSBuiltinReducerTest, MathAsinhWithPlainPrimitive) { | 377 TEST_F(JSBuiltinReducerTest, MathAsinhWithPlainPrimitive) { |
378 Node* function = MathFunction("asinh"); | 378 Node* function = MathFunction("asinh"); |
379 | 379 |
380 Node* effect = graph()->start(); | 380 Node* effect = graph()->start(); |
381 Node* control = graph()->start(); | 381 Node* control = graph()->start(); |
382 Node* context = UndefinedConstant(); | 382 Node* context = UndefinedConstant(); |
383 Node* frame_state = graph()->start(); | 383 Node* frame_state = graph()->start(); |
384 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 384 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
385 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 385 Node* call = |
386 UndefinedConstant(), p0, context, frame_state, | 386 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
387 effect, control); | 387 context, frame_state, effect, control); |
388 Reduction r = Reduce(call); | 388 Reduction r = Reduce(call); |
389 | 389 |
390 ASSERT_TRUE(r.Changed()); | 390 ASSERT_TRUE(r.Changed()); |
391 EXPECT_THAT(r.replacement(), IsNumberAsinh(IsPlainPrimitiveToNumber(p0))); | 391 EXPECT_THAT(r.replacement(), IsNumberAsinh(IsPlainPrimitiveToNumber(p0))); |
392 } | 392 } |
393 | 393 |
394 // ----------------------------------------------------------------------------- | 394 // ----------------------------------------------------------------------------- |
395 // Math.atan | 395 // Math.atan |
396 | 396 |
397 TEST_F(JSBuiltinReducerTest, MathAtanWithNumber) { | 397 TEST_F(JSBuiltinReducerTest, MathAtanWithNumber) { |
398 Node* function = MathFunction("atan"); | 398 Node* function = MathFunction("atan"); |
399 | 399 |
400 Node* effect = graph()->start(); | 400 Node* effect = graph()->start(); |
401 Node* control = graph()->start(); | 401 Node* control = graph()->start(); |
402 Node* context = UndefinedConstant(); | 402 Node* context = UndefinedConstant(); |
403 Node* frame_state = graph()->start(); | 403 Node* frame_state = graph()->start(); |
404 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 404 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
405 Node* p0 = Parameter(t0, 0); | 405 Node* p0 = Parameter(t0, 0); |
406 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 406 Node* call = |
407 UndefinedConstant(), p0, context, frame_state, | 407 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
408 effect, control); | 408 p0, context, frame_state, effect, control); |
409 Reduction r = Reduce(call); | 409 Reduction r = Reduce(call); |
410 | 410 |
411 ASSERT_TRUE(r.Changed()); | 411 ASSERT_TRUE(r.Changed()); |
412 EXPECT_THAT(r.replacement(), IsNumberAtan(p0)); | 412 EXPECT_THAT(r.replacement(), IsNumberAtan(p0)); |
413 } | 413 } |
414 } | 414 } |
415 | 415 |
416 TEST_F(JSBuiltinReducerTest, MathAtanWithPlainPrimitive) { | 416 TEST_F(JSBuiltinReducerTest, MathAtanWithPlainPrimitive) { |
417 Node* function = MathFunction("atan"); | 417 Node* function = MathFunction("atan"); |
418 | 418 |
419 Node* effect = graph()->start(); | 419 Node* effect = graph()->start(); |
420 Node* control = graph()->start(); | 420 Node* control = graph()->start(); |
421 Node* context = UndefinedConstant(); | 421 Node* context = UndefinedConstant(); |
422 Node* frame_state = graph()->start(); | 422 Node* frame_state = graph()->start(); |
423 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 423 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
424 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 424 Node* call = |
425 UndefinedConstant(), p0, context, frame_state, | 425 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
426 effect, control); | 426 context, frame_state, effect, control); |
427 Reduction r = Reduce(call); | 427 Reduction r = Reduce(call); |
428 | 428 |
429 ASSERT_TRUE(r.Changed()); | 429 ASSERT_TRUE(r.Changed()); |
430 EXPECT_THAT(r.replacement(), IsNumberAtan(IsPlainPrimitiveToNumber(p0))); | 430 EXPECT_THAT(r.replacement(), IsNumberAtan(IsPlainPrimitiveToNumber(p0))); |
431 } | 431 } |
432 | 432 |
433 // ----------------------------------------------------------------------------- | 433 // ----------------------------------------------------------------------------- |
434 // Math.atanh | 434 // Math.atanh |
435 | 435 |
436 TEST_F(JSBuiltinReducerTest, MathAtanhWithNumber) { | 436 TEST_F(JSBuiltinReducerTest, MathAtanhWithNumber) { |
437 Node* function = MathFunction("atanh"); | 437 Node* function = MathFunction("atanh"); |
438 | 438 |
439 Node* effect = graph()->start(); | 439 Node* effect = graph()->start(); |
440 Node* control = graph()->start(); | 440 Node* control = graph()->start(); |
441 Node* context = UndefinedConstant(); | 441 Node* context = UndefinedConstant(); |
442 Node* frame_state = graph()->start(); | 442 Node* frame_state = graph()->start(); |
443 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 443 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
444 Node* p0 = Parameter(t0, 0); | 444 Node* p0 = Parameter(t0, 0); |
445 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 445 Node* call = |
446 UndefinedConstant(), p0, context, frame_state, | 446 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
447 effect, control); | 447 p0, context, frame_state, effect, control); |
448 Reduction r = Reduce(call); | 448 Reduction r = Reduce(call); |
449 | 449 |
450 ASSERT_TRUE(r.Changed()); | 450 ASSERT_TRUE(r.Changed()); |
451 EXPECT_THAT(r.replacement(), IsNumberAtanh(p0)); | 451 EXPECT_THAT(r.replacement(), IsNumberAtanh(p0)); |
452 } | 452 } |
453 } | 453 } |
454 | 454 |
455 TEST_F(JSBuiltinReducerTest, MathAtanhWithPlainPrimitive) { | 455 TEST_F(JSBuiltinReducerTest, MathAtanhWithPlainPrimitive) { |
456 Node* function = MathFunction("atanh"); | 456 Node* function = MathFunction("atanh"); |
457 | 457 |
458 Node* effect = graph()->start(); | 458 Node* effect = graph()->start(); |
459 Node* control = graph()->start(); | 459 Node* control = graph()->start(); |
460 Node* context = UndefinedConstant(); | 460 Node* context = UndefinedConstant(); |
461 Node* frame_state = graph()->start(); | 461 Node* frame_state = graph()->start(); |
462 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 462 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
463 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 463 Node* call = |
464 UndefinedConstant(), p0, context, frame_state, | 464 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
465 effect, control); | 465 context, frame_state, effect, control); |
466 Reduction r = Reduce(call); | 466 Reduction r = Reduce(call); |
467 | 467 |
468 ASSERT_TRUE(r.Changed()); | 468 ASSERT_TRUE(r.Changed()); |
469 EXPECT_THAT(r.replacement(), IsNumberAtanh(IsPlainPrimitiveToNumber(p0))); | 469 EXPECT_THAT(r.replacement(), IsNumberAtanh(IsPlainPrimitiveToNumber(p0))); |
470 } | 470 } |
471 | 471 |
472 // ----------------------------------------------------------------------------- | 472 // ----------------------------------------------------------------------------- |
473 // Math.atan2 | 473 // Math.atan2 |
474 | 474 |
475 TEST_F(JSBuiltinReducerTest, MathAtan2WithNumber) { | 475 TEST_F(JSBuiltinReducerTest, MathAtan2WithNumber) { |
476 Node* function = MathFunction("atan2"); | 476 Node* function = MathFunction("atan2"); |
477 | 477 |
478 Node* effect = graph()->start(); | 478 Node* effect = graph()->start(); |
479 Node* control = graph()->start(); | 479 Node* control = graph()->start(); |
480 Node* context = UndefinedConstant(); | 480 Node* context = UndefinedConstant(); |
481 Node* frame_state = graph()->start(); | 481 Node* frame_state = graph()->start(); |
482 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 482 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
483 Node* p0 = Parameter(t0, 0); | 483 Node* p0 = Parameter(t0, 0); |
484 TRACED_FOREACH(Type*, t1, kNumberTypes) { | 484 TRACED_FOREACH(Type*, t1, kNumberTypes) { |
485 Node* p1 = Parameter(t1, 0); | 485 Node* p1 = Parameter(t1, 0); |
486 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 486 Node* call = |
487 UndefinedConstant(), p0, p1, context, | 487 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), |
488 frame_state, effect, control); | 488 p0, p1, context, frame_state, effect, control); |
489 Reduction r = Reduce(call); | 489 Reduction r = Reduce(call); |
490 | 490 |
491 ASSERT_TRUE(r.Changed()); | 491 ASSERT_TRUE(r.Changed()); |
492 EXPECT_THAT(r.replacement(), IsNumberAtan2(p0, p1)); | 492 EXPECT_THAT(r.replacement(), IsNumberAtan2(p0, p1)); |
493 } | 493 } |
494 } | 494 } |
495 } | 495 } |
496 | 496 |
497 TEST_F(JSBuiltinReducerTest, MathAtan2WithPlainPrimitive) { | 497 TEST_F(JSBuiltinReducerTest, MathAtan2WithPlainPrimitive) { |
498 Node* function = MathFunction("atan2"); | 498 Node* function = MathFunction("atan2"); |
499 | 499 |
500 Node* effect = graph()->start(); | 500 Node* effect = graph()->start(); |
501 Node* control = graph()->start(); | 501 Node* control = graph()->start(); |
502 Node* context = UndefinedConstant(); | 502 Node* context = UndefinedConstant(); |
503 Node* frame_state = graph()->start(); | 503 Node* frame_state = graph()->start(); |
504 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 504 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
505 Node* p1 = Parameter(Type::PlainPrimitive(), 0); | 505 Node* p1 = Parameter(Type::PlainPrimitive(), 0); |
506 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 506 Node* call = |
507 UndefinedConstant(), p0, p1, context, | 507 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), p0, |
508 frame_state, effect, control); | 508 p1, context, frame_state, effect, control); |
509 Reduction r = Reduce(call); | 509 Reduction r = Reduce(call); |
510 | 510 |
511 ASSERT_TRUE(r.Changed()); | 511 ASSERT_TRUE(r.Changed()); |
512 EXPECT_THAT(r.replacement(), IsNumberAtan2(IsPlainPrimitiveToNumber(p0), | 512 EXPECT_THAT(r.replacement(), IsNumberAtan2(IsPlainPrimitiveToNumber(p0), |
513 IsPlainPrimitiveToNumber(p1))); | 513 IsPlainPrimitiveToNumber(p1))); |
514 } | 514 } |
515 | 515 |
516 // ----------------------------------------------------------------------------- | 516 // ----------------------------------------------------------------------------- |
517 // Math.ceil | 517 // Math.ceil |
518 | 518 |
519 TEST_F(JSBuiltinReducerTest, MathCeilWithNumber) { | 519 TEST_F(JSBuiltinReducerTest, MathCeilWithNumber) { |
520 Node* function = MathFunction("ceil"); | 520 Node* function = MathFunction("ceil"); |
521 | 521 |
522 Node* effect = graph()->start(); | 522 Node* effect = graph()->start(); |
523 Node* control = graph()->start(); | 523 Node* control = graph()->start(); |
524 Node* context = UndefinedConstant(); | 524 Node* context = UndefinedConstant(); |
525 Node* frame_state = graph()->start(); | 525 Node* frame_state = graph()->start(); |
526 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 526 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
527 Node* p0 = Parameter(t0, 0); | 527 Node* p0 = Parameter(t0, 0); |
528 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 528 Node* call = |
529 UndefinedConstant(), p0, context, frame_state, | 529 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
530 effect, control); | 530 p0, context, frame_state, effect, control); |
531 Reduction r = Reduce(call); | 531 Reduction r = Reduce(call); |
532 | 532 |
533 ASSERT_TRUE(r.Changed()); | 533 ASSERT_TRUE(r.Changed()); |
534 EXPECT_THAT(r.replacement(), IsNumberCeil(p0)); | 534 EXPECT_THAT(r.replacement(), IsNumberCeil(p0)); |
535 } | 535 } |
536 } | 536 } |
537 | 537 |
538 TEST_F(JSBuiltinReducerTest, MathCeilWithPlainPrimitive) { | 538 TEST_F(JSBuiltinReducerTest, MathCeilWithPlainPrimitive) { |
539 Node* function = MathFunction("ceil"); | 539 Node* function = MathFunction("ceil"); |
540 | 540 |
541 Node* effect = graph()->start(); | 541 Node* effect = graph()->start(); |
542 Node* control = graph()->start(); | 542 Node* control = graph()->start(); |
543 Node* context = UndefinedConstant(); | 543 Node* context = UndefinedConstant(); |
544 Node* frame_state = graph()->start(); | 544 Node* frame_state = graph()->start(); |
545 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 545 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
546 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 546 Node* call = |
547 UndefinedConstant(), p0, context, frame_state, | 547 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
548 effect, control); | 548 context, frame_state, effect, control); |
549 Reduction r = Reduce(call); | 549 Reduction r = Reduce(call); |
550 | 550 |
551 ASSERT_TRUE(r.Changed()); | 551 ASSERT_TRUE(r.Changed()); |
552 EXPECT_THAT(r.replacement(), IsNumberCeil(IsPlainPrimitiveToNumber(p0))); | 552 EXPECT_THAT(r.replacement(), IsNumberCeil(IsPlainPrimitiveToNumber(p0))); |
553 } | 553 } |
554 | 554 |
555 // ----------------------------------------------------------------------------- | 555 // ----------------------------------------------------------------------------- |
556 // Math.clz32 | 556 // Math.clz32 |
557 | 557 |
558 TEST_F(JSBuiltinReducerTest, MathClz32WithUnsigned32) { | 558 TEST_F(JSBuiltinReducerTest, MathClz32WithUnsigned32) { |
559 Node* function = MathFunction("clz32"); | 559 Node* function = MathFunction("clz32"); |
560 | 560 |
561 Node* effect = graph()->start(); | 561 Node* effect = graph()->start(); |
562 Node* control = graph()->start(); | 562 Node* control = graph()->start(); |
563 Node* context = UndefinedConstant(); | 563 Node* context = UndefinedConstant(); |
564 Node* frame_state = graph()->start(); | 564 Node* frame_state = graph()->start(); |
565 Node* p0 = Parameter(Type::Unsigned32(), 0); | 565 Node* p0 = Parameter(Type::Unsigned32(), 0); |
566 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 566 Node* call = |
567 UndefinedConstant(), p0, context, frame_state, | 567 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
568 effect, control); | 568 context, frame_state, effect, control); |
569 Reduction r = Reduce(call); | 569 Reduction r = Reduce(call); |
570 | 570 |
571 ASSERT_TRUE(r.Changed()); | 571 ASSERT_TRUE(r.Changed()); |
572 EXPECT_THAT(r.replacement(), IsNumberClz32(p0)); | 572 EXPECT_THAT(r.replacement(), IsNumberClz32(p0)); |
573 } | 573 } |
574 | 574 |
575 TEST_F(JSBuiltinReducerTest, MathClz32WithNumber) { | 575 TEST_F(JSBuiltinReducerTest, MathClz32WithNumber) { |
576 Node* function = MathFunction("clz32"); | 576 Node* function = MathFunction("clz32"); |
577 | 577 |
578 Node* effect = graph()->start(); | 578 Node* effect = graph()->start(); |
579 Node* control = graph()->start(); | 579 Node* control = graph()->start(); |
580 Node* context = UndefinedConstant(); | 580 Node* context = UndefinedConstant(); |
581 Node* frame_state = graph()->start(); | 581 Node* frame_state = graph()->start(); |
582 Node* p0 = Parameter(Type::Number(), 0); | 582 Node* p0 = Parameter(Type::Number(), 0); |
583 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 583 Node* call = |
584 UndefinedConstant(), p0, context, frame_state, | 584 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
585 effect, control); | 585 context, frame_state, effect, control); |
586 Reduction r = Reduce(call); | 586 Reduction r = Reduce(call); |
587 | 587 |
588 ASSERT_TRUE(r.Changed()); | 588 ASSERT_TRUE(r.Changed()); |
589 EXPECT_THAT(r.replacement(), IsNumberClz32(IsNumberToUint32(p0))); | 589 EXPECT_THAT(r.replacement(), IsNumberClz32(IsNumberToUint32(p0))); |
590 } | 590 } |
591 | 591 |
592 TEST_F(JSBuiltinReducerTest, MathClz32WithPlainPrimitive) { | 592 TEST_F(JSBuiltinReducerTest, MathClz32WithPlainPrimitive) { |
593 Node* function = MathFunction("clz32"); | 593 Node* function = MathFunction("clz32"); |
594 | 594 |
595 Node* effect = graph()->start(); | 595 Node* effect = graph()->start(); |
596 Node* control = graph()->start(); | 596 Node* control = graph()->start(); |
597 Node* context = UndefinedConstant(); | 597 Node* context = UndefinedConstant(); |
598 Node* frame_state = graph()->start(); | 598 Node* frame_state = graph()->start(); |
599 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 599 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
600 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 600 Node* call = |
601 UndefinedConstant(), p0, context, frame_state, | 601 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
602 effect, control); | 602 context, frame_state, effect, control); |
603 Reduction r = Reduce(call); | 603 Reduction r = Reduce(call); |
604 | 604 |
605 ASSERT_TRUE(r.Changed()); | 605 ASSERT_TRUE(r.Changed()); |
606 EXPECT_THAT(r.replacement(), | 606 EXPECT_THAT(r.replacement(), |
607 IsNumberClz32(IsNumberToUint32(IsPlainPrimitiveToNumber(p0)))); | 607 IsNumberClz32(IsNumberToUint32(IsPlainPrimitiveToNumber(p0)))); |
608 } | 608 } |
609 | 609 |
610 // ----------------------------------------------------------------------------- | 610 // ----------------------------------------------------------------------------- |
611 // Math.cos | 611 // Math.cos |
612 | 612 |
613 TEST_F(JSBuiltinReducerTest, MathCosWithNumber) { | 613 TEST_F(JSBuiltinReducerTest, MathCosWithNumber) { |
614 Node* function = MathFunction("cos"); | 614 Node* function = MathFunction("cos"); |
615 | 615 |
616 Node* effect = graph()->start(); | 616 Node* effect = graph()->start(); |
617 Node* control = graph()->start(); | 617 Node* control = graph()->start(); |
618 Node* context = UndefinedConstant(); | 618 Node* context = UndefinedConstant(); |
619 Node* frame_state = graph()->start(); | 619 Node* frame_state = graph()->start(); |
620 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 620 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
621 Node* p0 = Parameter(t0, 0); | 621 Node* p0 = Parameter(t0, 0); |
622 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 622 Node* call = |
623 UndefinedConstant(), p0, context, frame_state, | 623 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
624 effect, control); | 624 p0, context, frame_state, effect, control); |
625 Reduction r = Reduce(call); | 625 Reduction r = Reduce(call); |
626 | 626 |
627 ASSERT_TRUE(r.Changed()); | 627 ASSERT_TRUE(r.Changed()); |
628 EXPECT_THAT(r.replacement(), IsNumberCos(p0)); | 628 EXPECT_THAT(r.replacement(), IsNumberCos(p0)); |
629 } | 629 } |
630 } | 630 } |
631 | 631 |
632 TEST_F(JSBuiltinReducerTest, MathCosWithPlainPrimitive) { | 632 TEST_F(JSBuiltinReducerTest, MathCosWithPlainPrimitive) { |
633 Node* function = MathFunction("cos"); | 633 Node* function = MathFunction("cos"); |
634 | 634 |
635 Node* effect = graph()->start(); | 635 Node* effect = graph()->start(); |
636 Node* control = graph()->start(); | 636 Node* control = graph()->start(); |
637 Node* context = UndefinedConstant(); | 637 Node* context = UndefinedConstant(); |
638 Node* frame_state = graph()->start(); | 638 Node* frame_state = graph()->start(); |
639 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 639 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
640 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 640 Node* call = |
641 UndefinedConstant(), p0, context, frame_state, | 641 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
642 effect, control); | 642 context, frame_state, effect, control); |
643 Reduction r = Reduce(call); | 643 Reduction r = Reduce(call); |
644 | 644 |
645 ASSERT_TRUE(r.Changed()); | 645 ASSERT_TRUE(r.Changed()); |
646 EXPECT_THAT(r.replacement(), IsNumberCos(IsPlainPrimitiveToNumber(p0))); | 646 EXPECT_THAT(r.replacement(), IsNumberCos(IsPlainPrimitiveToNumber(p0))); |
647 } | 647 } |
648 | 648 |
649 // ----------------------------------------------------------------------------- | 649 // ----------------------------------------------------------------------------- |
650 // Math.cosh | 650 // Math.cosh |
651 | 651 |
652 TEST_F(JSBuiltinReducerTest, MathCoshWithNumber) { | 652 TEST_F(JSBuiltinReducerTest, MathCoshWithNumber) { |
653 Node* function = MathFunction("cosh"); | 653 Node* function = MathFunction("cosh"); |
654 | 654 |
655 Node* effect = graph()->start(); | 655 Node* effect = graph()->start(); |
656 Node* control = graph()->start(); | 656 Node* control = graph()->start(); |
657 Node* context = UndefinedConstant(); | 657 Node* context = UndefinedConstant(); |
658 Node* frame_state = graph()->start(); | 658 Node* frame_state = graph()->start(); |
659 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 659 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
660 Node* p0 = Parameter(t0, 0); | 660 Node* p0 = Parameter(t0, 0); |
661 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 661 Node* call = |
662 UndefinedConstant(), p0, context, frame_state, | 662 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
663 effect, control); | 663 p0, context, frame_state, effect, control); |
664 Reduction r = Reduce(call); | 664 Reduction r = Reduce(call); |
665 | 665 |
666 ASSERT_TRUE(r.Changed()); | 666 ASSERT_TRUE(r.Changed()); |
667 EXPECT_THAT(r.replacement(), IsNumberCosh(p0)); | 667 EXPECT_THAT(r.replacement(), IsNumberCosh(p0)); |
668 } | 668 } |
669 } | 669 } |
670 | 670 |
671 TEST_F(JSBuiltinReducerTest, MathCoshWithPlainPrimitive) { | 671 TEST_F(JSBuiltinReducerTest, MathCoshWithPlainPrimitive) { |
672 Node* function = MathFunction("cosh"); | 672 Node* function = MathFunction("cosh"); |
673 | 673 |
674 Node* effect = graph()->start(); | 674 Node* effect = graph()->start(); |
675 Node* control = graph()->start(); | 675 Node* control = graph()->start(); |
676 Node* context = UndefinedConstant(); | 676 Node* context = UndefinedConstant(); |
677 Node* frame_state = graph()->start(); | 677 Node* frame_state = graph()->start(); |
678 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 678 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
679 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 679 Node* call = |
680 UndefinedConstant(), p0, context, frame_state, | 680 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
681 effect, control); | 681 context, frame_state, effect, control); |
682 Reduction r = Reduce(call); | 682 Reduction r = Reduce(call); |
683 | 683 |
684 ASSERT_TRUE(r.Changed()); | 684 ASSERT_TRUE(r.Changed()); |
685 EXPECT_THAT(r.replacement(), IsNumberCosh(IsPlainPrimitiveToNumber(p0))); | 685 EXPECT_THAT(r.replacement(), IsNumberCosh(IsPlainPrimitiveToNumber(p0))); |
686 } | 686 } |
687 | 687 |
688 // ----------------------------------------------------------------------------- | 688 // ----------------------------------------------------------------------------- |
689 // Math.exp | 689 // Math.exp |
690 | 690 |
691 TEST_F(JSBuiltinReducerTest, MathExpWithNumber) { | 691 TEST_F(JSBuiltinReducerTest, MathExpWithNumber) { |
692 Node* function = MathFunction("exp"); | 692 Node* function = MathFunction("exp"); |
693 | 693 |
694 Node* effect = graph()->start(); | 694 Node* effect = graph()->start(); |
695 Node* control = graph()->start(); | 695 Node* control = graph()->start(); |
696 Node* context = UndefinedConstant(); | 696 Node* context = UndefinedConstant(); |
697 Node* frame_state = graph()->start(); | 697 Node* frame_state = graph()->start(); |
698 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 698 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
699 Node* p0 = Parameter(t0, 0); | 699 Node* p0 = Parameter(t0, 0); |
700 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 700 Node* call = |
701 UndefinedConstant(), p0, context, frame_state, | 701 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
702 effect, control); | 702 p0, context, frame_state, effect, control); |
703 Reduction r = Reduce(call); | 703 Reduction r = Reduce(call); |
704 | 704 |
705 ASSERT_TRUE(r.Changed()); | 705 ASSERT_TRUE(r.Changed()); |
706 EXPECT_THAT(r.replacement(), IsNumberExp(p0)); | 706 EXPECT_THAT(r.replacement(), IsNumberExp(p0)); |
707 } | 707 } |
708 } | 708 } |
709 | 709 |
710 TEST_F(JSBuiltinReducerTest, MathExpWithPlainPrimitive) { | 710 TEST_F(JSBuiltinReducerTest, MathExpWithPlainPrimitive) { |
711 Node* function = MathFunction("exp"); | 711 Node* function = MathFunction("exp"); |
712 | 712 |
713 Node* effect = graph()->start(); | 713 Node* effect = graph()->start(); |
714 Node* control = graph()->start(); | 714 Node* control = graph()->start(); |
715 Node* context = UndefinedConstant(); | 715 Node* context = UndefinedConstant(); |
716 Node* frame_state = graph()->start(); | 716 Node* frame_state = graph()->start(); |
717 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 717 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
718 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 718 Node* call = |
719 UndefinedConstant(), p0, context, frame_state, | 719 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
720 effect, control); | 720 context, frame_state, effect, control); |
721 Reduction r = Reduce(call); | 721 Reduction r = Reduce(call); |
722 | 722 |
723 ASSERT_TRUE(r.Changed()); | 723 ASSERT_TRUE(r.Changed()); |
724 EXPECT_THAT(r.replacement(), IsNumberExp(IsPlainPrimitiveToNumber(p0))); | 724 EXPECT_THAT(r.replacement(), IsNumberExp(IsPlainPrimitiveToNumber(p0))); |
725 } | 725 } |
726 | 726 |
727 // ----------------------------------------------------------------------------- | 727 // ----------------------------------------------------------------------------- |
728 // Math.floor | 728 // Math.floor |
729 | 729 |
730 TEST_F(JSBuiltinReducerTest, MathFloorWithNumber) { | 730 TEST_F(JSBuiltinReducerTest, MathFloorWithNumber) { |
731 Node* function = MathFunction("floor"); | 731 Node* function = MathFunction("floor"); |
732 | 732 |
733 Node* effect = graph()->start(); | 733 Node* effect = graph()->start(); |
734 Node* control = graph()->start(); | 734 Node* control = graph()->start(); |
735 Node* context = UndefinedConstant(); | 735 Node* context = UndefinedConstant(); |
736 Node* frame_state = graph()->start(); | 736 Node* frame_state = graph()->start(); |
737 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 737 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
738 Node* p0 = Parameter(t0, 0); | 738 Node* p0 = Parameter(t0, 0); |
739 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 739 Node* call = |
740 UndefinedConstant(), p0, context, frame_state, | 740 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
741 effect, control); | 741 p0, context, frame_state, effect, control); |
742 Reduction r = Reduce(call); | 742 Reduction r = Reduce(call); |
743 | 743 |
744 ASSERT_TRUE(r.Changed()); | 744 ASSERT_TRUE(r.Changed()); |
745 EXPECT_THAT(r.replacement(), IsNumberFloor(p0)); | 745 EXPECT_THAT(r.replacement(), IsNumberFloor(p0)); |
746 } | 746 } |
747 } | 747 } |
748 | 748 |
749 TEST_F(JSBuiltinReducerTest, MathFloorWithPlainPrimitive) { | 749 TEST_F(JSBuiltinReducerTest, MathFloorWithPlainPrimitive) { |
750 Node* function = MathFunction("floor"); | 750 Node* function = MathFunction("floor"); |
751 | 751 |
752 Node* effect = graph()->start(); | 752 Node* effect = graph()->start(); |
753 Node* control = graph()->start(); | 753 Node* control = graph()->start(); |
754 Node* context = UndefinedConstant(); | 754 Node* context = UndefinedConstant(); |
755 Node* frame_state = graph()->start(); | 755 Node* frame_state = graph()->start(); |
756 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 756 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
757 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 757 Node* call = |
758 UndefinedConstant(), p0, context, frame_state, | 758 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
759 effect, control); | 759 context, frame_state, effect, control); |
760 Reduction r = Reduce(call); | 760 Reduction r = Reduce(call); |
761 | 761 |
762 ASSERT_TRUE(r.Changed()); | 762 ASSERT_TRUE(r.Changed()); |
763 EXPECT_THAT(r.replacement(), IsNumberFloor(IsPlainPrimitiveToNumber(p0))); | 763 EXPECT_THAT(r.replacement(), IsNumberFloor(IsPlainPrimitiveToNumber(p0))); |
764 } | 764 } |
765 | 765 |
766 // ----------------------------------------------------------------------------- | 766 // ----------------------------------------------------------------------------- |
767 // Math.fround | 767 // Math.fround |
768 | 768 |
769 TEST_F(JSBuiltinReducerTest, MathFroundWithNumber) { | 769 TEST_F(JSBuiltinReducerTest, MathFroundWithNumber) { |
770 Node* function = MathFunction("fround"); | 770 Node* function = MathFunction("fround"); |
771 | 771 |
772 Node* effect = graph()->start(); | 772 Node* effect = graph()->start(); |
773 Node* control = graph()->start(); | 773 Node* control = graph()->start(); |
774 Node* context = UndefinedConstant(); | 774 Node* context = UndefinedConstant(); |
775 Node* frame_state = graph()->start(); | 775 Node* frame_state = graph()->start(); |
776 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 776 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
777 Node* p0 = Parameter(t0, 0); | 777 Node* p0 = Parameter(t0, 0); |
778 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 778 Node* call = |
779 UndefinedConstant(), p0, context, frame_state, | 779 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
780 effect, control); | 780 p0, context, frame_state, effect, control); |
781 Reduction r = Reduce(call); | 781 Reduction r = Reduce(call); |
782 | 782 |
783 ASSERT_TRUE(r.Changed()); | 783 ASSERT_TRUE(r.Changed()); |
784 EXPECT_THAT(r.replacement(), IsNumberFround(p0)); | 784 EXPECT_THAT(r.replacement(), IsNumberFround(p0)); |
785 } | 785 } |
786 } | 786 } |
787 | 787 |
788 TEST_F(JSBuiltinReducerTest, MathFroundWithPlainPrimitive) { | 788 TEST_F(JSBuiltinReducerTest, MathFroundWithPlainPrimitive) { |
789 Node* function = MathFunction("fround"); | 789 Node* function = MathFunction("fround"); |
790 | 790 |
791 Node* effect = graph()->start(); | 791 Node* effect = graph()->start(); |
792 Node* control = graph()->start(); | 792 Node* control = graph()->start(); |
793 Node* context = UndefinedConstant(); | 793 Node* context = UndefinedConstant(); |
794 Node* frame_state = graph()->start(); | 794 Node* frame_state = graph()->start(); |
795 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 795 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
796 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 796 Node* call = |
797 UndefinedConstant(), p0, context, frame_state, | 797 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
798 effect, control); | 798 context, frame_state, effect, control); |
799 Reduction r = Reduce(call); | 799 Reduction r = Reduce(call); |
800 | 800 |
801 ASSERT_TRUE(r.Changed()); | 801 ASSERT_TRUE(r.Changed()); |
802 EXPECT_THAT(r.replacement(), IsNumberFround(IsPlainPrimitiveToNumber(p0))); | 802 EXPECT_THAT(r.replacement(), IsNumberFround(IsPlainPrimitiveToNumber(p0))); |
803 } | 803 } |
804 | 804 |
805 // ----------------------------------------------------------------------------- | 805 // ----------------------------------------------------------------------------- |
806 // Math.imul | 806 // Math.imul |
807 | 807 |
808 TEST_F(JSBuiltinReducerTest, MathImulWithUnsigned32) { | 808 TEST_F(JSBuiltinReducerTest, MathImulWithUnsigned32) { |
809 Node* function = MathFunction("imul"); | 809 Node* function = MathFunction("imul"); |
810 | 810 |
811 Node* effect = graph()->start(); | 811 Node* effect = graph()->start(); |
812 Node* control = graph()->start(); | 812 Node* control = graph()->start(); |
813 Node* context = UndefinedConstant(); | 813 Node* context = UndefinedConstant(); |
814 Node* frame_state = graph()->start(); | 814 Node* frame_state = graph()->start(); |
815 Node* p0 = Parameter(Type::Unsigned32(), 0); | 815 Node* p0 = Parameter(Type::Unsigned32(), 0); |
816 Node* p1 = Parameter(Type::Unsigned32(), 1); | 816 Node* p1 = Parameter(Type::Unsigned32(), 1); |
817 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 817 Node* call = |
818 UndefinedConstant(), p0, p1, context, | 818 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), p0, |
819 frame_state, effect, control); | 819 p1, context, frame_state, effect, control); |
820 Reduction r = Reduce(call); | 820 Reduction r = Reduce(call); |
821 | 821 |
822 ASSERT_TRUE(r.Changed()); | 822 ASSERT_TRUE(r.Changed()); |
823 EXPECT_THAT(r.replacement(), IsNumberImul(p0, p1)); | 823 EXPECT_THAT(r.replacement(), IsNumberImul(p0, p1)); |
824 } | 824 } |
825 | 825 |
826 TEST_F(JSBuiltinReducerTest, MathImulWithNumber) { | 826 TEST_F(JSBuiltinReducerTest, MathImulWithNumber) { |
827 Node* function = MathFunction("imul"); | 827 Node* function = MathFunction("imul"); |
828 | 828 |
829 Node* effect = graph()->start(); | 829 Node* effect = graph()->start(); |
830 Node* control = graph()->start(); | 830 Node* control = graph()->start(); |
831 Node* context = UndefinedConstant(); | 831 Node* context = UndefinedConstant(); |
832 Node* frame_state = graph()->start(); | 832 Node* frame_state = graph()->start(); |
833 Node* p0 = Parameter(Type::Number(), 0); | 833 Node* p0 = Parameter(Type::Number(), 0); |
834 Node* p1 = Parameter(Type::Number(), 1); | 834 Node* p1 = Parameter(Type::Number(), 1); |
835 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 835 Node* call = |
836 UndefinedConstant(), p0, p1, context, | 836 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), p0, |
837 frame_state, effect, control); | 837 p1, context, frame_state, effect, control); |
838 Reduction r = Reduce(call); | 838 Reduction r = Reduce(call); |
839 | 839 |
840 ASSERT_TRUE(r.Changed()); | 840 ASSERT_TRUE(r.Changed()); |
841 EXPECT_THAT(r.replacement(), | 841 EXPECT_THAT(r.replacement(), |
842 IsNumberImul(IsNumberToUint32(p0), IsNumberToUint32(p1))); | 842 IsNumberImul(IsNumberToUint32(p0), IsNumberToUint32(p1))); |
843 } | 843 } |
844 | 844 |
845 TEST_F(JSBuiltinReducerTest, MathImulWithPlainPrimitive) { | 845 TEST_F(JSBuiltinReducerTest, MathImulWithPlainPrimitive) { |
846 Node* function = MathFunction("imul"); | 846 Node* function = MathFunction("imul"); |
847 | 847 |
848 Node* effect = graph()->start(); | 848 Node* effect = graph()->start(); |
849 Node* control = graph()->start(); | 849 Node* control = graph()->start(); |
850 Node* context = UndefinedConstant(); | 850 Node* context = UndefinedConstant(); |
851 Node* frame_state = graph()->start(); | 851 Node* frame_state = graph()->start(); |
852 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 852 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
853 Node* p1 = Parameter(Type::PlainPrimitive(), 1); | 853 Node* p1 = Parameter(Type::PlainPrimitive(), 1); |
854 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 854 Node* call = |
855 UndefinedConstant(), p0, p1, context, | 855 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), p0, |
856 frame_state, effect, control); | 856 p1, context, frame_state, effect, control); |
857 Reduction r = Reduce(call); | 857 Reduction r = Reduce(call); |
858 | 858 |
859 ASSERT_TRUE(r.Changed()); | 859 ASSERT_TRUE(r.Changed()); |
860 EXPECT_THAT(r.replacement(), | 860 EXPECT_THAT(r.replacement(), |
861 IsNumberImul(IsNumberToUint32(IsPlainPrimitiveToNumber(p0)), | 861 IsNumberImul(IsNumberToUint32(IsPlainPrimitiveToNumber(p0)), |
862 IsNumberToUint32(IsPlainPrimitiveToNumber(p1)))); | 862 IsNumberToUint32(IsPlainPrimitiveToNumber(p1)))); |
863 } | 863 } |
864 | 864 |
865 // ----------------------------------------------------------------------------- | 865 // ----------------------------------------------------------------------------- |
866 // Math.log | 866 // Math.log |
867 | 867 |
868 TEST_F(JSBuiltinReducerTest, MathLogWithNumber) { | 868 TEST_F(JSBuiltinReducerTest, MathLogWithNumber) { |
869 Node* function = MathFunction("log"); | 869 Node* function = MathFunction("log"); |
870 | 870 |
871 Node* effect = graph()->start(); | 871 Node* effect = graph()->start(); |
872 Node* control = graph()->start(); | 872 Node* control = graph()->start(); |
873 Node* context = UndefinedConstant(); | 873 Node* context = UndefinedConstant(); |
874 Node* frame_state = graph()->start(); | 874 Node* frame_state = graph()->start(); |
875 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 875 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
876 Node* p0 = Parameter(t0, 0); | 876 Node* p0 = Parameter(t0, 0); |
877 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 877 Node* call = |
878 UndefinedConstant(), p0, context, frame_state, | 878 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
879 effect, control); | 879 p0, context, frame_state, effect, control); |
880 Reduction r = Reduce(call); | 880 Reduction r = Reduce(call); |
881 | 881 |
882 ASSERT_TRUE(r.Changed()); | 882 ASSERT_TRUE(r.Changed()); |
883 EXPECT_THAT(r.replacement(), IsNumberLog(p0)); | 883 EXPECT_THAT(r.replacement(), IsNumberLog(p0)); |
884 } | 884 } |
885 } | 885 } |
886 | 886 |
887 TEST_F(JSBuiltinReducerTest, MathLogWithPlainPrimitive) { | 887 TEST_F(JSBuiltinReducerTest, MathLogWithPlainPrimitive) { |
888 Node* function = MathFunction("log"); | 888 Node* function = MathFunction("log"); |
889 | 889 |
890 Node* effect = graph()->start(); | 890 Node* effect = graph()->start(); |
891 Node* control = graph()->start(); | 891 Node* control = graph()->start(); |
892 Node* context = UndefinedConstant(); | 892 Node* context = UndefinedConstant(); |
893 Node* frame_state = graph()->start(); | 893 Node* frame_state = graph()->start(); |
894 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 894 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
895 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 895 Node* call = |
896 UndefinedConstant(), p0, context, frame_state, | 896 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
897 effect, control); | 897 context, frame_state, effect, control); |
898 Reduction r = Reduce(call); | 898 Reduction r = Reduce(call); |
899 | 899 |
900 ASSERT_TRUE(r.Changed()); | 900 ASSERT_TRUE(r.Changed()); |
901 EXPECT_THAT(r.replacement(), IsNumberLog(IsPlainPrimitiveToNumber(p0))); | 901 EXPECT_THAT(r.replacement(), IsNumberLog(IsPlainPrimitiveToNumber(p0))); |
902 } | 902 } |
903 | 903 |
904 // ----------------------------------------------------------------------------- | 904 // ----------------------------------------------------------------------------- |
905 // Math.log1p | 905 // Math.log1p |
906 | 906 |
907 TEST_F(JSBuiltinReducerTest, MathLog1pWithNumber) { | 907 TEST_F(JSBuiltinReducerTest, MathLog1pWithNumber) { |
908 Node* function = MathFunction("log1p"); | 908 Node* function = MathFunction("log1p"); |
909 | 909 |
910 Node* effect = graph()->start(); | 910 Node* effect = graph()->start(); |
911 Node* control = graph()->start(); | 911 Node* control = graph()->start(); |
912 Node* context = UndefinedConstant(); | 912 Node* context = UndefinedConstant(); |
913 Node* frame_state = graph()->start(); | 913 Node* frame_state = graph()->start(); |
914 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 914 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
915 Node* p0 = Parameter(t0, 0); | 915 Node* p0 = Parameter(t0, 0); |
916 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 916 Node* call = |
917 UndefinedConstant(), p0, context, frame_state, | 917 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
918 effect, control); | 918 p0, context, frame_state, effect, control); |
919 Reduction r = Reduce(call); | 919 Reduction r = Reduce(call); |
920 | 920 |
921 ASSERT_TRUE(r.Changed()); | 921 ASSERT_TRUE(r.Changed()); |
922 EXPECT_THAT(r.replacement(), IsNumberLog1p(p0)); | 922 EXPECT_THAT(r.replacement(), IsNumberLog1p(p0)); |
923 } | 923 } |
924 } | 924 } |
925 | 925 |
926 TEST_F(JSBuiltinReducerTest, MathLog1pWithPlainPrimitive) { | 926 TEST_F(JSBuiltinReducerTest, MathLog1pWithPlainPrimitive) { |
927 Node* function = MathFunction("log1p"); | 927 Node* function = MathFunction("log1p"); |
928 | 928 |
929 Node* effect = graph()->start(); | 929 Node* effect = graph()->start(); |
930 Node* control = graph()->start(); | 930 Node* control = graph()->start(); |
931 Node* context = UndefinedConstant(); | 931 Node* context = UndefinedConstant(); |
932 Node* frame_state = graph()->start(); | 932 Node* frame_state = graph()->start(); |
933 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 933 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
934 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 934 Node* call = |
935 UndefinedConstant(), p0, context, frame_state, | 935 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
936 effect, control); | 936 context, frame_state, effect, control); |
937 Reduction r = Reduce(call); | 937 Reduction r = Reduce(call); |
938 | 938 |
939 ASSERT_TRUE(r.Changed()); | 939 ASSERT_TRUE(r.Changed()); |
940 EXPECT_THAT(r.replacement(), IsNumberLog1p(IsPlainPrimitiveToNumber(p0))); | 940 EXPECT_THAT(r.replacement(), IsNumberLog1p(IsPlainPrimitiveToNumber(p0))); |
941 } | 941 } |
942 | 942 |
943 // ----------------------------------------------------------------------------- | 943 // ----------------------------------------------------------------------------- |
944 // Math.max | 944 // Math.max |
945 | 945 |
946 TEST_F(JSBuiltinReducerTest, MathMaxWithNoArguments) { | 946 TEST_F(JSBuiltinReducerTest, MathMaxWithNoArguments) { |
947 Node* function = MathFunction("max"); | 947 Node* function = MathFunction("max"); |
948 | 948 |
949 Node* effect = graph()->start(); | 949 Node* effect = graph()->start(); |
950 Node* control = graph()->start(); | 950 Node* control = graph()->start(); |
951 Node* context = UndefinedConstant(); | 951 Node* context = UndefinedConstant(); |
952 Node* frame_state = graph()->start(); | 952 Node* frame_state = graph()->start(); |
953 Node* call = graph()->NewNode(javascript()->CallFunction(2), function, | 953 Node* call = |
954 UndefinedConstant(), context, frame_state, | 954 graph()->NewNode(javascript()->Call(2), function, UndefinedConstant(), |
955 effect, control); | 955 context, frame_state, effect, control); |
956 Reduction r = Reduce(call); | 956 Reduction r = Reduce(call); |
957 | 957 |
958 ASSERT_TRUE(r.Changed()); | 958 ASSERT_TRUE(r.Changed()); |
959 EXPECT_THAT(r.replacement(), IsNumberConstant(-V8_INFINITY)); | 959 EXPECT_THAT(r.replacement(), IsNumberConstant(-V8_INFINITY)); |
960 } | 960 } |
961 | 961 |
962 TEST_F(JSBuiltinReducerTest, MathMaxWithNumber) { | 962 TEST_F(JSBuiltinReducerTest, MathMaxWithNumber) { |
963 Node* function = MathFunction("max"); | 963 Node* function = MathFunction("max"); |
964 | 964 |
965 Node* effect = graph()->start(); | 965 Node* effect = graph()->start(); |
966 Node* control = graph()->start(); | 966 Node* control = graph()->start(); |
967 Node* context = UndefinedConstant(); | 967 Node* context = UndefinedConstant(); |
968 Node* frame_state = graph()->start(); | 968 Node* frame_state = graph()->start(); |
969 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 969 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
970 Node* p0 = Parameter(t0, 0); | 970 Node* p0 = Parameter(t0, 0); |
971 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 971 Node* call = |
972 UndefinedConstant(), p0, context, frame_state, | 972 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
973 effect, control); | 973 p0, context, frame_state, effect, control); |
974 Reduction r = Reduce(call); | 974 Reduction r = Reduce(call); |
975 | 975 |
976 ASSERT_TRUE(r.Changed()); | 976 ASSERT_TRUE(r.Changed()); |
977 EXPECT_THAT(r.replacement(), p0); | 977 EXPECT_THAT(r.replacement(), p0); |
978 } | 978 } |
979 } | 979 } |
980 | 980 |
981 TEST_F(JSBuiltinReducerTest, MathMaxWithPlainPrimitive) { | 981 TEST_F(JSBuiltinReducerTest, MathMaxWithPlainPrimitive) { |
982 Node* function = MathFunction("max"); | 982 Node* function = MathFunction("max"); |
983 | 983 |
984 Node* effect = graph()->start(); | 984 Node* effect = graph()->start(); |
985 Node* control = graph()->start(); | 985 Node* control = graph()->start(); |
986 Node* context = UndefinedConstant(); | 986 Node* context = UndefinedConstant(); |
987 Node* frame_state = graph()->start(); | 987 Node* frame_state = graph()->start(); |
988 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 988 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
989 Node* p1 = Parameter(Type::PlainPrimitive(), 1); | 989 Node* p1 = Parameter(Type::PlainPrimitive(), 1); |
990 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 990 Node* call = |
991 UndefinedConstant(), p0, p1, context, | 991 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), p0, |
992 frame_state, effect, control); | 992 p1, context, frame_state, effect, control); |
993 Reduction r = Reduce(call); | 993 Reduction r = Reduce(call); |
994 | 994 |
995 ASSERT_TRUE(r.Changed()); | 995 ASSERT_TRUE(r.Changed()); |
996 EXPECT_THAT(r.replacement(), IsNumberMax(IsPlainPrimitiveToNumber(p0), | 996 EXPECT_THAT(r.replacement(), IsNumberMax(IsPlainPrimitiveToNumber(p0), |
997 IsPlainPrimitiveToNumber(p1))); | 997 IsPlainPrimitiveToNumber(p1))); |
998 } | 998 } |
999 | 999 |
1000 // ----------------------------------------------------------------------------- | 1000 // ----------------------------------------------------------------------------- |
1001 // Math.min | 1001 // Math.min |
1002 | 1002 |
1003 TEST_F(JSBuiltinReducerTest, MathMinWithNoArguments) { | 1003 TEST_F(JSBuiltinReducerTest, MathMinWithNoArguments) { |
1004 Node* function = MathFunction("min"); | 1004 Node* function = MathFunction("min"); |
1005 | 1005 |
1006 Node* effect = graph()->start(); | 1006 Node* effect = graph()->start(); |
1007 Node* control = graph()->start(); | 1007 Node* control = graph()->start(); |
1008 Node* context = UndefinedConstant(); | 1008 Node* context = UndefinedConstant(); |
1009 Node* frame_state = graph()->start(); | 1009 Node* frame_state = graph()->start(); |
1010 Node* call = graph()->NewNode(javascript()->CallFunction(2), function, | 1010 Node* call = |
1011 UndefinedConstant(), context, frame_state, | 1011 graph()->NewNode(javascript()->Call(2), function, UndefinedConstant(), |
1012 effect, control); | 1012 context, frame_state, effect, control); |
1013 Reduction r = Reduce(call); | 1013 Reduction r = Reduce(call); |
1014 | 1014 |
1015 ASSERT_TRUE(r.Changed()); | 1015 ASSERT_TRUE(r.Changed()); |
1016 EXPECT_THAT(r.replacement(), IsNumberConstant(V8_INFINITY)); | 1016 EXPECT_THAT(r.replacement(), IsNumberConstant(V8_INFINITY)); |
1017 } | 1017 } |
1018 | 1018 |
1019 TEST_F(JSBuiltinReducerTest, MathMinWithNumber) { | 1019 TEST_F(JSBuiltinReducerTest, MathMinWithNumber) { |
1020 Node* function = MathFunction("min"); | 1020 Node* function = MathFunction("min"); |
1021 | 1021 |
1022 Node* effect = graph()->start(); | 1022 Node* effect = graph()->start(); |
1023 Node* control = graph()->start(); | 1023 Node* control = graph()->start(); |
1024 Node* context = UndefinedConstant(); | 1024 Node* context = UndefinedConstant(); |
1025 Node* frame_state = graph()->start(); | 1025 Node* frame_state = graph()->start(); |
1026 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1026 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1027 Node* p0 = Parameter(t0, 0); | 1027 Node* p0 = Parameter(t0, 0); |
1028 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1028 Node* call = |
1029 UndefinedConstant(), p0, context, frame_state, | 1029 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1030 effect, control); | 1030 p0, context, frame_state, effect, control); |
1031 Reduction r = Reduce(call); | 1031 Reduction r = Reduce(call); |
1032 | 1032 |
1033 ASSERT_TRUE(r.Changed()); | 1033 ASSERT_TRUE(r.Changed()); |
1034 EXPECT_THAT(r.replacement(), p0); | 1034 EXPECT_THAT(r.replacement(), p0); |
1035 } | 1035 } |
1036 } | 1036 } |
1037 | 1037 |
1038 TEST_F(JSBuiltinReducerTest, MathMinWithPlainPrimitive) { | 1038 TEST_F(JSBuiltinReducerTest, MathMinWithPlainPrimitive) { |
1039 Node* function = MathFunction("min"); | 1039 Node* function = MathFunction("min"); |
1040 | 1040 |
1041 Node* effect = graph()->start(); | 1041 Node* effect = graph()->start(); |
1042 Node* control = graph()->start(); | 1042 Node* control = graph()->start(); |
1043 Node* context = UndefinedConstant(); | 1043 Node* context = UndefinedConstant(); |
1044 Node* frame_state = graph()->start(); | 1044 Node* frame_state = graph()->start(); |
1045 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1045 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1046 Node* p1 = Parameter(Type::PlainPrimitive(), 1); | 1046 Node* p1 = Parameter(Type::PlainPrimitive(), 1); |
1047 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 1047 Node* call = |
1048 UndefinedConstant(), p0, p1, context, | 1048 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), p0, |
1049 frame_state, effect, control); | 1049 p1, context, frame_state, effect, control); |
1050 Reduction r = Reduce(call); | 1050 Reduction r = Reduce(call); |
1051 | 1051 |
1052 ASSERT_TRUE(r.Changed()); | 1052 ASSERT_TRUE(r.Changed()); |
1053 EXPECT_THAT(r.replacement(), IsNumberMin(IsPlainPrimitiveToNumber(p0), | 1053 EXPECT_THAT(r.replacement(), IsNumberMin(IsPlainPrimitiveToNumber(p0), |
1054 IsPlainPrimitiveToNumber(p1))); | 1054 IsPlainPrimitiveToNumber(p1))); |
1055 } | 1055 } |
1056 | 1056 |
1057 // ----------------------------------------------------------------------------- | 1057 // ----------------------------------------------------------------------------- |
1058 // Math.round | 1058 // Math.round |
1059 | 1059 |
1060 TEST_F(JSBuiltinReducerTest, MathRoundWithNumber) { | 1060 TEST_F(JSBuiltinReducerTest, MathRoundWithNumber) { |
1061 Node* function = MathFunction("round"); | 1061 Node* function = MathFunction("round"); |
1062 | 1062 |
1063 Node* effect = graph()->start(); | 1063 Node* effect = graph()->start(); |
1064 Node* control = graph()->start(); | 1064 Node* control = graph()->start(); |
1065 Node* context = UndefinedConstant(); | 1065 Node* context = UndefinedConstant(); |
1066 Node* frame_state = graph()->start(); | 1066 Node* frame_state = graph()->start(); |
1067 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1067 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1068 Node* p0 = Parameter(t0, 0); | 1068 Node* p0 = Parameter(t0, 0); |
1069 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1069 Node* call = |
1070 UndefinedConstant(), p0, context, frame_state, | 1070 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1071 effect, control); | 1071 p0, context, frame_state, effect, control); |
1072 Reduction r = Reduce(call); | 1072 Reduction r = Reduce(call); |
1073 | 1073 |
1074 ASSERT_TRUE(r.Changed()); | 1074 ASSERT_TRUE(r.Changed()); |
1075 EXPECT_THAT(r.replacement(), IsNumberRound(p0)); | 1075 EXPECT_THAT(r.replacement(), IsNumberRound(p0)); |
1076 } | 1076 } |
1077 } | 1077 } |
1078 | 1078 |
1079 TEST_F(JSBuiltinReducerTest, MathRoundWithPlainPrimitive) { | 1079 TEST_F(JSBuiltinReducerTest, MathRoundWithPlainPrimitive) { |
1080 Node* function = MathFunction("round"); | 1080 Node* function = MathFunction("round"); |
1081 | 1081 |
1082 Node* effect = graph()->start(); | 1082 Node* effect = graph()->start(); |
1083 Node* control = graph()->start(); | 1083 Node* control = graph()->start(); |
1084 Node* context = UndefinedConstant(); | 1084 Node* context = UndefinedConstant(); |
1085 Node* frame_state = graph()->start(); | 1085 Node* frame_state = graph()->start(); |
1086 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1086 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1087 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1087 Node* call = |
1088 UndefinedConstant(), p0, context, frame_state, | 1088 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1089 effect, control); | 1089 context, frame_state, effect, control); |
1090 Reduction r = Reduce(call); | 1090 Reduction r = Reduce(call); |
1091 | 1091 |
1092 ASSERT_TRUE(r.Changed()); | 1092 ASSERT_TRUE(r.Changed()); |
1093 EXPECT_THAT(r.replacement(), IsNumberRound(IsPlainPrimitiveToNumber(p0))); | 1093 EXPECT_THAT(r.replacement(), IsNumberRound(IsPlainPrimitiveToNumber(p0))); |
1094 } | 1094 } |
1095 | 1095 |
1096 // ----------------------------------------------------------------------------- | 1096 // ----------------------------------------------------------------------------- |
1097 // Math.pow | 1097 // Math.pow |
1098 | 1098 |
1099 TEST_F(JSBuiltinReducerTest, MathPowWithNumber) { | 1099 TEST_F(JSBuiltinReducerTest, MathPowWithNumber) { |
1100 Node* function = MathFunction("pow"); | 1100 Node* function = MathFunction("pow"); |
1101 | 1101 |
1102 Node* effect = graph()->start(); | 1102 Node* effect = graph()->start(); |
1103 Node* control = graph()->start(); | 1103 Node* control = graph()->start(); |
1104 Node* context = UndefinedConstant(); | 1104 Node* context = UndefinedConstant(); |
1105 Node* frame_state = graph()->start(); | 1105 Node* frame_state = graph()->start(); |
1106 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1106 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1107 Node* p0 = Parameter(t0, 0); | 1107 Node* p0 = Parameter(t0, 0); |
1108 TRACED_FOREACH(Type*, t1, kNumberTypes) { | 1108 TRACED_FOREACH(Type*, t1, kNumberTypes) { |
1109 Node* p1 = Parameter(t1, 0); | 1109 Node* p1 = Parameter(t1, 0); |
1110 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 1110 Node* call = |
1111 UndefinedConstant(), p0, p1, context, | 1111 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), |
1112 frame_state, effect, control); | 1112 p0, p1, context, frame_state, effect, control); |
1113 Reduction r = Reduce(call); | 1113 Reduction r = Reduce(call); |
1114 | 1114 |
1115 ASSERT_TRUE(r.Changed()); | 1115 ASSERT_TRUE(r.Changed()); |
1116 EXPECT_THAT(r.replacement(), IsNumberPow(p0, p1)); | 1116 EXPECT_THAT(r.replacement(), IsNumberPow(p0, p1)); |
1117 } | 1117 } |
1118 } | 1118 } |
1119 } | 1119 } |
1120 | 1120 |
1121 TEST_F(JSBuiltinReducerTest, MathPowWithPlainPrimitive) { | 1121 TEST_F(JSBuiltinReducerTest, MathPowWithPlainPrimitive) { |
1122 Node* function = MathFunction("pow"); | 1122 Node* function = MathFunction("pow"); |
1123 | 1123 |
1124 Node* effect = graph()->start(); | 1124 Node* effect = graph()->start(); |
1125 Node* control = graph()->start(); | 1125 Node* control = graph()->start(); |
1126 Node* context = UndefinedConstant(); | 1126 Node* context = UndefinedConstant(); |
1127 Node* frame_state = graph()->start(); | 1127 Node* frame_state = graph()->start(); |
1128 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1128 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1129 Node* p1 = Parameter(Type::PlainPrimitive(), 0); | 1129 Node* p1 = Parameter(Type::PlainPrimitive(), 0); |
1130 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 1130 Node* call = |
1131 UndefinedConstant(), p0, p1, context, | 1131 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), p0, |
1132 frame_state, effect, control); | 1132 p1, context, frame_state, effect, control); |
1133 Reduction r = Reduce(call); | 1133 Reduction r = Reduce(call); |
1134 | 1134 |
1135 ASSERT_TRUE(r.Changed()); | 1135 ASSERT_TRUE(r.Changed()); |
1136 EXPECT_THAT(r.replacement(), IsNumberPow(IsPlainPrimitiveToNumber(p0), | 1136 EXPECT_THAT(r.replacement(), IsNumberPow(IsPlainPrimitiveToNumber(p0), |
1137 IsPlainPrimitiveToNumber(p1))); | 1137 IsPlainPrimitiveToNumber(p1))); |
1138 } | 1138 } |
1139 | 1139 |
1140 // ----------------------------------------------------------------------------- | 1140 // ----------------------------------------------------------------------------- |
1141 // Math.sign | 1141 // Math.sign |
1142 | 1142 |
1143 TEST_F(JSBuiltinReducerTest, MathSignWithNumber) { | 1143 TEST_F(JSBuiltinReducerTest, MathSignWithNumber) { |
1144 Node* function = MathFunction("sign"); | 1144 Node* function = MathFunction("sign"); |
1145 | 1145 |
1146 Node* effect = graph()->start(); | 1146 Node* effect = graph()->start(); |
1147 Node* control = graph()->start(); | 1147 Node* control = graph()->start(); |
1148 Node* context = UndefinedConstant(); | 1148 Node* context = UndefinedConstant(); |
1149 Node* frame_state = graph()->start(); | 1149 Node* frame_state = graph()->start(); |
1150 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1150 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1151 Node* p0 = Parameter(t0, 0); | 1151 Node* p0 = Parameter(t0, 0); |
1152 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1152 Node* call = |
1153 UndefinedConstant(), p0, context, frame_state, | 1153 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1154 effect, control); | 1154 p0, context, frame_state, effect, control); |
1155 Reduction r = Reduce(call); | 1155 Reduction r = Reduce(call); |
1156 | 1156 |
1157 ASSERT_TRUE(r.Changed()); | 1157 ASSERT_TRUE(r.Changed()); |
1158 EXPECT_THAT(r.replacement(), IsNumberSign(p0)); | 1158 EXPECT_THAT(r.replacement(), IsNumberSign(p0)); |
1159 } | 1159 } |
1160 } | 1160 } |
1161 | 1161 |
1162 TEST_F(JSBuiltinReducerTest, MathSignWithPlainPrimitive) { | 1162 TEST_F(JSBuiltinReducerTest, MathSignWithPlainPrimitive) { |
1163 Node* function = MathFunction("sign"); | 1163 Node* function = MathFunction("sign"); |
1164 | 1164 |
1165 Node* effect = graph()->start(); | 1165 Node* effect = graph()->start(); |
1166 Node* control = graph()->start(); | 1166 Node* control = graph()->start(); |
1167 Node* context = UndefinedConstant(); | 1167 Node* context = UndefinedConstant(); |
1168 Node* frame_state = graph()->start(); | 1168 Node* frame_state = graph()->start(); |
1169 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1169 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1170 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1170 Node* call = |
1171 UndefinedConstant(), p0, context, frame_state, | 1171 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1172 effect, control); | 1172 context, frame_state, effect, control); |
1173 Reduction r = Reduce(call); | 1173 Reduction r = Reduce(call); |
1174 | 1174 |
1175 ASSERT_TRUE(r.Changed()); | 1175 ASSERT_TRUE(r.Changed()); |
1176 EXPECT_THAT(r.replacement(), IsNumberSign(IsPlainPrimitiveToNumber(p0))); | 1176 EXPECT_THAT(r.replacement(), IsNumberSign(IsPlainPrimitiveToNumber(p0))); |
1177 } | 1177 } |
1178 | 1178 |
1179 // ----------------------------------------------------------------------------- | 1179 // ----------------------------------------------------------------------------- |
1180 // Math.sin | 1180 // Math.sin |
1181 | 1181 |
1182 TEST_F(JSBuiltinReducerTest, MathSinWithNumber) { | 1182 TEST_F(JSBuiltinReducerTest, MathSinWithNumber) { |
1183 Node* function = MathFunction("sin"); | 1183 Node* function = MathFunction("sin"); |
1184 | 1184 |
1185 Node* effect = graph()->start(); | 1185 Node* effect = graph()->start(); |
1186 Node* control = graph()->start(); | 1186 Node* control = graph()->start(); |
1187 Node* context = UndefinedConstant(); | 1187 Node* context = UndefinedConstant(); |
1188 Node* frame_state = graph()->start(); | 1188 Node* frame_state = graph()->start(); |
1189 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1189 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1190 Node* p0 = Parameter(t0, 0); | 1190 Node* p0 = Parameter(t0, 0); |
1191 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1191 Node* call = |
1192 UndefinedConstant(), p0, context, frame_state, | 1192 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1193 effect, control); | 1193 p0, context, frame_state, effect, control); |
1194 Reduction r = Reduce(call); | 1194 Reduction r = Reduce(call); |
1195 | 1195 |
1196 ASSERT_TRUE(r.Changed()); | 1196 ASSERT_TRUE(r.Changed()); |
1197 EXPECT_THAT(r.replacement(), IsNumberSin(p0)); | 1197 EXPECT_THAT(r.replacement(), IsNumberSin(p0)); |
1198 } | 1198 } |
1199 } | 1199 } |
1200 | 1200 |
1201 TEST_F(JSBuiltinReducerTest, MathSinWithPlainPrimitive) { | 1201 TEST_F(JSBuiltinReducerTest, MathSinWithPlainPrimitive) { |
1202 Node* function = MathFunction("sin"); | 1202 Node* function = MathFunction("sin"); |
1203 | 1203 |
1204 Node* effect = graph()->start(); | 1204 Node* effect = graph()->start(); |
1205 Node* control = graph()->start(); | 1205 Node* control = graph()->start(); |
1206 Node* context = UndefinedConstant(); | 1206 Node* context = UndefinedConstant(); |
1207 Node* frame_state = graph()->start(); | 1207 Node* frame_state = graph()->start(); |
1208 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1208 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1209 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1209 Node* call = |
1210 UndefinedConstant(), p0, context, frame_state, | 1210 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1211 effect, control); | 1211 context, frame_state, effect, control); |
1212 Reduction r = Reduce(call); | 1212 Reduction r = Reduce(call); |
1213 | 1213 |
1214 ASSERT_TRUE(r.Changed()); | 1214 ASSERT_TRUE(r.Changed()); |
1215 EXPECT_THAT(r.replacement(), IsNumberSin(IsPlainPrimitiveToNumber(p0))); | 1215 EXPECT_THAT(r.replacement(), IsNumberSin(IsPlainPrimitiveToNumber(p0))); |
1216 } | 1216 } |
1217 | 1217 |
1218 // ----------------------------------------------------------------------------- | 1218 // ----------------------------------------------------------------------------- |
1219 // Math.sinh | 1219 // Math.sinh |
1220 | 1220 |
1221 TEST_F(JSBuiltinReducerTest, MathSinhWithNumber) { | 1221 TEST_F(JSBuiltinReducerTest, MathSinhWithNumber) { |
1222 Node* function = MathFunction("sinh"); | 1222 Node* function = MathFunction("sinh"); |
1223 | 1223 |
1224 Node* effect = graph()->start(); | 1224 Node* effect = graph()->start(); |
1225 Node* control = graph()->start(); | 1225 Node* control = graph()->start(); |
1226 Node* context = UndefinedConstant(); | 1226 Node* context = UndefinedConstant(); |
1227 Node* frame_state = graph()->start(); | 1227 Node* frame_state = graph()->start(); |
1228 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1228 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1229 Node* p0 = Parameter(t0, 0); | 1229 Node* p0 = Parameter(t0, 0); |
1230 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1230 Node* call = |
1231 UndefinedConstant(), p0, context, frame_state, | 1231 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1232 effect, control); | 1232 p0, context, frame_state, effect, control); |
1233 Reduction r = Reduce(call); | 1233 Reduction r = Reduce(call); |
1234 | 1234 |
1235 ASSERT_TRUE(r.Changed()); | 1235 ASSERT_TRUE(r.Changed()); |
1236 EXPECT_THAT(r.replacement(), IsNumberSinh(p0)); | 1236 EXPECT_THAT(r.replacement(), IsNumberSinh(p0)); |
1237 } | 1237 } |
1238 } | 1238 } |
1239 | 1239 |
1240 TEST_F(JSBuiltinReducerTest, MathSinhWithPlainPrimitive) { | 1240 TEST_F(JSBuiltinReducerTest, MathSinhWithPlainPrimitive) { |
1241 Node* function = MathFunction("sinh"); | 1241 Node* function = MathFunction("sinh"); |
1242 | 1242 |
1243 Node* effect = graph()->start(); | 1243 Node* effect = graph()->start(); |
1244 Node* control = graph()->start(); | 1244 Node* control = graph()->start(); |
1245 Node* context = UndefinedConstant(); | 1245 Node* context = UndefinedConstant(); |
1246 Node* frame_state = graph()->start(); | 1246 Node* frame_state = graph()->start(); |
1247 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1247 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1248 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1248 Node* call = |
1249 UndefinedConstant(), p0, context, frame_state, | 1249 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1250 effect, control); | 1250 context, frame_state, effect, control); |
1251 Reduction r = Reduce(call); | 1251 Reduction r = Reduce(call); |
1252 | 1252 |
1253 ASSERT_TRUE(r.Changed()); | 1253 ASSERT_TRUE(r.Changed()); |
1254 EXPECT_THAT(r.replacement(), IsNumberSinh(IsPlainPrimitiveToNumber(p0))); | 1254 EXPECT_THAT(r.replacement(), IsNumberSinh(IsPlainPrimitiveToNumber(p0))); |
1255 } | 1255 } |
1256 | 1256 |
1257 // ----------------------------------------------------------------------------- | 1257 // ----------------------------------------------------------------------------- |
1258 // Math.sqrt | 1258 // Math.sqrt |
1259 | 1259 |
1260 TEST_F(JSBuiltinReducerTest, MathSqrtWithNumber) { | 1260 TEST_F(JSBuiltinReducerTest, MathSqrtWithNumber) { |
1261 Node* function = MathFunction("sqrt"); | 1261 Node* function = MathFunction("sqrt"); |
1262 | 1262 |
1263 Node* effect = graph()->start(); | 1263 Node* effect = graph()->start(); |
1264 Node* control = graph()->start(); | 1264 Node* control = graph()->start(); |
1265 Node* context = UndefinedConstant(); | 1265 Node* context = UndefinedConstant(); |
1266 Node* frame_state = graph()->start(); | 1266 Node* frame_state = graph()->start(); |
1267 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1267 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1268 Node* p0 = Parameter(t0, 0); | 1268 Node* p0 = Parameter(t0, 0); |
1269 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1269 Node* call = |
1270 UndefinedConstant(), p0, context, frame_state, | 1270 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1271 effect, control); | 1271 p0, context, frame_state, effect, control); |
1272 Reduction r = Reduce(call); | 1272 Reduction r = Reduce(call); |
1273 | 1273 |
1274 ASSERT_TRUE(r.Changed()); | 1274 ASSERT_TRUE(r.Changed()); |
1275 EXPECT_THAT(r.replacement(), IsNumberSqrt(p0)); | 1275 EXPECT_THAT(r.replacement(), IsNumberSqrt(p0)); |
1276 } | 1276 } |
1277 } | 1277 } |
1278 | 1278 |
1279 TEST_F(JSBuiltinReducerTest, MathSqrtWithPlainPrimitive) { | 1279 TEST_F(JSBuiltinReducerTest, MathSqrtWithPlainPrimitive) { |
1280 Node* function = MathFunction("sqrt"); | 1280 Node* function = MathFunction("sqrt"); |
1281 | 1281 |
1282 Node* effect = graph()->start(); | 1282 Node* effect = graph()->start(); |
1283 Node* control = graph()->start(); | 1283 Node* control = graph()->start(); |
1284 Node* context = UndefinedConstant(); | 1284 Node* context = UndefinedConstant(); |
1285 Node* frame_state = graph()->start(); | 1285 Node* frame_state = graph()->start(); |
1286 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1286 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1287 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1287 Node* call = |
1288 UndefinedConstant(), p0, context, frame_state, | 1288 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1289 effect, control); | 1289 context, frame_state, effect, control); |
1290 Reduction r = Reduce(call); | 1290 Reduction r = Reduce(call); |
1291 | 1291 |
1292 ASSERT_TRUE(r.Changed()); | 1292 ASSERT_TRUE(r.Changed()); |
1293 EXPECT_THAT(r.replacement(), IsNumberSqrt(IsPlainPrimitiveToNumber(p0))); | 1293 EXPECT_THAT(r.replacement(), IsNumberSqrt(IsPlainPrimitiveToNumber(p0))); |
1294 } | 1294 } |
1295 | 1295 |
1296 // ----------------------------------------------------------------------------- | 1296 // ----------------------------------------------------------------------------- |
1297 // Math.tan | 1297 // Math.tan |
1298 | 1298 |
1299 TEST_F(JSBuiltinReducerTest, MathTanWithNumber) { | 1299 TEST_F(JSBuiltinReducerTest, MathTanWithNumber) { |
1300 Node* function = MathFunction("tan"); | 1300 Node* function = MathFunction("tan"); |
1301 | 1301 |
1302 Node* effect = graph()->start(); | 1302 Node* effect = graph()->start(); |
1303 Node* control = graph()->start(); | 1303 Node* control = graph()->start(); |
1304 Node* context = UndefinedConstant(); | 1304 Node* context = UndefinedConstant(); |
1305 Node* frame_state = graph()->start(); | 1305 Node* frame_state = graph()->start(); |
1306 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1306 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1307 Node* p0 = Parameter(t0, 0); | 1307 Node* p0 = Parameter(t0, 0); |
1308 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1308 Node* call = |
1309 UndefinedConstant(), p0, context, frame_state, | 1309 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1310 effect, control); | 1310 p0, context, frame_state, effect, control); |
1311 Reduction r = Reduce(call); | 1311 Reduction r = Reduce(call); |
1312 | 1312 |
1313 ASSERT_TRUE(r.Changed()); | 1313 ASSERT_TRUE(r.Changed()); |
1314 EXPECT_THAT(r.replacement(), IsNumberTan(p0)); | 1314 EXPECT_THAT(r.replacement(), IsNumberTan(p0)); |
1315 } | 1315 } |
1316 } | 1316 } |
1317 | 1317 |
1318 TEST_F(JSBuiltinReducerTest, MathTanWithPlainPrimitive) { | 1318 TEST_F(JSBuiltinReducerTest, MathTanWithPlainPrimitive) { |
1319 Node* function = MathFunction("tan"); | 1319 Node* function = MathFunction("tan"); |
1320 | 1320 |
1321 Node* effect = graph()->start(); | 1321 Node* effect = graph()->start(); |
1322 Node* control = graph()->start(); | 1322 Node* control = graph()->start(); |
1323 Node* context = UndefinedConstant(); | 1323 Node* context = UndefinedConstant(); |
1324 Node* frame_state = graph()->start(); | 1324 Node* frame_state = graph()->start(); |
1325 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1325 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1326 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1326 Node* call = |
1327 UndefinedConstant(), p0, context, frame_state, | 1327 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1328 effect, control); | 1328 context, frame_state, effect, control); |
1329 Reduction r = Reduce(call); | 1329 Reduction r = Reduce(call); |
1330 | 1330 |
1331 ASSERT_TRUE(r.Changed()); | 1331 ASSERT_TRUE(r.Changed()); |
1332 EXPECT_THAT(r.replacement(), IsNumberTan(IsPlainPrimitiveToNumber(p0))); | 1332 EXPECT_THAT(r.replacement(), IsNumberTan(IsPlainPrimitiveToNumber(p0))); |
1333 } | 1333 } |
1334 | 1334 |
1335 // ----------------------------------------------------------------------------- | 1335 // ----------------------------------------------------------------------------- |
1336 // Math.tanh | 1336 // Math.tanh |
1337 | 1337 |
1338 TEST_F(JSBuiltinReducerTest, MathTanhWithNumber) { | 1338 TEST_F(JSBuiltinReducerTest, MathTanhWithNumber) { |
1339 Node* function = MathFunction("tanh"); | 1339 Node* function = MathFunction("tanh"); |
1340 | 1340 |
1341 Node* effect = graph()->start(); | 1341 Node* effect = graph()->start(); |
1342 Node* control = graph()->start(); | 1342 Node* control = graph()->start(); |
1343 Node* context = UndefinedConstant(); | 1343 Node* context = UndefinedConstant(); |
1344 Node* frame_state = graph()->start(); | 1344 Node* frame_state = graph()->start(); |
1345 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1345 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1346 Node* p0 = Parameter(t0, 0); | 1346 Node* p0 = Parameter(t0, 0); |
1347 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1347 Node* call = |
1348 UndefinedConstant(), p0, context, frame_state, | 1348 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1349 effect, control); | 1349 p0, context, frame_state, effect, control); |
1350 Reduction r = Reduce(call); | 1350 Reduction r = Reduce(call); |
1351 | 1351 |
1352 ASSERT_TRUE(r.Changed()); | 1352 ASSERT_TRUE(r.Changed()); |
1353 EXPECT_THAT(r.replacement(), IsNumberTanh(p0)); | 1353 EXPECT_THAT(r.replacement(), IsNumberTanh(p0)); |
1354 } | 1354 } |
1355 } | 1355 } |
1356 | 1356 |
1357 TEST_F(JSBuiltinReducerTest, MathTanhWithPlainPrimitive) { | 1357 TEST_F(JSBuiltinReducerTest, MathTanhWithPlainPrimitive) { |
1358 Node* function = MathFunction("tanh"); | 1358 Node* function = MathFunction("tanh"); |
1359 | 1359 |
1360 Node* effect = graph()->start(); | 1360 Node* effect = graph()->start(); |
1361 Node* control = graph()->start(); | 1361 Node* control = graph()->start(); |
1362 Node* context = UndefinedConstant(); | 1362 Node* context = UndefinedConstant(); |
1363 Node* frame_state = graph()->start(); | 1363 Node* frame_state = graph()->start(); |
1364 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1364 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1365 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1365 Node* call = |
1366 UndefinedConstant(), p0, context, frame_state, | 1366 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1367 effect, control); | 1367 context, frame_state, effect, control); |
1368 Reduction r = Reduce(call); | 1368 Reduction r = Reduce(call); |
1369 | 1369 |
1370 ASSERT_TRUE(r.Changed()); | 1370 ASSERT_TRUE(r.Changed()); |
1371 EXPECT_THAT(r.replacement(), IsNumberTanh(IsPlainPrimitiveToNumber(p0))); | 1371 EXPECT_THAT(r.replacement(), IsNumberTanh(IsPlainPrimitiveToNumber(p0))); |
1372 } | 1372 } |
1373 | 1373 |
1374 // ----------------------------------------------------------------------------- | 1374 // ----------------------------------------------------------------------------- |
1375 // Math.trunc | 1375 // Math.trunc |
1376 | 1376 |
1377 TEST_F(JSBuiltinReducerTest, MathTruncWithNumber) { | 1377 TEST_F(JSBuiltinReducerTest, MathTruncWithNumber) { |
1378 Node* function = MathFunction("trunc"); | 1378 Node* function = MathFunction("trunc"); |
1379 | 1379 |
1380 Node* effect = graph()->start(); | 1380 Node* effect = graph()->start(); |
1381 Node* control = graph()->start(); | 1381 Node* control = graph()->start(); |
1382 Node* context = UndefinedConstant(); | 1382 Node* context = UndefinedConstant(); |
1383 Node* frame_state = graph()->start(); | 1383 Node* frame_state = graph()->start(); |
1384 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1384 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1385 Node* p0 = Parameter(t0, 0); | 1385 Node* p0 = Parameter(t0, 0); |
1386 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1386 Node* call = |
1387 UndefinedConstant(), p0, context, frame_state, | 1387 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1388 effect, control); | 1388 p0, context, frame_state, effect, control); |
1389 Reduction r = Reduce(call); | 1389 Reduction r = Reduce(call); |
1390 | 1390 |
1391 ASSERT_TRUE(r.Changed()); | 1391 ASSERT_TRUE(r.Changed()); |
1392 EXPECT_THAT(r.replacement(), IsNumberTrunc(p0)); | 1392 EXPECT_THAT(r.replacement(), IsNumberTrunc(p0)); |
1393 } | 1393 } |
1394 } | 1394 } |
1395 | 1395 |
1396 TEST_F(JSBuiltinReducerTest, MathTruncWithPlainPrimitive) { | 1396 TEST_F(JSBuiltinReducerTest, MathTruncWithPlainPrimitive) { |
1397 Node* function = MathFunction("trunc"); | 1397 Node* function = MathFunction("trunc"); |
1398 | 1398 |
1399 Node* effect = graph()->start(); | 1399 Node* effect = graph()->start(); |
1400 Node* control = graph()->start(); | 1400 Node* control = graph()->start(); |
1401 Node* context = UndefinedConstant(); | 1401 Node* context = UndefinedConstant(); |
1402 Node* frame_state = graph()->start(); | 1402 Node* frame_state = graph()->start(); |
1403 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1403 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1404 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1404 Node* call = |
1405 UndefinedConstant(), p0, context, frame_state, | 1405 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1406 effect, control); | 1406 context, frame_state, effect, control); |
1407 Reduction r = Reduce(call); | 1407 Reduction r = Reduce(call); |
1408 | 1408 |
1409 ASSERT_TRUE(r.Changed()); | 1409 ASSERT_TRUE(r.Changed()); |
1410 EXPECT_THAT(r.replacement(), IsNumberTrunc(IsPlainPrimitiveToNumber(p0))); | 1410 EXPECT_THAT(r.replacement(), IsNumberTrunc(IsPlainPrimitiveToNumber(p0))); |
1411 } | 1411 } |
1412 | 1412 |
1413 // ----------------------------------------------------------------------------- | 1413 // ----------------------------------------------------------------------------- |
1414 // Number.isFinite | 1414 // Number.isFinite |
1415 | 1415 |
1416 TEST_F(JSBuiltinReducerTest, NumberIsFiniteWithNumber) { | 1416 TEST_F(JSBuiltinReducerTest, NumberIsFiniteWithNumber) { |
1417 Node* function = NumberFunction("isFinite"); | 1417 Node* function = NumberFunction("isFinite"); |
1418 | 1418 |
1419 Node* effect = graph()->start(); | 1419 Node* effect = graph()->start(); |
1420 Node* control = graph()->start(); | 1420 Node* control = graph()->start(); |
1421 Node* context = UndefinedConstant(); | 1421 Node* context = UndefinedConstant(); |
1422 Node* frame_state = graph()->start(); | 1422 Node* frame_state = graph()->start(); |
1423 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1423 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1424 Node* p0 = Parameter(t0, 0); | 1424 Node* p0 = Parameter(t0, 0); |
1425 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1425 Node* call = |
1426 UndefinedConstant(), p0, context, frame_state, | 1426 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1427 effect, control); | 1427 p0, context, frame_state, effect, control); |
1428 Reduction r = Reduce(call); | 1428 Reduction r = Reduce(call); |
1429 | 1429 |
1430 ASSERT_TRUE(r.Changed()); | 1430 ASSERT_TRUE(r.Changed()); |
1431 EXPECT_THAT(r.replacement(), IsNumberEqual(IsNumberSubtract(p0, p0), | 1431 EXPECT_THAT(r.replacement(), IsNumberEqual(IsNumberSubtract(p0, p0), |
1432 IsNumberSubtract(p0, p0))); | 1432 IsNumberSubtract(p0, p0))); |
1433 } | 1433 } |
1434 } | 1434 } |
1435 | 1435 |
1436 // ----------------------------------------------------------------------------- | 1436 // ----------------------------------------------------------------------------- |
1437 // Number.isInteger | 1437 // Number.isInteger |
1438 | 1438 |
1439 TEST_F(JSBuiltinReducerTest, NumberIsIntegerWithNumber) { | 1439 TEST_F(JSBuiltinReducerTest, NumberIsIntegerWithNumber) { |
1440 Node* function = NumberFunction("isInteger"); | 1440 Node* function = NumberFunction("isInteger"); |
1441 | 1441 |
1442 Node* effect = graph()->start(); | 1442 Node* effect = graph()->start(); |
1443 Node* control = graph()->start(); | 1443 Node* control = graph()->start(); |
1444 Node* context = UndefinedConstant(); | 1444 Node* context = UndefinedConstant(); |
1445 Node* frame_state = graph()->start(); | 1445 Node* frame_state = graph()->start(); |
1446 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1446 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1447 Node* p0 = Parameter(t0, 0); | 1447 Node* p0 = Parameter(t0, 0); |
1448 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1448 Node* call = |
1449 UndefinedConstant(), p0, context, frame_state, | 1449 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1450 effect, control); | 1450 p0, context, frame_state, effect, control); |
1451 Reduction r = Reduce(call); | 1451 Reduction r = Reduce(call); |
1452 | 1452 |
1453 ASSERT_TRUE(r.Changed()); | 1453 ASSERT_TRUE(r.Changed()); |
1454 EXPECT_THAT(r.replacement(), | 1454 EXPECT_THAT(r.replacement(), |
1455 IsNumberEqual(IsNumberSubtract(p0, IsNumberTrunc(p0)), | 1455 IsNumberEqual(IsNumberSubtract(p0, IsNumberTrunc(p0)), |
1456 IsNumberConstant(0.0))); | 1456 IsNumberConstant(0.0))); |
1457 } | 1457 } |
1458 } | 1458 } |
1459 | 1459 |
1460 // ----------------------------------------------------------------------------- | 1460 // ----------------------------------------------------------------------------- |
1461 // Number.isNaN | 1461 // Number.isNaN |
1462 | 1462 |
1463 TEST_F(JSBuiltinReducerTest, NumberIsNaNWithNumber) { | 1463 TEST_F(JSBuiltinReducerTest, NumberIsNaNWithNumber) { |
1464 Node* function = NumberFunction("isNaN"); | 1464 Node* function = NumberFunction("isNaN"); |
1465 | 1465 |
1466 Node* effect = graph()->start(); | 1466 Node* effect = graph()->start(); |
1467 Node* control = graph()->start(); | 1467 Node* control = graph()->start(); |
1468 Node* context = UndefinedConstant(); | 1468 Node* context = UndefinedConstant(); |
1469 Node* frame_state = graph()->start(); | 1469 Node* frame_state = graph()->start(); |
1470 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1470 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1471 Node* p0 = Parameter(t0, 0); | 1471 Node* p0 = Parameter(t0, 0); |
1472 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1472 Node* call = |
1473 UndefinedConstant(), p0, context, frame_state, | 1473 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1474 effect, control); | 1474 p0, context, frame_state, effect, control); |
1475 Reduction r = Reduce(call); | 1475 Reduction r = Reduce(call); |
1476 | 1476 |
1477 ASSERT_TRUE(r.Changed()); | 1477 ASSERT_TRUE(r.Changed()); |
1478 EXPECT_THAT(r.replacement(), IsBooleanNot(IsNumberEqual(p0, p0))); | 1478 EXPECT_THAT(r.replacement(), IsBooleanNot(IsNumberEqual(p0, p0))); |
1479 } | 1479 } |
1480 } | 1480 } |
1481 | 1481 |
1482 // ----------------------------------------------------------------------------- | 1482 // ----------------------------------------------------------------------------- |
1483 // Number.isSafeInteger | 1483 // Number.isSafeInteger |
1484 | 1484 |
1485 TEST_F(JSBuiltinReducerTest, NumberIsSafeIntegerWithIntegral32) { | 1485 TEST_F(JSBuiltinReducerTest, NumberIsSafeIntegerWithIntegral32) { |
1486 Node* function = NumberFunction("isSafeInteger"); | 1486 Node* function = NumberFunction("isSafeInteger"); |
1487 | 1487 |
1488 Node* effect = graph()->start(); | 1488 Node* effect = graph()->start(); |
1489 Node* control = graph()->start(); | 1489 Node* control = graph()->start(); |
1490 Node* context = UndefinedConstant(); | 1490 Node* context = UndefinedConstant(); |
1491 Node* frame_state = graph()->start(); | 1491 Node* frame_state = graph()->start(); |
1492 TRACED_FOREACH(Type*, t0, kIntegral32Types) { | 1492 TRACED_FOREACH(Type*, t0, kIntegral32Types) { |
1493 Node* p0 = Parameter(t0, 0); | 1493 Node* p0 = Parameter(t0, 0); |
1494 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1494 Node* call = |
1495 UndefinedConstant(), p0, context, frame_state, | 1495 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1496 effect, control); | 1496 p0, context, frame_state, effect, control); |
1497 Reduction r = Reduce(call); | 1497 Reduction r = Reduce(call); |
1498 | 1498 |
1499 ASSERT_TRUE(r.Changed()); | 1499 ASSERT_TRUE(r.Changed()); |
1500 EXPECT_THAT(r.replacement(), IsTrueConstant()); | 1500 EXPECT_THAT(r.replacement(), IsTrueConstant()); |
1501 } | 1501 } |
1502 } | 1502 } |
1503 | 1503 |
1504 // ----------------------------------------------------------------------------- | 1504 // ----------------------------------------------------------------------------- |
1505 // Number.parseInt | 1505 // Number.parseInt |
1506 | 1506 |
1507 TEST_F(JSBuiltinReducerTest, NumberParseIntWithIntegral32) { | 1507 TEST_F(JSBuiltinReducerTest, NumberParseIntWithIntegral32) { |
1508 Node* function = NumberFunction("parseInt"); | 1508 Node* function = NumberFunction("parseInt"); |
1509 | 1509 |
1510 Node* effect = graph()->start(); | 1510 Node* effect = graph()->start(); |
1511 Node* control = graph()->start(); | 1511 Node* control = graph()->start(); |
1512 Node* context = UndefinedConstant(); | 1512 Node* context = UndefinedConstant(); |
1513 Node* frame_state = graph()->start(); | 1513 Node* frame_state = graph()->start(); |
1514 TRACED_FOREACH(Type*, t0, kIntegral32Types) { | 1514 TRACED_FOREACH(Type*, t0, kIntegral32Types) { |
1515 Node* p0 = Parameter(t0, 0); | 1515 Node* p0 = Parameter(t0, 0); |
1516 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1516 Node* call = |
1517 UndefinedConstant(), p0, context, frame_state, | 1517 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1518 effect, control); | 1518 p0, context, frame_state, effect, control); |
1519 Reduction r = Reduce(call); | 1519 Reduction r = Reduce(call); |
1520 | 1520 |
1521 ASSERT_TRUE(r.Changed()); | 1521 ASSERT_TRUE(r.Changed()); |
1522 EXPECT_EQ(p0, r.replacement()); | 1522 EXPECT_EQ(p0, r.replacement()); |
1523 } | 1523 } |
1524 } | 1524 } |
1525 | 1525 |
1526 TEST_F(JSBuiltinReducerTest, NumberParseIntWithIntegral32AndUndefined) { | 1526 TEST_F(JSBuiltinReducerTest, NumberParseIntWithIntegral32AndUndefined) { |
1527 Node* function = NumberFunction("parseInt"); | 1527 Node* function = NumberFunction("parseInt"); |
1528 | 1528 |
1529 Node* effect = graph()->start(); | 1529 Node* effect = graph()->start(); |
1530 Node* control = graph()->start(); | 1530 Node* control = graph()->start(); |
1531 Node* context = UndefinedConstant(); | 1531 Node* context = UndefinedConstant(); |
1532 Node* frame_state = graph()->start(); | 1532 Node* frame_state = graph()->start(); |
1533 TRACED_FOREACH(Type*, t0, kIntegral32Types) { | 1533 TRACED_FOREACH(Type*, t0, kIntegral32Types) { |
1534 Node* p0 = Parameter(t0, 0); | 1534 Node* p0 = Parameter(t0, 0); |
1535 Node* p1 = Parameter(Type::Undefined(), 1); | 1535 Node* p1 = Parameter(Type::Undefined(), 1); |
1536 Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 1536 Node* call = |
1537 UndefinedConstant(), p0, p1, context, | 1537 graph()->NewNode(javascript()->Call(4), function, UndefinedConstant(), |
1538 frame_state, effect, control); | 1538 p0, p1, context, frame_state, effect, control); |
1539 Reduction r = Reduce(call); | 1539 Reduction r = Reduce(call); |
1540 | 1540 |
1541 ASSERT_TRUE(r.Changed()); | 1541 ASSERT_TRUE(r.Changed()); |
1542 EXPECT_EQ(p0, r.replacement()); | 1542 EXPECT_EQ(p0, r.replacement()); |
1543 } | 1543 } |
1544 } | 1544 } |
1545 | 1545 |
1546 // ----------------------------------------------------------------------------- | 1546 // ----------------------------------------------------------------------------- |
1547 // String.fromCharCode | 1547 // String.fromCharCode |
1548 | 1548 |
1549 TEST_F(JSBuiltinReducerTest, StringFromCharCodeWithNumber) { | 1549 TEST_F(JSBuiltinReducerTest, StringFromCharCodeWithNumber) { |
1550 Node* function = StringFunction("fromCharCode"); | 1550 Node* function = StringFunction("fromCharCode"); |
1551 | 1551 |
1552 Node* effect = graph()->start(); | 1552 Node* effect = graph()->start(); |
1553 Node* control = graph()->start(); | 1553 Node* control = graph()->start(); |
1554 Node* context = UndefinedConstant(); | 1554 Node* context = UndefinedConstant(); |
1555 Node* frame_state = graph()->start(); | 1555 Node* frame_state = graph()->start(); |
1556 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1556 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
1557 Node* p0 = Parameter(t0, 0); | 1557 Node* p0 = Parameter(t0, 0); |
1558 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1558 Node* call = |
1559 UndefinedConstant(), p0, context, frame_state, | 1559 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), |
1560 effect, control); | 1560 p0, context, frame_state, effect, control); |
1561 Reduction r = Reduce(call); | 1561 Reduction r = Reduce(call); |
1562 | 1562 |
1563 ASSERT_TRUE(r.Changed()); | 1563 ASSERT_TRUE(r.Changed()); |
1564 EXPECT_THAT(r.replacement(), IsStringFromCharCode(p0)); | 1564 EXPECT_THAT(r.replacement(), IsStringFromCharCode(p0)); |
1565 } | 1565 } |
1566 } | 1566 } |
1567 | 1567 |
1568 TEST_F(JSBuiltinReducerTest, StringFromCharCodeWithPlainPrimitive) { | 1568 TEST_F(JSBuiltinReducerTest, StringFromCharCodeWithPlainPrimitive) { |
1569 Node* function = StringFunction("fromCharCode"); | 1569 Node* function = StringFunction("fromCharCode"); |
1570 | 1570 |
1571 Node* effect = graph()->start(); | 1571 Node* effect = graph()->start(); |
1572 Node* control = graph()->start(); | 1572 Node* control = graph()->start(); |
1573 Node* context = UndefinedConstant(); | 1573 Node* context = UndefinedConstant(); |
1574 Node* frame_state = graph()->start(); | 1574 Node* frame_state = graph()->start(); |
1575 Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 1575 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
1576 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1576 Node* call = |
1577 UndefinedConstant(), p0, context, frame_state, | 1577 graph()->NewNode(javascript()->Call(3), function, UndefinedConstant(), p0, |
1578 effect, control); | 1578 context, frame_state, effect, control); |
1579 Reduction r = Reduce(call); | 1579 Reduction r = Reduce(call); |
1580 | 1580 |
1581 ASSERT_TRUE(r.Changed()); | 1581 ASSERT_TRUE(r.Changed()); |
1582 EXPECT_THAT(r.replacement(), | 1582 EXPECT_THAT(r.replacement(), |
1583 IsStringFromCharCode(IsPlainPrimitiveToNumber(p0))); | 1583 IsStringFromCharCode(IsPlainPrimitiveToNumber(p0))); |
1584 } | 1584 } |
1585 | 1585 |
1586 } // namespace compiler | 1586 } // namespace compiler |
1587 } // namespace internal | 1587 } // namespace internal |
1588 } // namespace v8 | 1588 } // namespace v8 |
OLD | NEW |