|
| 1 | +;;! target = "x86_64" |
| 2 | +;;! flags = "-W function-references,gc -C collector=drc" |
| 3 | +;;! test = "optimize" |
| 4 | + |
| 5 | +(module |
| 6 | + (type $ty (array (mut anyref))) |
| 7 | + |
| 8 | + (func (param anyref anyref anyref) (result (ref $ty)) |
| 9 | + (array.new_fixed $ty 3 (local.get 0) (local.get 1) (local.get 2)) |
| 10 | + ) |
| 11 | +) |
| 12 | +;; function u0:0(i64 vmctx, i64, i32, i32, i32) -> i32 tail { |
| 13 | +;; ss0 = explicit_slot 4, align = 4 |
| 14 | +;; ss1 = explicit_slot 4, align = 4 |
| 15 | +;; ss2 = explicit_slot 4, align = 4 |
| 16 | +;; gv0 = vmctx |
| 17 | +;; gv1 = load.i64 notrap aligned readonly gv0+8 |
| 18 | +;; gv2 = load.i64 notrap aligned gv1+16 |
| 19 | +;; gv3 = vmctx |
| 20 | +;; sig0 = (i64 vmctx, i32, i32, i32, i32) -> i64 tail |
| 21 | +;; fn0 = colocated u1:27 sig0 |
| 22 | +;; stack_limit = gv2 |
| 23 | +;; |
| 24 | +;; block0(v0: i64, v1: i64, v2: i32, v3: i32, v4: i32): |
| 25 | +;; v131 = stack_addr.i64 ss2 |
| 26 | +;; store notrap v2, v131 |
| 27 | +;; v132 = stack_addr.i64 ss1 |
| 28 | +;; store notrap v3, v132 |
| 29 | +;; v133 = stack_addr.i64 ss0 |
| 30 | +;; store notrap v4, v133 |
| 31 | +;; v171 = iconst.i64 0 |
| 32 | +;; @0025 trapnz v171, user18 ; v171 = 0 |
| 33 | +;; @0025 v7 = iconst.i32 28 |
| 34 | +;; v172 = iconst.i32 12 |
| 35 | +;; @0025 v12 = uadd_overflow_trap v7, v172, user18 ; v7 = 28, v172 = 12 |
| 36 | +;; v173 = iconst.i32 -1476395005 |
| 37 | +;; @0025 v16 = iconst.i32 0 |
| 38 | +;; @0025 v17 = iconst.i32 8 |
| 39 | +;; @0025 v18 = call fn0(v0, v173, v16, v12, v17), stack_map=[i32 @ ss2+0, i32 @ ss1+0, i32 @ ss0+0] ; v173 = -1476395005, v16 = 0, v17 = 8 |
| 40 | +;; @0025 v6 = iconst.i32 3 |
| 41 | +;; @0025 v21 = load.i64 notrap aligned readonly can_move v0+40 |
| 42 | +;; @0025 v19 = ireduce.i32 v18 |
| 43 | +;; @0025 v22 = uextend.i64 v19 |
| 44 | +;; @0025 v23 = iadd v21, v22 |
| 45 | +;; v136 = iconst.i64 24 |
| 46 | +;; @0025 v24 = iadd v23, v136 ; v136 = 24 |
| 47 | +;; @0025 store notrap aligned v6, v24 ; v6 = 3 |
| 48 | +;; v130 = load.i32 notrap v131 |
| 49 | +;; v138 = iconst.i32 1 |
| 50 | +;; @0025 v29 = band v130, v138 ; v138 = 1 |
| 51 | +;; @0025 v30 = icmp eq v130, v16 ; v16 = 0 |
| 52 | +;; @0025 v31 = uextend.i32 v30 |
| 53 | +;; @0025 v32 = bor v29, v31 |
| 54 | +;; @0025 brif v32, block3, block2 |
| 55 | +;; |
| 56 | +;; block2: |
| 57 | +;; @0025 v37 = uextend.i64 v130 |
| 58 | +;; @0025 v96 = iconst.i64 8 |
| 59 | +;; @0025 v39 = uadd_overflow_trap v37, v96, user1 ; v96 = 8 |
| 60 | +;; @0025 v41 = uadd_overflow_trap v39, v96, user1 ; v96 = 8 |
| 61 | +;; @0025 v94 = load.i64 notrap aligned readonly can_move v0+48 |
| 62 | +;; @0025 v42 = icmp ule v41, v94 |
| 63 | +;; @0025 trapz v42, user1 |
| 64 | +;; @0025 v43 = iadd.i64 v21, v39 |
| 65 | +;; @0025 v44 = load.i64 notrap aligned v43 |
| 66 | +;; v158 = iconst.i64 1 |
| 67 | +;; @0025 v45 = iadd v44, v158 ; v158 = 1 |
| 68 | +;; @0025 store notrap aligned v45, v43 |
| 69 | +;; @0025 jump block3 |
| 70 | +;; |
| 71 | +;; block3: |
| 72 | +;; v126 = load.i32 notrap v131 |
| 73 | +;; v181 = iconst.i64 28 |
| 74 | +;; v187 = iadd.i64 v23, v181 ; v181 = 28 |
| 75 | +;; @0025 store notrap aligned little v126, v187 |
| 76 | +;; v125 = load.i32 notrap v132 |
| 77 | +;; v211 = iconst.i32 1 |
| 78 | +;; v212 = band v125, v211 ; v211 = 1 |
| 79 | +;; v213 = iconst.i32 0 |
| 80 | +;; v214 = icmp eq v125, v213 ; v213 = 0 |
| 81 | +;; @0025 v60 = uextend.i32 v214 |
| 82 | +;; @0025 v61 = bor v212, v60 |
| 83 | +;; @0025 brif v61, block5, block4 |
| 84 | +;; |
| 85 | +;; block4: |
| 86 | +;; @0025 v66 = uextend.i64 v125 |
| 87 | +;; v215 = iconst.i64 8 |
| 88 | +;; @0025 v68 = uadd_overflow_trap v66, v215, user1 ; v215 = 8 |
| 89 | +;; @0025 v70 = uadd_overflow_trap v68, v215, user1 ; v215 = 8 |
| 90 | +;; v216 = load.i64 notrap aligned readonly can_move v0+48 |
| 91 | +;; @0025 v71 = icmp ule v70, v216 |
| 92 | +;; @0025 trapz v71, user1 |
| 93 | +;; @0025 v72 = iadd.i64 v21, v68 |
| 94 | +;; @0025 v73 = load.i64 notrap aligned v72 |
| 95 | +;; v217 = iconst.i64 1 |
| 96 | +;; @0025 v74 = iadd v73, v217 ; v217 = 1 |
| 97 | +;; @0025 store notrap aligned v74, v72 |
| 98 | +;; @0025 jump block5 |
| 99 | +;; |
| 100 | +;; block5: |
| 101 | +;; v121 = load.i32 notrap v132 |
| 102 | +;; v135 = iconst.i64 32 |
| 103 | +;; v194 = iadd.i64 v23, v135 ; v135 = 32 |
| 104 | +;; @0025 store notrap aligned little v121, v194 |
| 105 | +;; v120 = load.i32 notrap v133 |
| 106 | +;; v218 = iconst.i32 1 |
| 107 | +;; v219 = band v120, v218 ; v218 = 1 |
| 108 | +;; v220 = iconst.i32 0 |
| 109 | +;; v221 = icmp eq v120, v220 ; v220 = 0 |
| 110 | +;; @0025 v89 = uextend.i32 v221 |
| 111 | +;; @0025 v90 = bor v219, v89 |
| 112 | +;; @0025 brif v90, block7, block6 |
| 113 | +;; |
| 114 | +;; block6: |
| 115 | +;; @0025 v95 = uextend.i64 v120 |
| 116 | +;; v222 = iconst.i64 8 |
| 117 | +;; @0025 v97 = uadd_overflow_trap v95, v222, user1 ; v222 = 8 |
| 118 | +;; @0025 v99 = uadd_overflow_trap v97, v222, user1 ; v222 = 8 |
| 119 | +;; v223 = load.i64 notrap aligned readonly can_move v0+48 |
| 120 | +;; @0025 v100 = icmp ule v99, v223 |
| 121 | +;; @0025 trapz v100, user1 |
| 122 | +;; @0025 v101 = iadd.i64 v21, v97 |
| 123 | +;; @0025 v102 = load.i64 notrap aligned v101 |
| 124 | +;; v224 = iconst.i64 1 |
| 125 | +;; @0025 v103 = iadd v102, v224 ; v224 = 1 |
| 126 | +;; @0025 store notrap aligned v103, v101 |
| 127 | +;; @0025 jump block7 |
| 128 | +;; |
| 129 | +;; block7: |
| 130 | +;; v116 = load.i32 notrap v133 |
| 131 | +;; v196 = iconst.i64 36 |
| 132 | +;; v202 = iadd.i64 v23, v196 ; v196 = 36 |
| 133 | +;; @0025 store notrap aligned little v116, v202 |
| 134 | +;; @0029 jump block1 |
| 135 | +;; |
| 136 | +;; block1: |
| 137 | +;; @0029 return v19 |
| 138 | +;; } |
0 commit comments