Hi Benjamin,

Thanks for idea.
With PHP7 AST compiler, it's quite easy to implement this (it took us 15
minutes to try :)
However, it doesn't make big improvement on our benchmarks.
We will take a look into possibilities to apply your idea to other patterns
(e.g. for and foreach loops).

Anyway, it makes full sense to include this optimization into PHP7.
I just like to try other opportunities first.

Thanks. Dmitry.

On Fri, Jan 16, 2015 at 10:56 AM, Benjamin Coutu <ben.co...@zeyos.com>
wrote:

> Hello,
>
> Please consider the following PHP code:
>
> while ( <CONDITION> ) {
>   <STATEMENT>
> }
>
> It currently compiles to something like this for the Zend Engine:
>
> 0: <CONDITION>
> 1: JMPZ -> 4
> 2: <STATEMENT>
> 3: JMP -> 0
> 4: ...
>
> This can easily be rewritten in an equivalent but much more efficient form:
>
> 0: JMP -> 2
> 1: <STATEMENT>
> 2: <CONDITION>
> 3: JMPNZ -> 1
>
> The trick is to jump to the conditional expression before the first
> iteration and then only having to continue with just on conditional jump on
> every subsequent cycle.
>
> This would result in only 1 jump per loop iteration compared to
> effectively 2 jumps needed per iteration with the current implementation.
>
> It would also make the loop tighter as upon entering the loop (after first
> conditional evaluation), one less opcode remains relevant to the loop.
>
> An analogous approach can be taken for the for-loop.
>
> Thanks,
>
> Ben
>
> PS: This is my first post on a PHP mailinglist - I am very excited! :)
>
> --
>
> Benjamin Coutu
> Zeyon Technologies Inc.
> http://www.zeyos.com
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to