|
| 1 | +;;! target = "x86_64" |
| 2 | + |
| 3 | +(module |
| 4 | + ;; These two types should be deduped to the same `ir::Signature` in the |
| 5 | + ;; translated CLIF. |
| 6 | + (type (func (result i32))) |
| 7 | + (type (func (result i32))) |
| 8 | + |
| 9 | + (import "" "" (table 0 funcref)) |
| 10 | + |
| 11 | + (func (param i32) (result i32 i32) |
| 12 | + local.get 0 |
| 13 | + call_indirect (type 0) |
| 14 | + local.get 0 |
| 15 | + call_indirect (type 1) |
| 16 | + ) |
| 17 | +) |
| 18 | + |
| 19 | +;; function u0:0(i64 vmctx, i64, i32) -> i32, i32 tail { |
| 20 | +;; gv0 = vmctx |
| 21 | +;; gv1 = load.i64 notrap aligned readonly gv0+8 |
| 22 | +;; gv2 = load.i64 notrap aligned gv1+16 |
| 23 | +;; gv3 = vmctx |
| 24 | +;; gv4 = load.i64 notrap aligned readonly can_move gv3+48 |
| 25 | +;; gv5 = load.i64 notrap aligned gv4 |
| 26 | +;; gv6 = load.i64 notrap aligned gv4+8 |
| 27 | +;; sig0 = (i64 vmctx, i64) -> i32 tail |
| 28 | +;; sig1 = (i64 vmctx, i32, i64) -> i64 tail |
| 29 | +;; fn0 = colocated u1:9 sig1 |
| 30 | +;; stack_limit = gv2 |
| 31 | +;; |
| 32 | +;; block0(v0: i64, v1: i64, v2: i32): |
| 33 | +;; @002d v64 = load.i64 notrap aligned readonly can_move v0+48 |
| 34 | +;; @002d v5 = load.i64 notrap aligned v64+8 |
| 35 | +;; @002d v6 = ireduce.i32 v5 |
| 36 | +;; @002d v7 = icmp uge v2, v6 |
| 37 | +;; @002d v8 = uextend.i64 v2 |
| 38 | +;; @002d v62 = load.i64 notrap aligned readonly can_move v0+48 |
| 39 | +;; @002d v9 = load.i64 notrap aligned v62 |
| 40 | +;; v61 = iconst.i64 3 |
| 41 | +;; @002d v10 = ishl v8, v61 ; v61 = 3 |
| 42 | +;; @002d v11 = iadd v9, v10 |
| 43 | +;; @002d v12 = iconst.i64 0 |
| 44 | +;; @002d v13 = select_spectre_guard v7, v12, v11 ; v12 = 0 |
| 45 | +;; @002d v14 = load.i64 user5 aligned table v13 |
| 46 | +;; v60 = iconst.i64 -2 |
| 47 | +;; @002d v15 = band v14, v60 ; v60 = -2 |
| 48 | +;; @002d brif v14, block3(v15), block2 |
| 49 | +;; |
| 50 | +;; block2 cold: |
| 51 | +;; @002d v17 = iconst.i32 0 |
| 52 | +;; @002d v19 = uextend.i64 v2 |
| 53 | +;; @002d v20 = call fn0(v0, v17, v19) ; v17 = 0 |
| 54 | +;; @002d jump block3(v20) |
| 55 | +;; |
| 56 | +;; block3(v16: i64): |
| 57 | +;; @002d v22 = load.i64 notrap aligned readonly can_move v0+40 |
| 58 | +;; @002d v23 = load.i32 notrap aligned readonly can_move v22 |
| 59 | +;; @002d v24 = load.i32 user6 aligned readonly v16+16 |
| 60 | +;; @002d v25 = icmp eq v24, v23 |
| 61 | +;; @002d trapz v25, user7 |
| 62 | +;; @002d v26 = load.i64 notrap aligned readonly v16+8 |
| 63 | +;; @002d v27 = load.i64 notrap aligned readonly v16+24 |
| 64 | +;; @002d v28 = call_indirect sig0, v26(v27, v0) |
| 65 | +;; @0032 v58 = load.i64 notrap aligned readonly can_move v0+48 |
| 66 | +;; @0032 v30 = load.i64 notrap aligned v58+8 |
| 67 | +;; @0032 v31 = ireduce.i32 v30 |
| 68 | +;; @0032 v32 = icmp.i32 uge v2, v31 |
| 69 | +;; @0032 v33 = uextend.i64 v2 |
| 70 | +;; @0032 v56 = load.i64 notrap aligned readonly can_move v0+48 |
| 71 | +;; @0032 v34 = load.i64 notrap aligned v56 |
| 72 | +;; v55 = iconst.i64 3 |
| 73 | +;; @0032 v35 = ishl v33, v55 ; v55 = 3 |
| 74 | +;; @0032 v36 = iadd v34, v35 |
| 75 | +;; @0032 v37 = iconst.i64 0 |
| 76 | +;; @0032 v38 = select_spectre_guard v32, v37, v36 ; v37 = 0 |
| 77 | +;; @0032 v39 = load.i64 user5 aligned table v38 |
| 78 | +;; v54 = iconst.i64 -2 |
| 79 | +;; @0032 v40 = band v39, v54 ; v54 = -2 |
| 80 | +;; @0032 brif v39, block5(v40), block4 |
| 81 | +;; |
| 82 | +;; block4 cold: |
| 83 | +;; @0032 v42 = iconst.i32 0 |
| 84 | +;; @0032 v44 = uextend.i64 v2 |
| 85 | +;; @0032 v45 = call fn0(v0, v42, v44) ; v42 = 0 |
| 86 | +;; @0032 jump block5(v45) |
| 87 | +;; |
| 88 | +;; block5(v41: i64): |
| 89 | +;; @0032 v47 = load.i64 notrap aligned readonly can_move v0+40 |
| 90 | +;; @0032 v48 = load.i32 notrap aligned readonly can_move v47 |
| 91 | +;; @0032 v49 = load.i32 user6 aligned readonly v41+16 |
| 92 | +;; @0032 v50 = icmp eq v49, v48 |
| 93 | +;; @0032 trapz v50, user7 |
| 94 | +;; @0032 v51 = load.i64 notrap aligned readonly v41+8 |
| 95 | +;; @0032 v52 = load.i64 notrap aligned readonly v41+24 |
| 96 | +;; @0032 v53 = call_indirect sig0, v51(v52, v0) |
| 97 | +;; @0035 jump block1 |
| 98 | +;; |
| 99 | +;; block1: |
| 100 | +;; @0035 return v28, v53 |
| 101 | +;; } |
0 commit comments