1;;! target = "x86_64" 2;;! test = "optimize" 3;;! flags = "-O opt-level=0" 4 5;; Test basic code generation for table WebAssembly instructions. 6;; Use optimization but with `opt-level=0` to legalize away table_addr instructions. 7 8(module 9 (table (export "table") 1 externref) 10 (func (export "table.get.const") (result externref) 11 i32.const 0 12 table.get 0) 13 (func (export "table.get.var") (param i32) (result externref) 14 local.get 0 15 table.get 0)) 16 17;; function u0:0(i64 vmctx, i64) -> i32 tail { 18;; gv0 = vmctx 19;; gv1 = load.i64 notrap aligned readonly gv0+8 20;; gv2 = load.i64 notrap aligned gv1+24 21;; gv3 = vmctx 22;; gv4 = load.i64 notrap aligned gv3+48 23;; gv5 = load.i64 notrap aligned gv3+56 24;; gv6 = load.i64 notrap aligned readonly can_move gv3+8 25;; gv7 = load.i64 notrap aligned readonly can_move gv6+32 26;; gv8 = load.i64 notrap aligned gv6+40 27;; stack_limit = gv2 28;; 29;; block0(v0: i64, v1: i64): 30;; @0051 v3 = iconst.i32 0 31;; @0053 v4 = load.i64 notrap aligned v0+56 32;; @0053 v5 = ireduce.i32 v4 33;; @0053 v6 = icmp uge v3, v5 ; v3 = 0 34;; @0053 v7 = uextend.i64 v3 ; v3 = 0 35;; @0053 v8 = load.i64 notrap aligned v0+48 36;; v62 = iconst.i64 2 37;; @0053 v9 = ishl v7, v62 ; v62 = 2 38;; @0053 v10 = iadd v8, v9 39;; @0053 v11 = iconst.i64 0 40;; @0053 v12 = select_spectre_guard v6, v11, v10 ; v11 = 0 41;; @0053 v13 = load.i32 user5 aligned table v12 42;; v61 = iconst.i32 1 43;; @0053 v14 = band v13, v61 ; v61 = 1 44;; v60 = iconst.i32 0 45;; @0053 v15 = icmp eq v13, v60 ; v60 = 0 46;; @0053 v16 = uextend.i32 v15 47;; @0053 v17 = bor v14, v16 48;; @0053 brif v17, block4, block2 49;; 50;; block2: 51;; @0053 v18 = uextend.i64 v13 52;; @0053 v58 = load.i64 notrap aligned readonly can_move v0+8 53;; @0053 v19 = load.i64 notrap aligned readonly can_move v58+32 54;; @0053 v20 = iadd v19, v18 55;; @0053 v21 = load.i32 notrap aligned v20 56;; @0053 v22 = iconst.i32 2 57;; @0053 v23 = band v21, v22 ; v22 = 2 58;; @0053 brif v23, block4, block3 59;; 60;; block3: 61;; @0053 v25 = load.i64 notrap aligned readonly v0+32 62;; @0053 v26 = load.i32 notrap aligned v25 63;; @0053 v27 = uextend.i64 v13 64;; @0053 v56 = load.i64 notrap aligned readonly can_move v0+8 65;; @0053 v28 = load.i64 notrap aligned readonly can_move v56+32 66;; @0053 v29 = iadd v28, v27 67;; @0053 v30 = iconst.i64 16 68;; @0053 v31 = iadd v29, v30 ; v30 = 16 69;; @0053 store notrap aligned v26, v31 70;; @0053 v32 = iconst.i32 2 71;; @0053 v33 = bor.i32 v21, v32 ; v32 = 2 72;; @0053 v34 = uextend.i64 v13 73;; @0053 v54 = load.i64 notrap aligned readonly can_move v0+8 74;; @0053 v35 = load.i64 notrap aligned readonly can_move v54+32 75;; @0053 v36 = iadd v35, v34 76;; @0053 store notrap aligned v33, v36 77;; @0053 v37 = uextend.i64 v13 78;; @0053 v52 = load.i64 notrap aligned readonly can_move v0+8 79;; @0053 v38 = load.i64 notrap aligned readonly can_move v52+32 80;; @0053 v39 = iadd v38, v37 81;; @0053 v40 = iconst.i64 8 82;; @0053 v41 = iadd v39, v40 ; v40 = 8 83;; @0053 v42 = load.i64 notrap aligned v41 84;; v51 = iconst.i64 1 85;; @0053 v43 = iadd v42, v51 ; v51 = 1 86;; @0053 v44 = uextend.i64 v13 87;; @0053 v49 = load.i64 notrap aligned readonly can_move v0+8 88;; @0053 v45 = load.i64 notrap aligned readonly can_move v49+32 89;; @0053 v46 = iadd v45, v44 90;; @0053 v47 = iconst.i64 8 91;; @0053 v48 = iadd v46, v47 ; v47 = 8 92;; @0053 store notrap aligned v43, v48 93;; @0053 store.i32 notrap aligned v13, v25 94;; @0053 jump block4 95;; 96;; block4: 97;; @0055 jump block1 98;; 99;; block1: 100;; @0055 return v13 101;; } 102;; 103;; function u0:1(i64 vmctx, i64, i32) -> i32 tail { 104;; gv0 = vmctx 105;; gv1 = load.i64 notrap aligned readonly gv0+8 106;; gv2 = load.i64 notrap aligned gv1+24 107;; gv3 = vmctx 108;; gv4 = load.i64 notrap aligned gv3+48 109;; gv5 = load.i64 notrap aligned gv3+56 110;; gv6 = load.i64 notrap aligned readonly can_move gv3+8 111;; gv7 = load.i64 notrap aligned readonly can_move gv6+32 112;; gv8 = load.i64 notrap aligned gv6+40 113;; stack_limit = gv2 114;; 115;; block0(v0: i64, v1: i64, v2: i32): 116;; @005a v4 = load.i64 notrap aligned v0+56 117;; @005a v5 = ireduce.i32 v4 118;; @005a v6 = icmp uge v2, v5 119;; @005a v7 = uextend.i64 v2 120;; @005a v8 = load.i64 notrap aligned v0+48 121;; v62 = iconst.i64 2 122;; @005a v9 = ishl v7, v62 ; v62 = 2 123;; @005a v10 = iadd v8, v9 124;; @005a v11 = iconst.i64 0 125;; @005a v12 = select_spectre_guard v6, v11, v10 ; v11 = 0 126;; @005a v13 = load.i32 user5 aligned table v12 127;; v61 = iconst.i32 1 128;; @005a v14 = band v13, v61 ; v61 = 1 129;; v60 = iconst.i32 0 130;; @005a v15 = icmp eq v13, v60 ; v60 = 0 131;; @005a v16 = uextend.i32 v15 132;; @005a v17 = bor v14, v16 133;; @005a brif v17, block4, block2 134;; 135;; block2: 136;; @005a v18 = uextend.i64 v13 137;; @005a v58 = load.i64 notrap aligned readonly can_move v0+8 138;; @005a v19 = load.i64 notrap aligned readonly can_move v58+32 139;; @005a v20 = iadd v19, v18 140;; @005a v21 = load.i32 notrap aligned v20 141;; @005a v22 = iconst.i32 2 142;; @005a v23 = band v21, v22 ; v22 = 2 143;; @005a brif v23, block4, block3 144;; 145;; block3: 146;; @005a v25 = load.i64 notrap aligned readonly v0+32 147;; @005a v26 = load.i32 notrap aligned v25 148;; @005a v27 = uextend.i64 v13 149;; @005a v56 = load.i64 notrap aligned readonly can_move v0+8 150;; @005a v28 = load.i64 notrap aligned readonly can_move v56+32 151;; @005a v29 = iadd v28, v27 152;; @005a v30 = iconst.i64 16 153;; @005a v31 = iadd v29, v30 ; v30 = 16 154;; @005a store notrap aligned v26, v31 155;; @005a v32 = iconst.i32 2 156;; @005a v33 = bor.i32 v21, v32 ; v32 = 2 157;; @005a v34 = uextend.i64 v13 158;; @005a v54 = load.i64 notrap aligned readonly can_move v0+8 159;; @005a v35 = load.i64 notrap aligned readonly can_move v54+32 160;; @005a v36 = iadd v35, v34 161;; @005a store notrap aligned v33, v36 162;; @005a v37 = uextend.i64 v13 163;; @005a v52 = load.i64 notrap aligned readonly can_move v0+8 164;; @005a v38 = load.i64 notrap aligned readonly can_move v52+32 165;; @005a v39 = iadd v38, v37 166;; @005a v40 = iconst.i64 8 167;; @005a v41 = iadd v39, v40 ; v40 = 8 168;; @005a v42 = load.i64 notrap aligned v41 169;; v51 = iconst.i64 1 170;; @005a v43 = iadd v42, v51 ; v51 = 1 171;; @005a v44 = uextend.i64 v13 172;; @005a v49 = load.i64 notrap aligned readonly can_move v0+8 173;; @005a v45 = load.i64 notrap aligned readonly can_move v49+32 174;; @005a v46 = iadd v45, v44 175;; @005a v47 = iconst.i64 8 176;; @005a v48 = iadd v46, v47 ; v47 = 8 177;; @005a store notrap aligned v43, v48 178;; @005a store.i32 notrap aligned v13, v25 179;; @005a jump block4 180;; 181;; block4: 182;; @005c jump block1 183;; 184;; block1: 185;; @005c return v13 186;; } 187