| 
    
     | 
    
    
  | 
  |||||||||||
| 
     | 
    
     | 
    
     | 
  |||||||||||
    
 
  | 
    
     | 
    
     
 Strengthening Supercompilation For Call-By-Value Languages Peter A. Jonsson and Johan Nordlander, 
       
 
 A termination preserving supercompiler for a call-by-value language sometimes fails to remove intermediate structures that a supercompiler for a call-by-name language would remove. This discrepancy in power stems from the fact that many function bodies are either non-linear in use of an important variable or often start with a pattern match on their first argument and are therefore not strict in all their arguments. As a consequence, intermediate structures are left in the output program, making it slower. We present a revised supercompilation algorithm for a call-by-value language that propagates let-bindings into case-branches and uses termination analysis to remove dead code. This allows the algorithm to remove all intermediate structures for common examples where previous algorithms for call-by-value languages had to leave the intermediate structures in place. 
  |