1;; From https://bugzilla.mozilla.org/show_bug.cgi?id=1657062. 2;; 3;; This just tests that Cranelift can compile this function; it previously 4;; triggered a validator error on the CLIF that is generated by the wasm crate. 5 6(module 7 (type (;0;) (func (param i32 i32 i32) (result i32))) 8 (func $main (type 0) (param i32 i32 i32) (result i32) 9 local.get 1 10 i32.const 6150 11 local.get 2 12 i32.const -63 13 br_if 0 (;@0;) 14 loop (param i32 i32 i32) (result i32) ;; label = @1 15 i32.const -59 16 local.get 1 17 i32.const -49 18 br_if 0 (;@1;) 19 i32.const 0 20 i32.ge_u 21 br_if 0 (;@1;) 22 i32.const 2 23 i32.const 0 24 i32.const 2 25 br_if 0 (;@1;) 26 i32.const 0 27 i32.ge_u 28 i32.const 0 29 i32.const 0 30 br_if 0 (;@1;) 31 i32.const 0 32 i32.const 27 33 select 34 i32.const 24 35 select 36 local.get 0 37 i32.const 27 38 i32.const 32 39 br_if 0 (;@1;) 40 i32.const 32 41 br_if 0 (;@1;) 42 i32.const 452672 43 i32.const 32 44 br_if 1 (;@0;) 45 i32.const -23 46 i32.div_s 47 local.get 1 48 if ;; label = @2 49 nop 50 i32.const -52 51 if ;; label = @3 52 nop 53 i32.const -52 54 local.tee 1 55 br_table 1 (;@2;) 0 (;@3;) 56 end 57 local.get 2 58 br_table 0 (;@2;) 0 (;@2;) 59 end 60 local.get 1 61 nop 62 i32.const -23 63 i32.div_s 64 nop 65 i32.const -25 66 i32.popcnt 67 select 68 select 69 i32.const 139 70 select 71 drop 72 i32.const -8051 73 nop 74 drop 75 i32.const 27 76 i32.const -63 77 local.get 1 78 i32.const 1 79 i32.const -63 80 i32.const 2 81 i32.const -6145 82 br_if 0 (;@1;) 83 i32.const 0 84 i32.ge_u 85 br_if 0 (;@1;) 86 select 87 local.get 1 88 i32.const -7937 89 i32.const 2 90 i32.const 0 91 i32.ge_u 92 i32.eqz 93 i32.const -49 94 br_if 0 (;@1;) 95 i32.const 0 96 i32.ge_u 97 br_if 0 (;@1;) 98 i32.const 2 99 i32.const 0 100 i32.const 2 101 i32.const 32 102 call $main 103 i32.const -1 104 i32.rem_s 105 i32.const 2 106 i32.const 0 107 i32.const 2 108 i32.const 0 109 i32.ge_u 110 i32.ge_u 111 br_if 0 (;@1;) 112 i32.const 0 113 i32.ge_u 114 br_if 0 (;@1;) 115 i32.const 2 116 i32.const 0 117 i32.const -49 118 i32.const 0 119 i32.const 0 120 br_if 0 (;@1;) 121 i32.const 0 122 local.get 1 123 select 124 i32.const 32 125 call $main 126 i32.const -1 127 i32.rem_s 128 i32.const 2 129 i32.const 0 130 i32.const 2 131 i32.const 0 132 i32.ge_u 133 i32.ge_u 134 br_if 0 (;@1;) 135 i32.const 3 136 i32.ge_u 137 br_if 0 (;@1;) 138 i32.const 2 139 i32.const 0 140 i32.const 2 141 i32.const 0 142 i32.ge_u 143 br_if 0 (;@1;) 144 i32.const -64 145 i32.ge_u 146 br_if 0 (;@1;) 147 select 148 br_if 0 (;@1;) 149 i32.const 0 150 local.get 1 151 select 152 i32.const 2 153 i32.const 0 154 i32.ge_u 155 br_if 0 (;@1;) 156 i32.const -64 157 i32.ge_u 158 i32.const 2 159 i32.const 0 160 i32.const 2 161 i32.const 0 162 i32.ge_u 163 i32.ge_u 164 br_if 0 (;@1;) 165 i32.const 0 166 i32.ge_u 167 nop 168 i32.const -59 169 i32.eqz 170 i32.eqz 171 i32.eqz 172 i32.eqz 173 i32.eqz 174 i32.eqz 175 i32.eqz 176 i32.const 32 177 select 178 br_if 0 (;@1;) 179 i32.const 0 180 local.get 1 181 select 182 i32.const 32 183 br_if 0 (;@1;) 184 i32.const 4 185 i32.rem_s 186 i32.const 2 187 i32.const 0 188 i32.ge_u 189 br_if 0 (;@1;) 190 i32.const 0 191 i32.const -19 192 nop 193 nop 194 i32.const -23 195 i32.div_s 196 i32.const 2 197 i32.const 0 198 i32.ge_u 199 br_if 0 (;@1;) 200 i32.const -63 201 i32.const 2 202 i32.const 0 203 i32.ge_u 204 br_if 0 (;@1;) 205 i32.const 0 206 i32.div_s 207 local.get 1 208 i32.const 1 209 i32.const -63 210 i32.const 2 211 i32.const 1 212 drop 213 i32.const -63 214 i32.const 27 215 select 216 i32.const 27 217 select 218 local.tee 0 219 i32.const 27 220 i32.const 32 221 br_if 0 (;@1;) 222 i32.const 32 223 br_if 0 (;@1;) 224 i32.const 452672 225 i32.const 32 226 br_if 1 (;@0;) 227 i32.const -23 228 i32.div_s 229 local.get 1 230 if ;; label = @2 231 nop 232 i32.const -52 233 if ;; label = @3 234 nop 235 i32.const -52 236 local.tee 1 237 br_table 1 (;@2;) 0 (;@3;) 238 end 239 local.get 2 240 br_table 0 (;@2;) 0 (;@2;) 241 end 242 local.get 1 243 nop 244 i32.const -23 245 i32.div_s 246 nop 247 i32.const -25 248 i32.popcnt 249 select 250 select 251 i32.const 139 252 select 253 drop 254 i32.const -64 255 i32.ge_u 256 br_if 0 (;@1;) 257 select 258 br_if 0 (;@1;) 259 i32.const 0 260 local.get 1 261 select 262 i32.const 2 263 i32.const 0 264 i32.ge_u 265 br_if 0 (;@1;) 266 i32.const -64 267 i32.ge_u 268 i32.const 2 269 i32.const 0 270 i32.const 2 271 i32.const 0 272 i32.ge_u 273 i32.ge_u 274 br_if 0 (;@1;) 275 i32.const 0 276 i32.ge_u 277 nop 278 i32.const -59 279 i32.eqz 280 i32.eqz 281 i32.eqz 282 i32.eqz 283 i32.eqz 284 i32.eqz 285 i32.eqz 286 i32.const 32 287 select 288 br_if 0 (;@1;) 289 i32.const 0 290 local.get 1 291 select 292 i32.const 32 293 br_if 0 (;@1;) 294 i32.const 4 295 i32.rem_s 296 i32.const 2 297 i32.const 0 298 i32.ge_u 299 br_if 0 (;@1;) 300 i32.const 0 301 i32.const -19 302 nop 303 nop 304 i32.const -23 305 i32.div_s 306 i32.const 2 307 i32.const 0 308 i32.ge_u 309 br_if 0 (;@1;) 310 i32.const -63 311 i32.const 2 312 i32.const 0 313 i32.ge_u 314 br_if 0 (;@1;) 315 i32.const 0 316 i32.div_s 317 local.get 1 318 i32.const 1 319 i32.const -63 320 i32.const 2 321 i32.const 1 322 drop 323 nop 324 i32.const -49 325 br_if 0 (;@1;) 326 local.set 0 327 i32.ge_u 328 br_if 0 (;@1;) 329 i32.const 2 330 i32.const 0 331 i32.const 2 332 br_if 0 (;@1;) 333 i32.const 0 334 i32.ge_u 335 i32.const 0 336 i32.const 0 337 br_if 0 (;@1;) 338 i32.const 0 339 local.get 1 340 select 341 i32.const 32 342 call $main 343 i32.const -1 344 i32.rem_s 345 i32.const 2 346 i32.const 0 347 i32.const 2 348 i32.const 0 349 i32.ge_u 350 i32.ge_u 351 br_if 0 (;@1;) 352 i32.const 0 353 i32.ge_u 354 br_if 0 (;@1;) 355 i32.const 2 356 i32.const 0 357 i32.const 2 358 i32.const 0 359 i32.ge_u 360 br_if 0 (;@1;) 361 i32.const -64 362 i32.ge_u 363 br_if 0 (;@1;) 364 select 365 br_if 0 (;@1;) 366 i32.const 0 367 local.get 1 368 select 369 i32.const 2 370 i32.const 0 371 i32.ge_u 372 br_if 0 (;@1;) 373 i32.const -64 374 i32.ge_u 375 i32.const 2 376 i32.const 0 377 i32.const 2 378 i32.const 0 379 i32.ge_u 380 i32.ge_u 381 br_if 0 (;@1;) 382 i32.const 0 383 i32.ge_u 384 nop 385 i32.const -59 386 i32.eqz 387 i32.eqz 388 i32.eqz 389 i32.eqz 390 i32.eqz 391 i32.eqz 392 i32.eqz 393 i32.const 32 394 select 395 br_if 0 (;@1;) 396 i32.const 0 397 local.get 1 398 select 399 i32.const 32 400 br_if 0 (;@1;) 401 i32.const 4 402 i32.rem_s 403 i32.const 2 404 i32.const 0 405 i32.const 2 406 i32.const 0 407 i32.ge_u 408 br_if 0 (;@1;) 409 i32.const -63 410 i32.const 2 411 i32.const 0 412 i32.ge_u 413 br_if 0 (;@1;) 414 i32.const 0 415 i32.div_s 416 local.get 1 417 i32.const 1 418 i32.const -63 419 i32.const 2 420 i32.const 1 421 drop 422 i32.const -63 423 i32.const 27 424 select 425 i32.const 27 426 select 427 local.tee 0 428 i32.const 27 429 i32.const 32 430 br_if 0 (;@1;) 431 i32.const 32 432 br_if 0 (;@1;) 433 i32.const 452672 434 i32.const 32 435 br_if 1 (;@0;) 436 i32.const -23 437 i32.div_s 438 local.get 1 439 if ;; label = @2 440 nop 441 i32.const -52 442 if ;; label = @3 443 nop 444 i32.const -52 445 local.tee 1 446 br_table 1 (;@2;) 0 (;@3;) 447 end 448 local.get 2 449 br_table 0 (;@2;) 0 (;@2;) 450 end 451 local.get 1 452 nop 453 i32.const -23 454 i32.div_s 455 nop 456 i32.const -25 457 i32.popcnt 458 select 459 select 460 i32.const 139 461 select 462 drop 463 i32.const -64 464 i32.ge_u 465 br_if 0 (;@1;) 466 select 467 br_if 0 (;@1;) 468 i32.const 0 469 local.get 1 470 select 471 i32.const 2 472 i32.const 0 473 i32.ge_u 474 br_if 0 (;@1;) 475 i32.const -64 476 i32.ge_u 477 i32.const 2 478 i32.const 0 479 i32.const 2 480 i32.const 0 481 i32.ge_u 482 i32.ge_u 483 br_if 0 (;@1;) 484 i32.const 0 485 i32.ge_u 486 nop 487 i32.const -59 488 i32.eqz 489 i32.eqz 490 i32.eqz 491 i32.eqz 492 i32.eqz 493 i32.eqz 494 i32.eqz 495 i32.const 32 496 select 497 br_if 0 (;@1;) 498 i32.const 0 499 local.get 1 500 select 501 i32.const 32 502 br_if 0 (;@1;) 503 i32.const 4 504 i32.rem_s 505 i32.const 2 506 i32.const 0 507 br_table 0 (;@1;) 508 unreachable 509 i32.ge_u 510 br_if 0 (;@1;) 511 i32.const 0 512 i32.const -19 513 nop 514 nop 515 i32.const -23 516 i32.div_s 517 i32.const 2 518 i32.const 0 519 i32.ge_u 520 br_if 0 (;@1;) 521 i32.const -63 522 i32.const 2 523 i32.const 0 524 i32.ge_u 525 br_if 0 (;@1;) 526 i32.const 0 527 i32.div_s 528 local.get 1 529 i32.const 1 530 i32.const -63 531 i32.const 2 532 i32.const 1 533 drop 534 nop 535 i32.const -49 536 br_if 0 (;@1;) 537 local.set 0 538 i32.ge_u 539 br_if 0 (;@1;) 540 i32.const 2 541 i32.const 0 542 i32.const 2 543 br_if 0 (;@1;) 544 i32.const 0 545 i32.ge_u 546 i32.const 0 547 i32.const 0 548 br_if 0 (;@1;) 549 i32.const 0 550 local.get 1 551 select 552 i32.const 32 553 call $main 554 i32.const -1 555 i32.rem_s 556 i32.const 2 557 i32.const 0 558 i32.const 2 559 i32.const 0 560 i32.ge_u 561 i32.ge_u 562 br_if 0 (;@1;) 563 i32.const 0 564 i32.ge_u 565 br_if 0 (;@1;) 566 i32.const 2 567 i32.const 0 568 i32.const 2 569 i32.const 0 570 i32.ge_u 571 br_if 0 (;@1;) 572 i32.const -64 573 i32.ge_u 574 br_if 0 (;@1;) 575 select 576 br_if 0 (;@1;) 577 i32.const 0 578 local.get 1 579 select 580 i32.const 2 581 i32.const 0 582 i32.ge_u 583 br_if 0 (;@1;) 584 i32.const -64 585 i32.ge_u 586 i32.const 2 587 i32.const 0 588 i32.const 2 589 i32.const 0 590 i32.ge_u 591 i32.ge_u 592 br_if 0 (;@1;) 593 i32.const 0 594 i32.ge_u 595 nop 596 i32.const -59 597 i32.eqz 598 i32.eqz 599 i32.eqz 600 i32.eqz 601 i32.eqz 602 i32.eqz 603 i32.eqz 604 i32.const 32 605 select 606 br_if 0 (;@1;) 607 i32.const 0 608 i32.const 2 609 i32.const 0 610 i32.const 2 611 i32.const -63 612 i32.const 27 613 i32.const -63 614 i32.eqz 615 i32.eqz 616 br 0 (;@1;) 617 end 618 unreachable 619 i32.div_s 620 unreachable 621 i32.rem_s 622 i32.div_s 623 return 624 br_if 0 (;@0;) 625 i32.const 0 626 i32.extend8_s 627 unreachable 628 unreachable 629 unreachable 630 unreachable 631 i32.ctz 632 unreachable 633 i32.ge_u 634 unreachable 635 unreachable 636 i32.popcnt 637 unreachable 638 unreachable 639 i32.popcnt) 640 (export "main" (func $main))) 641