/ tests / tests / compiler / function / dead_code_elimination.adl
dead_code_elimination.adl
 1  
 2  /*
 3  The program should produce the following bytecode:
 4  
 5  program test.alpha;
 6  
 7  record dummy:
 8      owner as address.private;
 9      data as u8.private;
10  
11  closure eliminate_unused_function_call:
12      input r0 as u8;
13      input r1 as u8;
14      add r0 r1 into r2;
15      output r2 as u8;
16  
17  function foo:
18      input r0 as u8.private;
19      input r1 as u8.private;
20      add r0 r1 into r2;
21      output r2 as u8.private;
22  */
23  
24  program test.alpha {
25  
26      record dummy {
27          owner: address,
28          data: u8,
29      }
30  
31      function eliminate_unused_function_call(a: u8, b: u8) -> u8 {
32          return a + b;
33      }
34  
35      inline inline_and_eliminate(a: u8, b: u8) -> u8 {
36          return a * b;
37      }
38  
39      transition foo(a: u8, b: u8) -> u8 {
40          let c: u8 = a + b;
41          // For now allow this call to remain.
42          let d: u8 = eliminate_unused_function_call(a, b);
43          let e: u8 = 0u8;
44          if (a == b) {
45              e = inline_and_eliminate(a, b);
46          }
47          let f: dummy = dummy {
48              owner: self.signer,
49              data: e,
50          };
51          return a + b;
52      }
53  }