There is an opcache.optimization_level php.ini directive. It is a bitmask a defaults to 0xffffffff - so by default OPcache does all the optimizations.
What kind of optimizations does OPcache do? What passes on bytecode are done?
Follow-up question: is there a code pattern that OPcache can optimise very well? For example, HHVM can skip execution of files that contain only class/function declarations and it just fills class/function tables.
解决方案
The bits of opcache.optimization_level correspond to:
bit 0 - pass 1:
CSE - constants subexpressions elimination
Sequences of ADD_CHAR/ADD_STRING optimization
convert CAST(IS_BOOL,x) into BOOL(x)
bit 1 - pass 2:
Convert constant operands to expected types
Convert conditional JMP with constant operands
Optimize static BRK and CONT
bit 2 - pass 3:
Convert $a = $a + expr into $a += expr
Convert $a++ into ++$a
Optimize series of JMPs
bit 3 - pass 4:
PRINT and ECHO optimization - removed
bit 4 - pass 5:
block optimization (the most expensive optimization pass which perform many different optimization patterns based on CFG - control flow graph)
bit 8 - pass 9:
register allocation (allows re-usage of temporary variables)
bit 9 - pass 10:
remove NOPs
I've looked around to see if I can find anything on any code patterns that it handles better than others, but I haven't had any luck.