summaryrefslogtreecommitdiff
path: root/test/binaryen.js/optimize-levels.js
blob: b3ae66a431ff487845c6a99e55c2e4b9ee3f76b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
function assert(x) {
  if (!x) throw 'error!';
}

var wast = `
(module
 (type $i (func (param i32) (result i32)))
 (memory $0 0)
 (export "test" (func $test))
 (func $test (; 0 ;) (type $i) (param $0 i32) (result i32)
  (block (result i32)
   (if (result i32)
    (local.get $0)
    (local.get $0)
    (i32.const 0)
   )
  )
 )
)
`;

function test() {
  console.log("=== input wast ===" + wast);

  function printOptions() {
    console.log("optimizeLevel=" + Binaryen.getOptimizeLevel());
    console.log("shrinkLevel=" + Binaryen.getShrinkLevel());
  }

  // Use defaults (should be equal to -Os below)
  var module = Binaryen.parseText(wast);

  console.log("=== unoptimized ===");
  assert(module.validate());
  console.log(module.emitText());

  module.optimize();
  console.log("=== optimized using defaults ===");
  printOptions();
  assert(module.validate());
  console.log(module.emitText());
  module.dispose();

  // Use -O0 (should remove the block)
  module = Binaryen.parseText(wast);

  Binaryen.setOptimizeLevel(0);
  Binaryen.setShrinkLevel(0);
  module.optimize();
  console.log("=== optimized with -O0 ===");
  printOptions();
  assert(module.validate());
  console.log(module.emitText());
  module.dispose();

  // Use -Os (should remove the block and convert to a select)
  module = Binaryen.parseText(wast);

  Binaryen.setOptimizeLevel(2);
  Binaryen.setShrinkLevel(1);
  module.optimize();
  console.log("=== optimized with -Os ===");
  printOptions();
  assert(module.validate());
  console.log(module.emitText());
  module.dispose();
}

Binaryen.ready.then(test);