1;;! target = "x86_64" 2;;! flags = "-W function-references,gc -C collector=drc" 3;;! test = "optimize" 4 5(module 6 (type $ty (struct (field (mut f32)) 7 (field (mut i8)) 8 (field (mut anyref)))) 9 10 (func (param (ref null $ty) f32) 11 (struct.set $ty 0 (local.get 0) (local.get 1)) 12 ) 13 14 (func (param (ref null $ty) i32) 15 (struct.set $ty 1 (local.get 0) (local.get 1)) 16 ) 17 18 (func (param (ref null $ty) anyref) 19 (struct.set $ty 2 (local.get 0) (local.get 1)) 20 ) 21) 22;; function u0:0(i64 vmctx, i64, i32, f32) tail { 23;; gv0 = vmctx 24;; gv1 = load.i64 notrap aligned readonly gv0+8 25;; gv2 = load.i64 notrap aligned gv1+24 26;; gv3 = vmctx 27;; gv4 = load.i64 notrap aligned readonly can_move gv3+8 28;; gv5 = load.i64 notrap aligned readonly can_move gv4+32 29;; gv6 = load.i64 notrap aligned gv4+40 30;; stack_limit = gv2 31;; 32;; block0(v0: i64, v1: i64, v2: i32, v3: f32): 33;; @0034 trapz v2, user15 34;; @0034 v9 = load.i64 notrap aligned readonly can_move v0+8 35;; @0034 v5 = load.i64 notrap aligned readonly can_move v9+32 36;; @0034 v4 = uextend.i64 v2 37;; @0034 v6 = iadd v5, v4 38;; @0034 v7 = iconst.i64 24 39;; @0034 v8 = iadd v6, v7 ; v7 = 24 40;; @0034 store notrap aligned little v3, v8 41;; @0038 jump block1 42;; 43;; block1: 44;; @0038 return 45;; } 46;; 47;; function u0:1(i64 vmctx, i64, i32, i32) tail { 48;; gv0 = vmctx 49;; gv1 = load.i64 notrap aligned readonly gv0+8 50;; gv2 = load.i64 notrap aligned gv1+24 51;; gv3 = vmctx 52;; gv4 = load.i64 notrap aligned readonly can_move gv3+8 53;; gv5 = load.i64 notrap aligned readonly can_move gv4+32 54;; gv6 = load.i64 notrap aligned gv4+40 55;; stack_limit = gv2 56;; 57;; block0(v0: i64, v1: i64, v2: i32, v3: i32): 58;; @003f trapz v2, user15 59;; @003f v9 = load.i64 notrap aligned readonly can_move v0+8 60;; @003f v5 = load.i64 notrap aligned readonly can_move v9+32 61;; @003f v4 = uextend.i64 v2 62;; @003f v6 = iadd v5, v4 63;; @003f v7 = iconst.i64 28 64;; @003f v8 = iadd v6, v7 ; v7 = 28 65;; @003f istore8 notrap aligned little v3, v8 66;; @0043 jump block1 67;; 68;; block1: 69;; @0043 return 70;; } 71;; 72;; function u0:2(i64 vmctx, i64, i32, i32) tail { 73;; gv0 = vmctx 74;; gv1 = load.i64 notrap aligned readonly gv0+8 75;; gv2 = load.i64 notrap aligned gv1+24 76;; gv3 = vmctx 77;; gv4 = load.i64 notrap aligned readonly can_move gv3+8 78;; gv5 = load.i64 notrap aligned readonly can_move gv4+32 79;; gv6 = load.i64 notrap aligned gv4+40 80;; sig0 = (i64 vmctx, i32) tail 81;; fn0 = colocated u805306368:25 sig0 82;; stack_limit = gv2 83;; 84;; block0(v0: i64, v1: i64, v2: i32, v3: i32): 85;; @004a trapz v2, user15 86;; @004a v59 = load.i64 notrap aligned readonly can_move v0+8 87;; @004a v5 = load.i64 notrap aligned readonly can_move v59+32 88;; @004a v4 = uextend.i64 v2 89;; @004a v6 = iadd v5, v4 90;; @004a v7 = iconst.i64 32 91;; @004a v8 = iadd v6, v7 ; v7 = 32 92;; @004a v9 = load.i32 notrap aligned little v8 93;; v58 = iconst.i32 1 94;; @004a v10 = band v3, v58 ; v58 = 1 95;; v57 = iconst.i32 0 96;; @004a v11 = icmp eq v3, v57 ; v57 = 0 97;; @004a v12 = uextend.i32 v11 98;; @004a v13 = bor v10, v12 99;; @004a brif v13, block3, block2 100;; 101;; block2: 102;; @004a v14 = uextend.i64 v3 103;; @004a v16 = iadd.i64 v5, v14 104;; @004a v33 = iconst.i64 8 105;; @004a v18 = iadd v16, v33 ; v33 = 8 106;; @004a v19 = load.i64 notrap aligned v18 107;; v69 = iconst.i64 1 108;; @004a v20 = iadd v19, v69 ; v69 = 1 109;; @004a store notrap aligned v20, v18 110;; @004a jump block3 111;; 112;; block3: 113;; v74 = iadd.i64 v6, v7 ; v7 = 32 114;; @004a store.i32 notrap aligned little v3, v74 115;; v75 = iconst.i32 1 116;; v76 = band.i32 v9, v75 ; v75 = 1 117;; v77 = iconst.i32 0 118;; v78 = icmp.i32 eq v9, v77 ; v77 = 0 119;; @004a v28 = uextend.i32 v78 120;; @004a v29 = bor v76, v28 121;; @004a brif v29, block7, block4 122;; 123;; block4: 124;; @004a v30 = uextend.i64 v9 125;; @004a v32 = iadd.i64 v5, v30 126;; v79 = iconst.i64 8 127;; @004a v34 = iadd v32, v79 ; v79 = 8 128;; @004a v35 = load.i64 notrap aligned v34 129;; v80 = iconst.i64 1 130;; v72 = icmp eq v35, v80 ; v80 = 1 131;; @004a brif v72, block5, block6 132;; 133;; block5 cold: 134;; @004a call fn0(v0, v9) 135;; @004a jump block7 136;; 137;; block6: 138;; v47 = iconst.i64 -1 139;; @004a v36 = iadd.i64 v35, v47 ; v47 = -1 140;; v81 = iadd.i64 v32, v79 ; v79 = 8 141;; @004a store notrap aligned v36, v81 142;; @004a jump block7 143;; 144;; block7: 145;; @004e jump block1 146;; 147;; block1: 148;; @004e return 149;; } 150