teavm-bugs.js (1218B)
1 // Register allocation issue with LCompareI64AndBranch. 2 let params = ''; 3 let locals = ''; 4 let tests = '(i64.const 0)'; 5 6 for (let i = 15; i --> 0;) { 7 params += `\n(param i64)`; 8 locals += `\n(local i64)`; 9 tests = ` 10 (if (result i64) 11 (i64.eq 12 (local.get ${i + 8}) 13 (local.get ${i}) 14 ) 15 (then (local.get ${i + 8})) 16 (else ${tests}) 17 )`; 18 } 19 20 let code = `(module 21 (func $i64 22 ${params} (result i64) ${locals} 23 ${tests} 24 ) 25 )` 26 27 wasmEvalText(code); 28 29 // Bounds check elimination. 30 assertEq(wasmEvalText(`(module 31 (memory 1) 32 (func (param $p i32) (result i32) (local $l i32) 33 (local.set $l (i32.const 0)) 34 (if 35 (local.get $p) 36 (then (local.set $l 37 (i32.add 38 (local.get $l) 39 (i32.load8_s (local.get $p)) 40 ) 41 )) 42 ) 43 (local.set $l 44 (i32.add 45 (local.get $l) 46 (i32.load8_s (local.get $p)) 47 ) 48 ) 49 (local.get $l) 50 ) 51 (data (i32.const 0) "\\00\\01\\02\\03\\04\\05\\06\\07\\08\\09\\0a\\0b\\0c\\0d\\0e\\0f") 52 (export "test" (func 0)) 53 )`).exports["test"](3), 6);