mirror of
https://github.com/Sei-Lisa/LSL-PyOptimizer
synced 2025-07-01 23:58:20 +00:00
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.
63 lines
1.4 KiB
Text
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");
|
|
}
|
|
}
|
|
}
|
|
}
|