bufanliu / apparat

Automatically exported from code.google.com/p/apparat
0 stars 0 forks source link

Inlining produces unnecessary local variables and assignments #61

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Calling an Inlined function that accepts parameters creates an extra local 
variable.
After inlining a new local variable is created, then the value of the first 
variable, which was passed as a parameter, is assigned to the new variable and 
the new variable is used in the inlined code.

The new variable is not needed and the inlined code should rather use the 
original variable.

I have provided a sample which shows the problem.

Original issue reported on code.google.com by thecma...@gmail.com on 26 Mar 2012 at 1:31

Attachments:

GoogleCodeExporter commented 9 years ago
Apparat will not perform copy propagation when using TDSI. The local variables 
have to be created because the following is valid code:

function add(x: int): void {
 x += 1;
 return x;
}

var y: int = 0;
add(y)
trace(y)

If no extra variables would be created, the code would trace "1" but should 
trace "0". Therefore variables are created and an additional optimization phase 
would be required to get rid of them. That could and is already implemented in 
the TAAS code as a phase, but since there is no complete ABC frontend or ABC 
backend (and I am no longer interested in writing it) your best chance will be 
to use MacroExpansion instead since no additional variables are created.

Original comment by joaebert on 26 Mar 2012 at 1:42

GoogleCodeExporter commented 9 years ago
Issue 62 has been merged into this issue.

Original comment by joaebert on 27 Mar 2012 at 6:21

GoogleCodeExporter commented 9 years ago
Thanks.

I originally use Inlined because the documentation led me to believe that I 
absolutely  may not use return values with macros.
I thought I would try anyway and was surprised to see that it works just fine 
and does exactly what I want.

Original comment by thecma...@gmail.com on 27 Mar 2012 at 8:04