* Cranelift: remove non-egraphs optimization pipeline and `use_egraphs` option. This PR removes the LICM, GVN, and preopt passes, and associated support pieces, from `cranelift-codegen`. Not to worry, we still have optimizations: the egraph framework subsumes all of these, and has been on by default since #5181. A few decision points: - Filetests for the legacy LICM, GVN and simple_preopt were removed too. As we built optimizations in the egraph framework we wrote new tests for the equivalent functionality, and many of the old tests were testing specific behaviors in the old implementations that may not be relevant anymore. However if folks prefer I could take a different approach here and try to port over all of the tests. - The corresponding filetest modes (commands) were deleted too. The `test alias_analysis` mode remains, but no longer invokes a separate GVN first (since there is no separate GVN that will not also do alias analysis) so the tests were tweaked slightly to work with that. The egrpah testsuite also covers alias analysis. - The `divconst_magic_numbers` module is removed since it's unused without `simple_preopt`, though this is the one remaining optimization we still need to build in the egraphs framework, pending #5908. The magic numbers will live forever in git history so removing this in the meantime is not a major issue IMHO. - The `use_egraphs` setting itself was removed at both the Cranelift and Wasmtime levels. It has been marked deprecated for a few releases now (Wasmtime 6.0, 7.0, upcoming 8.0, and corresponding Cranelift versions) so I think this is probably OK. As an alternative if anyone feels strongly, we could leave the setting and make it a no-op. * Update test outputs for remaining test differences.
394 lines
12 KiB
Plaintext
394 lines
12 KiB
Plaintext
test run
|
|
target riscv64
|
|
|
|
function %a(i16, f64, i32, i64, i16, i128, f32) -> i16 {
|
|
ss0 = explicit_slot 24
|
|
|
|
block0(v0: i16, v1: f64, v2: i32, v3: i64, v4: i16, v5: i128, v6: f32):
|
|
v8 = iconst.i8 0
|
|
v9 = iconst.i16 0
|
|
v10 = iconst.i32 0
|
|
v11 = iconst.i64 0
|
|
v12 = uextend.i128 v11 ; v11 = 0
|
|
stack_store v12, ss0
|
|
stack_store v11, ss0+16 ; v11 = 0
|
|
v55 = iconst.i32 0
|
|
v56 = iconst.i32 1
|
|
v57 = icmp eq v2, v55 ; v55 = 0
|
|
v58 = ishl_imm v56, 31 ; v56 = 1
|
|
v59 = isub v55, v56 ; v55 = 0, v56 = 1
|
|
v60 = icmp eq v2, v58
|
|
v61 = icmp eq v2, v59
|
|
v62 = band v60, v61
|
|
v63 = bor v57, v62
|
|
v64 = select v63, v56, v2 ; v56 = 1
|
|
v13 = sdiv v2, v64
|
|
v65 = iconst.i32 0
|
|
v66 = iconst.i32 1
|
|
v67 = icmp eq v13, v65 ; v65 = 0
|
|
v68 = ishl_imm v66, 31 ; v66 = 1
|
|
v69 = isub v65, v66 ; v65 = 0, v66 = 1
|
|
v70 = icmp eq v13, v68
|
|
v71 = icmp eq v13, v69
|
|
v72 = band v70, v71
|
|
v73 = bor v67, v72
|
|
v74 = select v73, v66, v13 ; v66 = 1
|
|
v14 = sdiv v13, v74
|
|
v75 = iconst.i32 0
|
|
v76 = iconst.i32 1
|
|
v77 = icmp eq v14, v75 ; v75 = 0
|
|
v78 = ishl_imm v76, 31 ; v76 = 1
|
|
v79 = isub v75, v76 ; v75 = 0, v76 = 1
|
|
v80 = icmp eq v14, v78
|
|
v81 = icmp eq v14, v79
|
|
v82 = band v80, v81
|
|
v83 = bor v77, v82
|
|
v84 = select v83, v76, v14 ; v76 = 1
|
|
v15 = sdiv v14, v84
|
|
v85 = iconst.i64 0
|
|
v86 = iconst.i64 1
|
|
v87 = icmp eq v3, v85 ; v85 = 0
|
|
v88 = ishl_imm v86, 63 ; v86 = 1
|
|
v89 = isub v85, v86 ; v85 = 0, v86 = 1
|
|
v90 = icmp eq v3, v88
|
|
v91 = icmp eq v3, v89
|
|
v92 = band v90, v91
|
|
v93 = bor v87, v92
|
|
v94 = select v93, v86, v3 ; v86 = 1
|
|
v16 = sdiv v3, v94
|
|
v95 = iconst.i32 0
|
|
v96 = iconst.i32 1
|
|
v97 = icmp eq v15, v95 ; v95 = 0
|
|
v98 = ishl_imm v96, 31 ; v96 = 1
|
|
v99 = isub v95, v96 ; v95 = 0, v96 = 1
|
|
v100 = icmp eq v15, v98
|
|
v101 = icmp eq v15, v99
|
|
v102 = band v100, v101
|
|
v103 = bor v97, v102
|
|
v104 = select v103, v96, v15 ; v96 = 1
|
|
v17 = sdiv v15, v104
|
|
v18 = fmax_pseudo v6, v6
|
|
v105 = iconst.i32 0
|
|
v106 = iconst.i32 1
|
|
v107 = icmp eq v17, v105 ; v105 = 0
|
|
v108 = ishl_imm v106, 31 ; v106 = 1
|
|
v109 = isub v105, v106 ; v105 = 0, v106 = 1
|
|
v110 = icmp eq v17, v108
|
|
v111 = icmp eq v17, v109
|
|
v112 = band v110, v111
|
|
v113 = bor v107, v112
|
|
v114 = select v113, v106, v17 ; v106 = 1
|
|
v19 = sdiv v17, v114
|
|
v115 = iconst.i32 0
|
|
v116 = iconst.i32 1
|
|
v117 = icmp eq v19, v115 ; v115 = 0
|
|
v118 = ishl_imm v116, 31 ; v116 = 1
|
|
v119 = isub v115, v116 ; v115 = 0, v116 = 1
|
|
v120 = icmp eq v19, v118
|
|
v121 = icmp eq v19, v119
|
|
v122 = band v120, v121
|
|
v123 = bor v117, v122
|
|
v124 = select v123, v116, v19 ; v116 = 1
|
|
v20 = sdiv v19, v124
|
|
v125 = iconst.i32 0
|
|
v126 = iconst.i32 1
|
|
v127 = icmp eq v20, v125 ; v125 = 0
|
|
v128 = ishl_imm v126, 31 ; v126 = 1
|
|
v129 = isub v125, v126 ; v125 = 0, v126 = 1
|
|
v130 = icmp eq v20, v128
|
|
v131 = icmp eq v20, v129
|
|
v132 = band v130, v131
|
|
v133 = bor v127, v132
|
|
v134 = select v133, v126, v20 ; v126 = 1
|
|
v21 = sdiv v20, v134
|
|
stack_store v16, ss0+4
|
|
v135 = iconst.i32 0
|
|
v136 = iconst.i32 1
|
|
v137 = icmp eq v21, v135 ; v135 = 0
|
|
v138 = ishl_imm v136, 31 ; v136 = 1
|
|
v139 = isub v135, v136 ; v135 = 0, v136 = 1
|
|
v140 = icmp eq v21, v138
|
|
v141 = icmp eq v21, v139
|
|
v142 = band v140, v141
|
|
v143 = bor v137, v142
|
|
v144 = select v143, v136, v21 ; v136 = 1
|
|
v22 = sdiv v21, v144
|
|
v145 = iconst.i32 0
|
|
v146 = iconst.i32 1
|
|
v147 = icmp eq v22, v145 ; v145 = 0
|
|
v148 = ishl_imm v146, 31 ; v146 = 1
|
|
v149 = isub v145, v146 ; v145 = 0, v146 = 1
|
|
v150 = icmp eq v22, v148
|
|
v151 = icmp eq v22, v149
|
|
v152 = band v150, v151
|
|
v153 = bor v147, v152
|
|
v154 = select v153, v146, v22 ; v146 = 1
|
|
v23 = sdiv v22, v154
|
|
v155 = iconst.i32 0
|
|
v156 = iconst.i32 1
|
|
v157 = icmp eq v23, v155 ; v155 = 0
|
|
v158 = ishl_imm v156, 31 ; v156 = 1
|
|
v159 = isub v155, v156 ; v155 = 0, v156 = 1
|
|
v160 = icmp eq v23, v158
|
|
v161 = icmp eq v23, v159
|
|
v162 = band v160, v161
|
|
v163 = bor v157, v162
|
|
v164 = select v163, v156, v23 ; v156 = 1
|
|
v24 = sdiv v23, v164
|
|
v165 = iconst.i32 0
|
|
v166 = iconst.i32 1
|
|
v167 = icmp eq v24, v165 ; v165 = 0
|
|
v168 = ishl_imm v166, 31 ; v166 = 1
|
|
v169 = isub v165, v166 ; v165 = 0, v166 = 1
|
|
v170 = icmp eq v24, v168
|
|
v171 = icmp eq v24, v169
|
|
v172 = band v170, v171
|
|
v173 = bor v167, v172
|
|
v174 = select v173, v166, v24 ; v166 = 1
|
|
v25 = sdiv v24, v174
|
|
v175 = iconst.i32 0
|
|
v176 = iconst.i32 1
|
|
v177 = icmp eq v25, v175 ; v175 = 0
|
|
v178 = ishl_imm v176, 31 ; v176 = 1
|
|
v179 = isub v175, v176 ; v175 = 0, v176 = 1
|
|
v180 = icmp eq v25, v178
|
|
v181 = icmp eq v25, v179
|
|
v182 = band v180, v181
|
|
v183 = bor v177, v182
|
|
v184 = select v183, v176, v25 ; v176 = 1
|
|
v26 = sdiv v25, v184
|
|
v185 = iconst.i32 0
|
|
v186 = iconst.i32 1
|
|
v187 = icmp eq v26, v185 ; v185 = 0
|
|
v188 = ishl_imm v186, 31 ; v186 = 1
|
|
v189 = isub v185, v186 ; v185 = 0, v186 = 1
|
|
v190 = icmp eq v26, v188
|
|
v191 = icmp eq v26, v189
|
|
v192 = band v190, v191
|
|
v193 = bor v187, v192
|
|
v194 = select v193, v186, v26 ; v186 = 1
|
|
v27 = sdiv v26, v194
|
|
v195 = iconst.i32 0
|
|
v196 = iconst.i32 1
|
|
v197 = icmp eq v27, v195 ; v195 = 0
|
|
v198 = ishl_imm v196, 31 ; v196 = 1
|
|
v199 = isub v195, v196 ; v195 = 0, v196 = 1
|
|
v200 = icmp eq v27, v198
|
|
v201 = icmp eq v27, v199
|
|
v202 = band v200, v201
|
|
v203 = bor v197, v202
|
|
v204 = select v203, v196, v27 ; v196 = 1
|
|
v28 = sdiv v27, v204
|
|
v205 = iconst.i32 0
|
|
v206 = iconst.i32 1
|
|
v207 = icmp eq v28, v205 ; v205 = 0
|
|
v208 = ishl_imm v206, 31 ; v206 = 1
|
|
v209 = isub v205, v206 ; v205 = 0, v206 = 1
|
|
v210 = icmp eq v28, v208
|
|
v211 = icmp eq v28, v209
|
|
v212 = band v210, v211
|
|
v213 = bor v207, v212
|
|
v214 = select v213, v206, v28 ; v206 = 1
|
|
v29 = sdiv v28, v214
|
|
v52 = nearest v1
|
|
v53 = fcmp ne v52, v52
|
|
v54 = f64const +NaN
|
|
v30 = select v53, v54, v52 ; v54 = +NaN
|
|
v215 = iconst.i32 0
|
|
v216 = iconst.i32 1
|
|
v217 = icmp eq v29, v215 ; v215 = 0
|
|
v218 = ishl_imm v216, 31 ; v216 = 1
|
|
v219 = isub v215, v216 ; v215 = 0, v216 = 1
|
|
v220 = icmp eq v29, v218
|
|
v221 = icmp eq v29, v219
|
|
v222 = band v220, v221
|
|
v223 = bor v217, v222
|
|
v224 = select v223, v216, v29 ; v216 = 1
|
|
v31 = sdiv v29, v224
|
|
v225 = iconst.i32 0
|
|
v226 = iconst.i32 1
|
|
v227 = icmp eq v31, v225 ; v225 = 0
|
|
v228 = ishl_imm v226, 31 ; v226 = 1
|
|
v229 = isub v225, v226 ; v225 = 0, v226 = 1
|
|
v230 = icmp eq v31, v228
|
|
v231 = icmp eq v31, v229
|
|
v232 = band v230, v231
|
|
v233 = bor v227, v232
|
|
v234 = select v233, v226, v31 ; v226 = 1
|
|
v32 = sdiv v31, v234
|
|
v235 = iconst.i32 0
|
|
v236 = iconst.i32 1
|
|
v237 = icmp eq v32, v235 ; v235 = 0
|
|
v238 = ishl_imm v236, 31 ; v236 = 1
|
|
v239 = isub v235, v236 ; v235 = 0, v236 = 1
|
|
v240 = icmp eq v32, v238
|
|
v241 = icmp eq v32, v239
|
|
v242 = band v240, v241
|
|
v243 = bor v237, v242
|
|
v244 = select v243, v236, v32 ; v236 = 1
|
|
v33 = sdiv v32, v244
|
|
v245 = iconst.i32 0
|
|
v246 = iconst.i32 1
|
|
v247 = icmp eq v33, v245 ; v245 = 0
|
|
v248 = ishl_imm v246, 31 ; v246 = 1
|
|
v249 = isub v245, v246 ; v245 = 0, v246 = 1
|
|
v250 = icmp eq v33, v248
|
|
v251 = icmp eq v33, v249
|
|
v252 = band v250, v251
|
|
v253 = bor v247, v252
|
|
v254 = select v253, v246, v33 ; v246 = 1
|
|
v34 = sdiv v33, v254
|
|
v35 = fmax_pseudo v18, v18
|
|
v255 = iconst.i32 0
|
|
v256 = iconst.i32 1
|
|
v257 = icmp eq v34, v255 ; v255 = 0
|
|
v258 = ishl_imm v256, 31 ; v256 = 1
|
|
v259 = isub v255, v256 ; v255 = 0, v256 = 1
|
|
v260 = icmp eq v34, v258
|
|
v261 = icmp eq v34, v259
|
|
v262 = band v260, v261
|
|
v263 = bor v257, v262
|
|
v264 = select v263, v256, v34 ; v256 = 1
|
|
v36 = sdiv v34, v264
|
|
v265 = iconst.i32 0
|
|
v266 = iconst.i32 1
|
|
v267 = icmp eq v36, v265 ; v265 = 0
|
|
v268 = ishl_imm v266, 31 ; v266 = 1
|
|
v269 = isub v265, v266 ; v265 = 0, v266 = 1
|
|
v270 = icmp eq v36, v268
|
|
v271 = icmp eq v36, v269
|
|
v272 = band v270, v271
|
|
v273 = bor v267, v272
|
|
v274 = select v273, v266, v36 ; v266 = 1
|
|
v37 = sdiv v36, v274
|
|
v275 = iconst.i32 0
|
|
v276 = iconst.i32 1
|
|
v277 = icmp eq v37, v275 ; v275 = 0
|
|
v278 = ishl_imm v276, 31 ; v276 = 1
|
|
v279 = isub v275, v276 ; v275 = 0, v276 = 1
|
|
v280 = icmp eq v37, v278
|
|
v281 = icmp eq v37, v279
|
|
v282 = band v280, v281
|
|
v283 = bor v277, v282
|
|
v284 = select v283, v276, v37 ; v276 = 1
|
|
v38 = sdiv v37, v284
|
|
stack_store v16, ss0+4
|
|
v285 = iconst.i32 0
|
|
v286 = iconst.i32 1
|
|
v287 = icmp eq v38, v285 ; v285 = 0
|
|
v288 = ishl_imm v286, 31 ; v286 = 1
|
|
v289 = isub v285, v286 ; v285 = 0, v286 = 1
|
|
v290 = icmp eq v38, v288
|
|
v291 = icmp eq v38, v289
|
|
v292 = band v290, v291
|
|
v293 = bor v287, v292
|
|
v294 = select v293, v286, v38 ; v286 = 1
|
|
v39 = sdiv v38, v294
|
|
v295 = iconst.i32 0
|
|
v296 = iconst.i32 1
|
|
v297 = icmp eq v39, v295 ; v295 = 0
|
|
v298 = ishl_imm v296, 31 ; v296 = 1
|
|
v299 = isub v295, v296 ; v295 = 0, v296 = 1
|
|
v300 = icmp eq v39, v298
|
|
v301 = icmp eq v39, v299
|
|
v302 = band v300, v301
|
|
v303 = bor v297, v302
|
|
v304 = select v303, v296, v39 ; v296 = 1
|
|
v40 = sdiv v39, v304
|
|
v41 = rotr v16, v16
|
|
v305 = iconst.i32 0
|
|
v306 = iconst.i32 1
|
|
v307 = icmp eq v40, v305 ; v305 = 0
|
|
v308 = ishl_imm v306, 31 ; v306 = 1
|
|
v309 = isub v305, v306 ; v305 = 0, v306 = 1
|
|
v310 = icmp eq v40, v308
|
|
v311 = icmp eq v40, v309
|
|
v312 = band v310, v311
|
|
v313 = bor v307, v312
|
|
v314 = select v313, v306, v40 ; v306 = 1
|
|
v42 = sdiv v40, v314
|
|
v315 = iconst.i32 0
|
|
v316 = iconst.i32 1
|
|
v317 = icmp eq v42, v315 ; v315 = 0
|
|
v318 = ishl_imm v316, 31 ; v316 = 1
|
|
v319 = isub v315, v316 ; v315 = 0, v316 = 1
|
|
v320 = icmp eq v42, v318
|
|
v321 = icmp eq v42, v319
|
|
v322 = band v320, v321
|
|
v323 = bor v317, v322
|
|
v324 = select v323, v316, v42 ; v316 = 1
|
|
v43 = sdiv v42, v324
|
|
v325 = iconst.i32 0
|
|
v326 = iconst.i32 1
|
|
v327 = icmp eq v43, v325 ; v325 = 0
|
|
v328 = ishl_imm v326, 31 ; v326 = 1
|
|
v329 = isub v325, v326 ; v325 = 0, v326 = 1
|
|
v330 = icmp eq v43, v328
|
|
v331 = icmp eq v43, v329
|
|
v332 = band v330, v331
|
|
v333 = bor v327, v332
|
|
v334 = select v333, v326, v43 ; v326 = 1
|
|
v44 = sdiv v43, v334
|
|
v335 = iconst.i32 0
|
|
v336 = iconst.i32 1
|
|
v337 = icmp eq v44, v335 ; v335 = 0
|
|
v338 = ishl_imm v336, 31 ; v336 = 1
|
|
v339 = isub v335, v336 ; v335 = 0, v336 = 1
|
|
v340 = icmp eq v44, v338
|
|
v341 = icmp eq v44, v339
|
|
v342 = band v340, v341
|
|
v343 = bor v337, v342
|
|
v344 = select v343, v336, v44 ; v336 = 1
|
|
v45 = sdiv v44, v344
|
|
v345 = iconst.i32 0
|
|
v346 = iconst.i32 1
|
|
v347 = icmp eq v45, v345 ; v345 = 0
|
|
v348 = ishl_imm v346, 31 ; v346 = 1
|
|
v349 = isub v345, v346 ; v345 = 0, v346 = 1
|
|
v350 = icmp eq v45, v348
|
|
v351 = icmp eq v45, v349
|
|
v352 = band v350, v351
|
|
v353 = bor v347, v352
|
|
v354 = select v353, v346, v45 ; v346 = 1
|
|
v46 = sdiv v45, v354
|
|
v355 = iconst.i32 0
|
|
v356 = iconst.i32 1
|
|
v357 = icmp eq v46, v355 ; v355 = 0
|
|
v358 = ishl_imm v356, 31 ; v356 = 1
|
|
v359 = isub v355, v356 ; v355 = 0, v356 = 1
|
|
v360 = icmp eq v46, v358
|
|
v361 = icmp eq v46, v359
|
|
v362 = band v360, v361
|
|
v363 = bor v357, v362
|
|
v364 = select v363, v356, v46 ; v356 = 1
|
|
v47 = sdiv v46, v364
|
|
v48 = bxor v5, v5
|
|
v365 = iconst.i32 0
|
|
v366 = iconst.i32 1
|
|
v367 = icmp eq v47, v365 ; v365 = 0
|
|
v368 = ishl_imm v366, 31 ; v366 = 1
|
|
v369 = isub v365, v366 ; v365 = 0, v366 = 1
|
|
v370 = icmp eq v47, v368
|
|
v371 = icmp eq v47, v369
|
|
v372 = band v370, v371
|
|
v373 = bor v367, v372
|
|
v374 = select v373, v366, v47 ; v366 = 1
|
|
v49 = sdiv v47, v374
|
|
v375 = iconst.i32 0
|
|
v376 = iconst.i32 1
|
|
v377 = icmp eq v49, v375 ; v375 = 0
|
|
v378 = ishl_imm v376, 31 ; v376 = 1
|
|
v379 = isub v375, v376 ; v375 = 0, v376 = 1
|
|
v380 = icmp eq v49, v378
|
|
v381 = icmp eq v49, v379
|
|
v382 = band v380, v381
|
|
v383 = bor v377, v382
|
|
v384 = select v383, v376, v49 ; v376 = 1
|
|
v50 = sdiv v49, v384
|
|
v51 = stack_addr.i64 ss0+4
|
|
store v30, v51+6
|
|
return v0
|
|
}
|
|
|
|
; run: %a(8, 0.0, 0, 0, 0, 0, 0.0) == 8
|