LSL-PyOptimizer/unit_tests/coverage.suite/inline-4.out
Sei Lisa 5bfb218505 Perform redundant jump elimination in lastpass
This is a first try at redundant jump removal (jumps that target the very next instruction). It's too basic in several ways.

- The statement is replaced by a ';' instead of removed.
- If the jump was the only statement in an if, when the if becomes empty, it's not folded.
- Jumps that are last in the 'then' branch of if+else are not visible. This would need either to track multiple last statements, or to have some means to anticipate what the next statement is at every statement. A Control Flow Graph would help a lot.
- When a label is immediately followed by a jump, all jumps to that label should target the destination of that jump if it's in scope. Added to TODO.
- It misses some optimizations when not expanding WHILE and FOR into IF/JUMP.

Moving everything to an earlier stage would help with some of these, especially with ';' and 'if' folding. Unconditionally expanding WHILE and FOR would also help.
2019-01-06 22:32:19 +01:00

63 lines
1.4 KiB
Text

default
{
state_entry()
{
{
llOwnerSay("f1");
}
{
llOwnerSay("f1");
}
{
{
llOwnerSay("f2:" + "3");
}
}
vector ___ret__00001 = <((float)0), ((float)0), ((float)0)>;
{
{
{
{
llOwnerSay("f2:" + "4");
}
}
{
;
}
@___lbl__00001;
{
___ret__00001 = <((float)1), ((float)1), ((float)1)>;
jump ___rtl__00004;
}
integer ___ret__00002;
do
{
{
{
___ret__00002 = llGetLinkNumber();
;
}
}
@___rtl__00006;
}
while (___ret__00002);
{
___ret__00001 = <((float)0), ((float)0), ((float)0)>;
;
}
}
}
@___rtl__00004;
if (___ret__00001 == <((float)0), ((float)0), ((float)0)>)
llOwnerSay("ok");
}
timer()
{
{
{
llOwnerSay("hi");
}
}
}
}