test regalloc target x86_64 haswell ; Reported as https://github.com/cretonne/cretonne/issues/207 ; ; The coalescer creates a virtual register with two interfering values. function %pr207(i64 vmctx, i32, i32) -> i32 system_v { gv0 = vmctx-8 heap0 = static gv0, min 0, bound 0x5000, guard 0x0040_0000 sig0 = (i64 vmctx, i32, i32) -> i32 system_v sig1 = (i64 vmctx, i32, i32, i32) -> i32 system_v sig2 = (i64 vmctx, i32, i32, i32) -> i32 system_v fn0 = u0:2 sig0 fn1 = u0:0 sig1 fn2 = u0:1 sig2 ebb0(v0: i64, v1: i32, v2: i32): v3 = iconst.i32 0 v4 = iconst.i32 0 v5 = iconst.i32 0 v6 = iconst.i32 0x4ffe v7 = icmp uge v5, v6 brz v7, ebb1 trap heap_oob ebb1: v8 = uextend.i64 v5 v9 = iadd_imm.i64 v0, -8 v10 = load.i64 v9 v11 = iadd v10, v8 v12 = load.i32 v11+4 v13 = iconst.i32 1056 v14 = isub v12, v13 v15 = iconst.i32 0x4ffe v16 = icmp.i32 uge v4, v15 brz v16, ebb2 trap heap_oob ebb2: v17 = uextend.i64 v4 v18 = iadd_imm.i64 v0, -8 v19 = load.i64 v18 v20 = iadd v19, v17 store.i32 v14, v20+4 v21 = iconst.i32 0x4ffe v22 = icmp.i32 uge v2, v21 brz v22, ebb3 trap heap_oob ebb3: v23 = uextend.i64 v2 v24 = iadd_imm.i64 v0, -8 v25 = load.i64 v24 v26 = iadd v25, v23 v27 = sload8.i32 v26 v28 = iconst.i32 255 v29 = band v27, v28 v30 = iconst.i32 0 v31 = icmp eq v29, v30 v32 = bint.i32 v31 brnz v32, ebb90(v14, v1) v33 = call fn0(v0, v1, v27) v34 = iconst.i32 0 v35 = iconst.i32 0 v36 = icmp eq v33, v35 v37 = bint.i32 v36 brnz v37, ebb90(v14, v34) v38 = iconst.i32 0x4ffe v39 = icmp.i32 uge v2, v38 brz v39, ebb4 trap heap_oob ebb4: v40 = uextend.i64 v2 v41 = iadd_imm.i64 v0, -8 v42 = load.i64 v41 v43 = iadd v42, v40 v44 = uload8.i32 v43+1 v45 = iconst.i32 0 v46 = icmp eq v44, v45 v47 = bint.i32 v46 brnz v47, ebb56(v33, v14) v48 = iconst.i32 0x4ffe v49 = icmp.i32 uge v33, v48 brz v49, ebb5 trap heap_oob ebb5: v50 = uextend.i64 v33 v51 = iadd_imm.i64 v0, -8 v52 = load.i64 v51 v53 = iadd v52, v50 v54 = uload8.i32 v53+1 v55 = iconst.i32 0 v56 = icmp eq v54, v55 v57 = bint.i32 v56 brnz v57, ebb90(v14, v34) v58 = iconst.i32 0x4ffe v59 = icmp.i32 uge v2, v58 brz v59, ebb6 trap heap_oob ebb6: v60 = uextend.i64 v2 v61 = iadd_imm.i64 v0, -8 v62 = load.i64 v61 v63 = iadd v62, v60 v64 = uload8.i32 v63+2 v65 = iconst.i32 0 v66 = icmp eq v64, v65 v67 = bint.i32 v66 brnz v67, ebb42 v68 = iconst.i32 0x4ffe v69 = icmp.i32 uge v33, v68 brz v69, ebb7 trap heap_oob ebb7: v70 = uextend.i64 v33 v71 = iadd_imm.i64 v0, -8 v72 = load.i64 v71 v73 = iadd v72, v70 v74 = uload8.i32 v73+2 v75 = iconst.i32 0 v76 = icmp eq v74, v75 v77 = bint.i32 v76 brnz v77, ebb90(v14, v34) v78 = iconst.i32 0x4ffe v79 = icmp.i32 uge v2, v78 brz v79, ebb8 trap heap_oob ebb8: v80 = uextend.i64 v2 v81 = iadd_imm.i64 v0, -8 v82 = load.i64 v81 v83 = iadd v82, v80 v84 = uload8.i32 v83+3 v85 = iconst.i32 0 v86 = icmp eq v84, v85 v87 = bint.i32 v86 brnz v87, ebb46 v88 = iconst.i32 0x4ffe v89 = icmp.i32 uge v33, v88 brz v89, ebb9 trap heap_oob ebb9: v90 = uextend.i64 v33 v91 = iadd_imm.i64 v0, -8 v92 = load.i64 v91 v93 = iadd v92, v90 v94 = uload8.i32 v93+3 v95 = iconst.i32 0 v96 = icmp eq v94, v95 v97 = bint.i32 v96 brnz v97, ebb90(v14, v34) v98 = iconst.i32 0x4ffe v99 = icmp.i32 uge v2, v98 brz v99, ebb10 trap heap_oob ebb10: v100 = uextend.i64 v2 v101 = iadd_imm.i64 v0, -8 v102 = load.i64 v101 v103 = iadd v102, v100 v104 = uload8.i32 v103+4 v105 = iconst.i32 0 v106 = icmp eq v104, v105 v107 = bint.i32 v106 brnz v107, ebb54 v108 = iconst.i32 1 v109 = iadd.i32 v2, v108 v110 = iconst.i32 1048 v111 = iadd.i32 v14, v110 v112 = iconst.i64 0 v113 = iconst.i32 0x4ffe v114 = icmp uge v111, v113 brz v114, ebb11 trap heap_oob ebb11: v115 = uextend.i64 v111 v116 = iadd_imm.i64 v0, -8 v117 = load.i64 v116 v118 = iadd v117, v115 store.i64 v112, v118 v119 = iconst.i32 1040 v120 = iadd.i32 v14, v119 v121 = iconst.i64 0 v122 = iconst.i32 0x4ffe v123 = icmp uge v120, v122 brz v123, ebb12 trap heap_oob ebb12: v124 = uextend.i64 v120 v125 = iadd_imm.i64 v0, -8 v126 = load.i64 v125 v127 = iadd v126, v124 store.i64 v121, v127 v128 = iconst.i64 0 v129 = iconst.i32 0x4ffe v130 = icmp.i32 uge v14, v129 brz v130, ebb13 trap heap_oob ebb13: v131 = uextend.i64 v14 v132 = iadd_imm.i64 v0, -8 v133 = load.i64 v132 v134 = iadd v133, v131 store.i64 v128, v134+1032 v135 = iconst.i64 0 v136 = iconst.i32 0x4ffe v137 = icmp.i32 uge v14, v136 brz v137, ebb14 trap heap_oob ebb14: v138 = uextend.i64 v14 v139 = iadd_imm.i64 v0, -8 v140 = load.i64 v139 v141 = iadd v140, v138 store.i64 v135, v141+1024 v142 = iconst.i32 -1 jump ebb15(v142, v27) ebb15(v143: i32, v144: i32): v145 = iadd.i32 v33, v143 v146 = iconst.i32 1 v147 = iadd v145, v146 v148 = iconst.i32 0x4ffe v149 = icmp uge v147, v148 brz v149, ebb16 trap heap_oob ebb16: v150 = uextend.i64 v147 v151 = iadd_imm.i64 v0, -8 v152 = load.i64 v151 v153 = iadd v152, v150 v154 = uload8.i32 v153 v155 = iconst.i32 0 v156 = icmp eq v154, v155 v157 = bint.i32 v156 brnz v157, ebb89(v14) v158 = iconst.i32 255 v159 = band.i32 v144, v158 v160 = iconst.i32 2 v161 = ishl v159, v160 v162 = iadd.i32 v14, v161 v163 = iconst.i32 2 v164 = iadd.i32 v143, v163 v165 = iconst.i32 0x4ffe v166 = icmp uge v162, v165 brz v166, ebb17 trap heap_oob ebb17: v167 = uextend.i64 v162 v168 = iadd_imm.i64 v0, -8 v169 = load.i64 v168 v170 = iadd v169, v167 store.i32 v164, v170 v171 = iconst.i32 1024 v172 = iadd.i32 v14, v171 v173 = iconst.i32 3 v174 = ushr.i32 v159, v173 v175 = iconst.i32 28 v176 = band v174, v175 v177 = iadd v172, v176 v178 = iconst.i32 0x4ffe v179 = icmp uge v177, v178 brz v179, ebb18 trap heap_oob ebb18: v180 = uextend.i64 v177 v181 = iadd_imm.i64 v0, -8 v182 = load.i64 v181 v183 = iadd v182, v180 v184 = load.i32 v183 v185 = iconst.i32 1 v186 = iconst.i32 31 v187 = band.i32 v144, v186 v188 = ishl v185, v187 v189 = bor v184, v188 v190 = iconst.i32 0x4ffe v191 = icmp.i32 uge v177, v190 brz v191, ebb19 trap heap_oob ebb19: v192 = uextend.i64 v177 v193 = iadd_imm.i64 v0, -8 v194 = load.i64 v193 v195 = iadd v194, v192 store.i32 v189, v195 v196 = iadd.i32 v109, v143 v197 = iconst.i32 1 v198 = iadd.i32 v143, v197 v199 = iconst.i32 1 v200 = iadd v196, v199 v201 = iconst.i32 0x4ffe v202 = icmp uge v200, v201 brz v202, ebb20 trap heap_oob ebb20: v203 = uextend.i64 v200 v204 = iadd_imm.i64 v0, -8 v205 = load.i64 v204 v206 = iadd v205, v203 v207 = uload8.i32 v206 brnz v207, ebb15(v198, v207) jump ebb21 ebb21: v208 = iconst.i32 -1 v209 = iconst.i32 1 v210 = iconst.i32 -1 v211 = iconst.i32 1 v212 = iconst.i32 1 v213 = iadd.i32 v198, v212 v214 = iconst.i32 2 v215 = icmp ult v213, v214 v216 = bint.i32 v215 brnz v216, ebb38(v2, v211, v209, v210, v208, v198, v213, v33, v14) v217 = iconst.i32 -1 v218 = iconst.i32 0 v219 = iconst.i32 1 v220 = iconst.i32 1 v221 = iconst.i32 1 v222 = copy.i32 v44 jump ebb22(v217, v221, v44, v220, v218, v219, v213, v222, v198, v33, v14) ebb22(v223: i32, v224: i32, v225: i32, v226: i32, v227: i32, v228: i32, v229: i32, v230: i32, v231: i32, v232: i32, v233: i32): v234 = copy v228 v235 = iadd v223, v224 v236 = iadd.i32 v2, v235 v237 = iconst.i32 0x4ffe v238 = icmp uge v236, v237 brz v238, ebb23 trap heap_oob ebb23: v239 = uextend.i64 v236 v240 = iadd_imm.i64 v0, -8 v241 = load.i64 v240 v242 = iadd v241, v239 v243 = uload8.i32 v242 v244 = iconst.i32 255 v245 = band.i32 v225, v244 v246 = icmp ne v243, v245 v247 = bint.i32 v246 brnz v247, ebb24 v248 = icmp.i32 ne v224, v226 v249 = bint.i32 v248 brnz v249, ebb25 v250 = iadd.i32 v227, v226 v251 = iconst.i32 1 jump ebb27(v251, v250, v223, v226) ebb24: v252 = icmp.i32 ule v243, v245 v253 = bint.i32 v252 brnz v253, ebb26 v254 = isub.i32 v234, v223 v255 = iconst.i32 1 jump ebb27(v255, v234, v223, v254) ebb25: v256 = iconst.i32 1 v257 = iadd.i32 v224, v256 v258 = copy.i32 v227 jump ebb27(v257, v258, v223, v226) ebb26: v259 = iconst.i32 1 v260 = iconst.i32 1 v261 = iadd.i32 v227, v260 v262 = iconst.i32 1 v263 = copy.i32 v227 jump ebb27(v259, v261, v263, v262) ebb27(v264: i32, v265: i32, v266: i32, v267: i32): v268 = iadd v264, v265 v269 = icmp uge v268, v229 v270 = bint.i32 v269 brnz v270, ebb29 v271 = iadd.i32 v2, v268 v272 = iconst.i32 0x4ffe v273 = icmp uge v271, v272 brz v273, ebb28 trap heap_oob ebb28: v274 = uextend.i64 v271 v275 = iadd_imm.i64 v0, -8 v276 = load.i64 v275 v277 = iadd v276, v274 v278 = uload8.i32 v277 v279 = copy.i32 v265 jump ebb22(v266, v264, v278, v267, v279, v268, v229, v230, v231, v232, v233) ebb29: jump ebb30 ebb30: v280 = iconst.i32 -1 v281 = iconst.i32 0 v282 = iconst.i32 1 v283 = iconst.i32 1 v284 = iconst.i32 1 jump ebb31(v280, v284, v230, v283, v281, v282, v229, v267, v266, v231, v232, v233) ebb31(v285: i32, v286: i32, v287: i32, v288: i32, v289: i32, v290: i32, v291: i32, v292: i32, v293: i32, v294: i32, v295: i32, v296: i32): v297 = copy v290 v298 = iadd v285, v286 v299 = iadd.i32 v2, v298 v300 = iconst.i32 0x4ffe v301 = icmp uge v299, v300 brz v301, ebb32 trap heap_oob ebb32: v302 = uextend.i64 v299 v303 = iadd_imm.i64 v0, -8 v304 = load.i64 v303 v305 = iadd v304, v302 v306 = uload8.i32 v305 v307 = iconst.i32 255 v308 = band.i32 v287, v307 v309 = icmp ne v306, v308 v310 = bint.i32 v309 brnz v310, ebb33 v311 = icmp.i32 ne v286, v288 v312 = bint.i32 v311 brnz v312, ebb34 v313 = iadd.i32 v289, v288 v314 = iconst.i32 1 jump ebb36(v314, v313, v285, v288) ebb33: v315 = icmp.i32 uge v306, v308 v316 = bint.i32 v315 brnz v316, ebb35 v317 = isub.i32 v297, v285 v318 = iconst.i32 1 jump ebb36(v318, v297, v285, v317) ebb34: v319 = iconst.i32 1 v320 = iadd.i32 v286, v319 v321 = copy.i32 v289 jump ebb36(v320, v321, v285, v288) ebb35: v322 = iconst.i32 1 v323 = iconst.i32 1 v324 = iadd.i32 v289, v323 v325 = iconst.i32 1 v326 = copy.i32 v289 jump ebb36(v322, v324, v326, v325) ebb36(v327: i32, v328: i32, v329: i32, v330: i32): v331 = iadd v327, v328 v332 = icmp uge v331, v291 v333 = bint.i32 v332 brnz v333, ebb38(v2, v330, v292, v329, v293, v294, v291, v295, v296) v334 = iadd.i32 v2, v331 v335 = iconst.i32 0x4ffe v336 = icmp uge v334, v335 brz v336, ebb37 trap heap_oob ebb37: v337 = uextend.i64 v334 v338 = iadd_imm.i64 v0, -8 v339 = load.i64 v338 v340 = iadd v339, v337 v341 = uload8.i32 v340 v342 = copy.i32 v328 jump ebb31(v329, v327, v341, v330, v342, v331, v291, v292, v293, v294, v295, v296) ebb38(v343: i32, v344: i32, v345: i32, v346: i32, v347: i32, v348: i32, v349: i32, v350: i32, v351: i32): v352 = iconst.i32 1 v353 = iadd v346, v352 v354 = iconst.i32 1 v355 = iadd v347, v354 v356 = icmp ugt v353, v355 v357 = bint.i32 v356 brnz v357, ebb39(v344) v358 = copy v345 jump ebb39(v358) ebb39(v359: i32): v360 = iadd.i32 v343, v359 brnz.i32 v357, ebb40(v346) v361 = copy.i32 v347 jump ebb40(v361) ebb40(v362: i32): v363 = iconst.i32 1 v364 = iadd v362, v363 v365 = call fn1(v0, v343, v360, v364) v366 = iconst.i32 0 v367 = icmp eq v365, v366 v368 = bint.i32 v367 brnz v368, ebb63 v369 = iconst.i32 1 v370 = iadd v362, v369 v371 = isub.i32 v348, v370 v372 = iconst.i32 1 v373 = iadd v371, v372 v374 = icmp ugt v362, v373 v375 = bint.i32 v374 v376 = copy v362 brnz v375, ebb41(v376) v377 = copy v373 jump ebb41(v377) ebb41(v378: i32): v379 = iconst.i32 1 v380 = iadd v378, v379 v381 = iconst.i32 0 jump ebb64(v380, v381) ebb42: v382 = iconst.i32 8 v383 = ishl.i32 v29, v382 v384 = bor v383, v44 v385 = iconst.i32 0x4ffe v386 = icmp.i32 uge v33, v385 brz v386, ebb43 trap heap_oob ebb43: v387 = uextend.i64 v33 v388 = iadd_imm.i64 v0, -8 v389 = load.i64 v388 v390 = iadd v389, v387 v391 = uload8.i32 v390 jump ebb44(v391, v54, v33) ebb44(v392: i32, v393: i32, v394: i32): v395 = iconst.i32 8 v396 = ishl v392, v395 v397 = iconst.i32 0xff00 v398 = band v396, v397 v399 = iconst.i32 255 v400 = band v393, v399 v401 = bor v398, v400 v402 = icmp eq v401, v384 v403 = bint.i32 v402 brnz v403, ebb56(v394, v14) v404 = iconst.i32 2 v405 = iadd v394, v404 v406 = iconst.i32 1 v407 = iadd v394, v406 v408 = iconst.i32 0x4ffe v409 = icmp uge v405, v408 brz v409, ebb45 trap heap_oob ebb45: v410 = uextend.i64 v405 v411 = iadd_imm.i64 v0, -8 v412 = load.i64 v411 v413 = iadd v412, v410 v414 = uload8.i32 v413 brnz v414, ebb44(v401, v414, v407) jump ebb90(v14, v34) ebb46: v415 = iconst.i32 8 v416 = ishl.i32 v74, v415 v417 = iconst.i32 16 v418 = ishl.i32 v54, v417 v419 = bor v416, v418 v420 = iconst.i32 0x4ffe v421 = icmp.i32 uge v33, v420 brz v421, ebb47 trap heap_oob ebb47: v422 = uextend.i64 v33 v423 = iadd_imm.i64 v0, -8 v424 = load.i64 v423 v425 = iadd v424, v422 v426 = uload8.i32 v425 v427 = iconst.i32 24 v428 = ishl v426, v427 v429 = bor.i32 v419, v428 v430 = iconst.i32 16 v431 = ishl.i32 v44, v430 v432 = iconst.i32 24 v433 = ishl.i32 v29, v432 v434 = bor v431, v433 v435 = iconst.i32 8 v436 = ishl.i32 v64, v435 v437 = bor v434, v436 v438 = icmp eq v429, v437 v439 = bint.i32 v438 brnz v439, ebb56(v33, v14) jump ebb48(v33, v429) ebb48(v440: i32, v441: i32): v442 = iconst.i32 1 v443 = iadd v440, v442 v444 = iconst.i32 3 v445 = iadd v440, v444 v446 = iconst.i32 0x4ffe v447 = icmp uge v445, v446 brz v447, ebb49 trap heap_oob ebb49: v448 = uextend.i64 v445 v449 = iadd_imm.i64 v0, -8 v450 = load.i64 v449 v451 = iadd v450, v448 v452 = uload8.i32 v451 v453 = iconst.i32 0 v454 = icmp eq v452, v453 v455 = bint.i32 v454 brnz v455, ebb51(v14) v456 = bor.i32 v441, v452 v457 = iconst.i32 8 v458 = ishl v456, v457 v459 = icmp ne v458, v437 v460 = bint.i32 v459 v461 = copy.i32 v443 brnz v460, ebb48(v461, v458) jump ebb50 ebb50: jump ebb51(v14) ebb51(v462: i32): v463 = iconst.i32 0 v464 = iconst.i32 1056 v465 = iadd v462, v464 v466 = iconst.i32 0x4ffe v467 = icmp uge v463, v466 brz v467, ebb52 trap heap_oob ebb52: v468 = uextend.i64 v463 v469 = iadd_imm.i64 v0, -8 v470 = load.i64 v469 v471 = iadd v470, v468 store.i32 v465, v471+4 v472 = iconst.i32 0 brnz.i32 v452, ebb53(v443) v473 = copy v472 jump ebb53(v473) ebb53(v474: i32): return v474 ebb54: v475 = iconst.i32 8 v476 = ishl.i32 v74, v475 v477 = iconst.i32 16 v478 = ishl.i32 v54, v477 v479 = bor v476, v478 v480 = bor v479, v94 v481 = iconst.i32 0x4ffe v482 = icmp.i32 uge v33, v481 brz v482, ebb55 trap heap_oob ebb55: v483 = uextend.i64 v33 v484 = iadd_imm.i64 v0, -8 v485 = load.i64 v484 v486 = iadd v485, v483 v487 = uload8.i32 v486 v488 = iconst.i32 24 v489 = ishl v487, v488 v490 = bor.i32 v480, v489 v491 = iconst.i32 16 v492 = ishl.i32 v44, v491 v493 = iconst.i32 24 v494 = ishl.i32 v29, v493 v495 = bor v492, v494 v496 = iconst.i32 8 v497 = ishl.i32 v64, v496 v498 = bor v495, v497 v499 = bor v498, v84 v500 = icmp ne v490, v499 v501 = bint.i32 v500 brnz v501, ebb57 jump ebb56(v33, v14) ebb56(v502: i32, v503: i32): v504 = copy v502 jump ebb90(v503, v504) ebb57: jump ebb58(v33, v490) ebb58(v505: i32, v506: i32): v507 = iconst.i32 4 v508 = iadd v505, v507 v509 = iconst.i32 1 v510 = iadd v505, v509 v511 = iconst.i32 0x4ffe v512 = icmp uge v508, v511 brz v512, ebb59 trap heap_oob ebb59: v513 = uextend.i64 v508 v514 = iadd_imm.i64 v0, -8 v515 = load.i64 v514 v516 = iadd v515, v513 v517 = uload8.i32 v516 v518 = iconst.i32 0 v519 = icmp eq v517, v518 v520 = bint.i32 v519 brnz v520, ebb61(v14) v521 = iconst.i32 8 v522 = ishl.i32 v506, v521 v523 = bor v522, v517 v524 = icmp ne v523, v499 v525 = bint.i32 v524 brnz v525, ebb58(v510, v523) jump ebb60 ebb60: jump ebb61(v14) ebb61(v526: i32): v527 = iconst.i32 0 brnz.i32 v517, ebb62(v510) v528 = copy v527 jump ebb62(v528) ebb62(v529: i32): v530 = copy v529 jump ebb90(v526, v530) ebb63: v531 = isub.i32 v348, v359 v532 = iconst.i32 1 v533 = iadd v531, v532 jump ebb64(v359, v533) ebb64(v534: i32, v535: i32): v536 = iconst.i32 1 v537 = iadd.i32 v343, v536 v538 = iconst.i32 0 v539 = isub v538, v362 v540 = iconst.i32 63 v541 = bor.i32 v349, v540 v542 = isub.i32 v348, v534 v543 = iconst.i32 1 v544 = iadd v542, v543 v545 = iconst.i32 0 v546 = copy.i32 v350 jump ebb65(v350, v546, v349, v541, v348, v351, v544, v534, v545, v535, v343, v364, v537, v539, v362) ebb65(v547: i32, v548: i32, v549: i32, v550: i32, v551: i32, v552: i32, v553: i32, v554: i32, v555: i32, v556: i32, v557: i32, v558: i32, v559: i32, v560: i32, v561: i32): v562 = copy v556 v563 = isub v547, v548 v564 = icmp uge v563, v549 v565 = bint.i32 v564 brnz v565, ebb67(v547) v566 = iconst.i32 0 v567 = call fn2(v0, v547, v566, v550) brnz v567, ebb66 v568 = iadd v547, v550 jump ebb67(v568) ebb66: v569 = isub.i32 v567, v548 v570 = icmp ult v569, v549 v571 = bint.i32 v570 brnz v571, ebb89(v552) v572 = copy.i32 v567 jump ebb67(v572) ebb67(v573: i32): v574 = iconst.i32 1 v575 = iadd.i32 v548, v551 v576 = iconst.i32 0x4ffe v577 = icmp uge v575, v576 brz v577, ebb68 trap heap_oob ebb68: v578 = uextend.i64 v575 v579 = iadd_imm.i64 v0, -8 v580 = load.i64 v579 v581 = iadd v580, v578 v582 = uload8.i32 v581 v583 = iconst.i32 31 v584 = band v582, v583 v585 = ishl.i32 v574, v584 v586 = iconst.i32 1024 v587 = iadd.i32 v552, v586 v588 = iconst.i32 3 v589 = ushr v582, v588 v590 = iconst.i32 28 v591 = band v589, v590 v592 = iadd v587, v591 v593 = iconst.i32 0x4ffe v594 = icmp uge v592, v593 brz v594, ebb69 trap heap_oob ebb69: v595 = uextend.i64 v592 v596 = iadd_imm.i64 v0, -8 v597 = load.i64 v596 v598 = iadd v597, v595 v599 = load.i32 v598 v600 = band.i32 v585, v599 v601 = iconst.i32 0 v602 = icmp eq v600, v601 v603 = bint.i32 v602 brnz v603, ebb74 v604 = iconst.i32 2 v605 = ishl.i32 v582, v604 v606 = iadd.i32 v552, v605 v607 = iconst.i32 0x4ffe v608 = icmp uge v606, v607 brz v608, ebb70 trap heap_oob ebb70: v609 = uextend.i64 v606 v610 = iadd_imm.i64 v0, -8 v611 = load.i64 v610 v612 = iadd v611, v609 v613 = load.i32 v612 v614 = isub.i32 v551, v613 v615 = iconst.i32 -1 v616 = icmp eq v614, v615 v617 = bint.i32 v616 brnz v617, ebb75 v618 = iconst.i32 1 v619 = iadd v614, v618 v620 = icmp ult v619, v554 v621 = bint.i32 v620 v622 = copy.i32 v553 brnz v621, ebb71(v622) v623 = copy v619 jump ebb71(v623) ebb71(v624: i32): v625 = copy v624 brnz.i32 v555, ebb72(v625) jump ebb72(v619) ebb72(v626: i32): brnz.i32 v562, ebb73(v626) jump ebb73(v619) ebb73(v627: i32): v628 = copy.i32 v554 v629 = copy.i32 v562 jump ebb87(v548, v627, v573, v549, v550, v551, v552, v553, v628, v629, v557, v558, v559, v560, v561) ebb74: v630 = copy.i32 v549 v631 = copy.i32 v554 v632 = copy.i32 v562 jump ebb87(v548, v630, v573, v549, v550, v551, v552, v553, v631, v632, v557, v558, v559, v560, v561) ebb75: v633 = icmp.i32 ugt v558, v555 v634 = bint.i32 v633 v635 = copy.i32 v558 brnz v634, ebb76(v635) v636 = copy.i32 v555 jump ebb76(v636) ebb76(v637: i32): v638 = iadd.i32 v557, v637 v639 = iconst.i32 0x4ffe v640 = icmp uge v638, v639 brz v640, ebb77 trap heap_oob ebb77: v641 = uextend.i64 v638 v642 = iadd_imm.i64 v0, -8 v643 = load.i64 v642 v644 = iadd v643, v641 v645 = uload8.i32 v644 v646 = iconst.i32 0 v647 = icmp eq v645, v646 v648 = bint.i32 v647 brnz v648, ebb82(v548, v549, v551, v552) v649 = iadd.i32 v548, v637 v650 = iadd.i32 v559, v637 v651 = iadd.i32 v560, v637 jump ebb78(v645, v649, v651, v650) ebb78(v652: i32, v653: i32, v654: i32, v655: i32): v656 = iconst.i32 255 v657 = band v652, v656 v658 = iconst.i32 0x4ffe v659 = icmp uge v653, v658 brz v659, ebb79 trap heap_oob ebb79: v660 = uextend.i64 v653 v661 = iadd_imm.i64 v0, -8 v662 = load.i64 v661 v663 = iadd v662, v660 v664 = uload8.i32 v663 v665 = icmp.i32 ne v657, v664 v666 = bint.i32 v665 v667 = copy.i32 v554 v668 = copy.i32 v562 brnz v666, ebb87(v548, v654, v573, v549, v550, v551, v552, v553, v667, v668, v557, v558, v559, v560, v561) v669 = iconst.i32 1 v670 = iadd.i32 v653, v669 v671 = iconst.i32 1 v672 = iadd.i32 v654, v671 v673 = iconst.i32 0x4ffe v674 = icmp.i32 uge v655, v673 brz v674, ebb80 trap heap_oob ebb80: v675 = uextend.i64 v655 v676 = iadd_imm.i64 v0, -8 v677 = load.i64 v676 v678 = iadd v677, v675 v679 = uload8.i32 v678 v680 = iconst.i32 1 v681 = iadd.i32 v655, v680 brnz v679, ebb78(v679, v670, v672, v681) jump ebb81 ebb81: jump ebb82(v548, v549, v551, v552) ebb82(v682: i32, v683: i32, v684: i32, v685: i32): v686 = icmp.i32 ule v558, v555 v687 = bint.i32 v686 brnz v687, ebb90(v685, v682) v688 = copy.i32 v561 jump ebb83(v688) ebb83(v689: i32): v690 = iadd.i32 v557, v689 v691 = iconst.i32 0x4ffe v692 = icmp uge v690, v691 brz v692, ebb84 trap heap_oob ebb84: v693 = uextend.i64 v690 v694 = iadd_imm.i64 v0, -8 v695 = load.i64 v694 v696 = iadd v695, v693 v697 = uload8.i32 v696 v698 = iadd.i32 v682, v689 v699 = iconst.i32 0x4ffe v700 = icmp uge v698, v699 brz v700, ebb85 trap heap_oob ebb85: v701 = uextend.i64 v698 v702 = iadd_imm.i64 v0, -8 v703 = load.i64 v702 v704 = iadd v703, v701 v705 = uload8.i32 v704 v706 = icmp.i32 ne v697, v705 v707 = bint.i32 v706 brnz v707, ebb86 v708 = icmp.i32 ule v689, v555 v709 = bint.i32 v708 v710 = iconst.i32 -1 v711 = iadd.i32 v689, v710 v712 = iconst.i32 0 v713 = icmp eq v709, v712 v714 = bint.i32 v713 brnz v714, ebb83(v711) jump ebb90(v685, v682) ebb86: v715 = copy.i32 v554 v716 = copy.i32 v562 jump ebb88(v682, v554, v573, v683, v550, v684, v685, v553, v715, v562, v716, v557, v558, v559, v560, v561) ebb87(v717: i32, v718: i32, v719: i32, v720: i32, v721: i32, v722: i32, v723: i32, v724: i32, v725: i32, v726: i32, v727: i32, v728: i32, v729: i32, v730: i32, v731: i32): v732 = copy v718 v733 = iconst.i32 0 jump ebb88(v717, v732, v719, v720, v721, v722, v723, v724, v725, v733, v726, v727, v728, v729, v730, v731) ebb88(v734: i32, v735: i32, v736: i32, v737: i32, v738: i32, v739: i32, v740: i32, v741: i32, v742: i32, v743: i32, v744: i32, v745: i32, v746: i32, v747: i32, v748: i32, v749: i32): v750 = iadd v734, v735 v751 = copy v742 v752 = copy v743 v753 = copy v744 jump ebb65(v736, v750, v737, v738, v739, v740, v741, v751, v752, v753, v745, v746, v747, v748, v749) ebb89(v754: i32): v755 = iconst.i32 0 jump ebb90(v754, v755) ebb90(v756: i32, v757: i32): v758 = iconst.i32 0 v759 = iconst.i32 1056 v760 = iadd v756, v759 v761 = iconst.i32 0x4ffe v762 = icmp uge v758, v761 brz v762, ebb91 trap heap_oob ebb91: v763 = uextend.i64 v758 v764 = iadd_imm.i64 v0, -8 v765 = load.i64 v764 v766 = iadd v765, v763 store.i32 v760, v766+4 jump ebb92(v757) ebb92(v767: i32): return v767 } ; Same problem from musl.wasm. function %musl(f64 [%xmm0], i64 vmctx [%rdi]) -> f64 [%xmm0] system_v { gv0 = vmctx heap0 = static gv0, min 0, bound 0x0001_0000_0000, guard 0x8000_0000 sig0 = (f64 [%xmm0], i32 [%rdi], i64 vmctx [%rsi]) -> f64 [%xmm0] system_v fn0 = u0:517 sig0 ebb0(v0: f64, v1: i64): v3 = iconst.i64 0 v4 = iconst.i32 0 v131 = iconst.i64 0 v5 = bitcast.f64 v131 v6 = iconst.i32 0 v7 = iconst.i32 0 v8 = iconst.i32 0 v132 = uextend.i64 v8 v133 = iadd_imm v1, 0 v134 = load.i64 v133 v9 = iadd v134, v132 v10 = load.i32 v9+4 v11 = iconst.i32 16 v12 = isub v10, v11 v135 = uextend.i64 v7 v136 = iadd_imm v1, 0 v137 = load.i64 v136 v13 = iadd v137, v135 store v12, v13+4 v14 = bitcast.i64 v0 v15 = iconst.i64 63 v16 = ushr v14, v15 v17 = ireduce.i32 v16 v18 = iconst.i64 32 v19 = ushr v14, v18 v20 = ireduce.i32 v19 v21 = iconst.i32 0x7fff_ffff v22 = band v20, v21 v23 = iconst.i32 0x4086_232b v24 = icmp ult v22, v23 v25 = bint.i32 v24 brnz v25, ebb10 v26 = iconst.i64 0x7fff_ffff_ffff_ffff v27 = band v14, v26 v28 = iconst.i64 0x7ff0_0000_0000_0000 v29 = icmp ule v27, v28 v30 = bint.i32 v29 brnz v30, ebb9 jump ebb2(v12, v0) ebb10: v31 = iconst.i32 0x3fd6_2e43 v32 = icmp.i32 ult v22, v31 v33 = bint.i32 v32 brnz v33, ebb8 v34 = iconst.i32 0x3ff0_a2b2 v35 = icmp.i32 uge v22, v34 v36 = bint.i32 v35 brnz v36, ebb6 v37 = iconst.i32 1 v38 = bxor.i32 v17, v37 v39 = isub v38, v17 jump ebb5(v0, v39) ebb9: v138 = iconst.i64 0x4086_2e42_fefa_39ef v40 = bitcast.f64 v138 v41 = fcmp ge v40, v0 v42 = bint.i32 v41 v139 = fcmp.f64 uno v0, v0 v140 = fcmp.f64 one v0, v0 v43 = bor v139, v140 v44 = bint.i32 v43 v45 = bor v42, v44 brnz v45, ebb7 v141 = iconst.i64 0x7fe0_0000_0000_0000 v46 = bitcast.f64 v141 v47 = fmul.f64 v0, v46 jump ebb2(v12, v47) ebb8: v48 = iconst.i32 0x3e30_0000 v49 = icmp.i32 ule v22, v48 v50 = bint.i32 v49 brnz v50, ebb3 v51 = iconst.i32 0 v142 = iconst.i64 0 v52 = bitcast.f64 v142 v178 = copy.f64 v0 jump ebb4(v0, v178, v52, v51) ebb7: v143 = iconst.i64 0xc086_232b_dd7a_bcd2 v53 = bitcast.f64 v143 v54 = fcmp.f64 ge v0, v53 v55 = bint.i32 v54 v56 = bor v55, v44 brnz v56, ebb6 v144 = iconst.i64 0xb6a0_0000_0000_0000 v57 = bitcast.f64 v144 v58 = fdiv v57, v0 v59 = fdemote.f32 v58 v145 = uextend.i64 v12 v146 = iadd_imm.i64 v1, 0 v147 = load.i64 v146 v60 = iadd v147, v145 store v59, v60+12 v148 = iconst.i64 0 v61 = bitcast.f64 v148 v149 = iconst.i64 0xc087_4910_d52d_3051 v62 = bitcast.f64 v149 v63 = fcmp gt v62, v0 v64 = bint.i32 v63 brnz v64, ebb2(v12, v61) jump ebb6 ebb6: v150 = iconst.i64 0x3ff7_1547_652b_82fe v66 = bitcast.f64 v150 v67 = fmul.f64 v0, v66 v69 = iconst.i32 3 v70 = ishl.i32 v17, v69 v71 = iconst.i32 5040 v72 = iadd v70, v71 v151 = uextend.i64 v72 v152 = iadd_imm.i64 v1, 0 v153 = load.i64 v152 v73 = iadd v153, v151 v74 = load.f64 v73 v75 = fadd v67, v74 v76 = x86_cvtt2si.i32 v75 v158 = iconst.i32 0x8000_0000 v154 = icmp ne v76, v158 brnz v154, ebb11 v155 = fcmp uno v75, v75 brz v155, ebb12 trap bad_toint ebb12: v159 = iconst.i64 0xc1e0_0000_0020_0000 v156 = bitcast.f64 v159 v157 = fcmp ge v156, v75 brz v157, ebb13 trap int_ovf ebb13: jump ebb11 ebb11: jump ebb5(v0, v76) ebb5(v77: f64, v78: i32): v79 = fcvt_from_sint.f64 v78 v160 = iconst.i64 0xbfe6_2e42_fee0_0000 v80 = bitcast.f64 v160 v81 = fmul v79, v80 v82 = fadd v77, v81 v161 = iconst.i64 0x3dea_39ef_3579_3c76 v83 = bitcast.f64 v161 v84 = fmul v79, v83 v85 = fsub v82, v84 jump ebb4(v82, v85, v84, v78) ebb4(v86: f64, v87: f64, v108: f64, v113: i32): v88 = fmul v87, v87 v162 = iconst.i64 0x3e66_3769_72be_a4d0 v89 = bitcast.f64 v162 v90 = fmul v88, v89 v163 = iconst.i64 0xbebb_bd41_c5d2_6bf1 v91 = bitcast.f64 v163 v92 = fadd v90, v91 v93 = fmul v88, v92 v164 = iconst.i64 0x3f11_566a_af25_de2c v94 = bitcast.f64 v164 v95 = fadd v93, v94 v96 = fmul v88, v95 v165 = iconst.i64 0xbf66_c16c_16be_bd93 v97 = bitcast.f64 v165 v98 = fadd v96, v97 v99 = fmul v88, v98 v166 = iconst.i64 0x3fc5_5555_5555_553e v100 = bitcast.f64 v166 v101 = fadd v99, v100 v102 = fmul v88, v101 v103 = fsub v87, v102 v104 = fmul v87, v103 v167 = iconst.i64 0x4000_0000_0000_0000 v105 = bitcast.f64 v167 v106 = fsub v105, v103 v107 = fdiv v104, v106 v109 = fsub v107, v108 v110 = fadd v86, v109 v168 = iconst.i64 0x3ff0_0000_0000_0000 v111 = bitcast.f64 v168 v112 = fadd v110, v111 v169 = iconst.i32 0 v114 = icmp eq v113, v169 v115 = bint.i32 v114 brnz v115, ebb2(v12, v112) v116 = call fn0(v112, v113, v1) jump ebb2(v12, v116) ebb3: v170 = iconst.i64 0x7fe0_0000_0000_0000 v117 = bitcast.f64 v170 v118 = fadd.f64 v0, v117 v171 = uextend.i64 v12 v172 = iadd_imm.i64 v1, 0 v173 = load.i64 v172 v119 = iadd v173, v171 store v118, v119 v174 = iconst.i64 0x3ff0_0000_0000_0000 v120 = bitcast.f64 v174 v121 = fadd.f64 v0, v120 jump ebb2(v12, v121) ebb2(v123: i32, v130: f64): v122 = iconst.i32 0 v127 = iconst.i32 16 v128 = iadd v123, v127 v175 = uextend.i64 v122 v176 = iadd_imm.i64 v1, 0 v177 = load.i64 v176 v129 = iadd v177, v175 store v128, v129+4 jump ebb1(v130) ebb1(v2: f64): return v2 }