php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
zend_optimizer_internal.h File Reference
#include "zend_ssa.h"
#include "zend_func_info.h"
#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  _zend_optimizer_ctx
 

Macros

#define ZEND_OP1_LITERAL(opline)
 
#define ZEND_OP1_JMP_ADDR(opline)
 
#define ZEND_OP2_LITERAL(opline)
 
#define ZEND_OP2_JMP_ADDR(opline)
 
#define VAR_NUM(v)
 
#define NUM_VAR(v)
 
#define INV_COND(op)
 
#define INV_EX_COND(op)
 
#define INV_COND_EX(op)
 
#define INV_EX_COND_EX(op)
 
#define RESULT_UNUSED(op)
 
#define SAME_VAR(op1, op2)
 
#define LITERAL_LONG(op, val)
 
#define LITERAL_BOOL(op, val)
 
#define literal_dtor(zv)
 
#define COPY_NODE(target, src)
 

Typedefs

typedef struct _zend_optimizer_ctx zend_optimizer_ctx
 
typedef void(* zend_op_array_func_t) (zend_op_array *, void *context)
 

Functions

void zend_optimizer_convert_to_free_op1 (zend_op_array *op_array, zend_op *opline)
 
int zend_optimizer_add_literal (zend_op_array *op_array, const zval *zv)
 
bool zend_optimizer_get_persistent_constant (zend_string *name, zval *result, int copy)
 
void zend_optimizer_collect_constant (zend_optimizer_ctx *ctx, zval *name, zval *value)
 
bool zend_optimizer_get_collected_constant (HashTable *constants, zval *name, zval *value)
 
zend_result zend_optimizer_eval_binary_op (zval *result, uint8_t opcode, zval *op1, zval *op2)
 
zend_result zend_optimizer_eval_unary_op (zval *result, uint8_t opcode, zval *op1)
 
zend_result zend_optimizer_eval_cast (zval *result, uint32_t type, zval *op1)
 
zend_result zend_optimizer_eval_strlen (zval *result, const zval *op1)
 
zend_result zend_optimizer_eval_special_func_call (zval *result, zend_string *name, zend_string *arg)
 
bool zend_optimizer_update_op1_const (zend_op_array *op_array, zend_op *opline, zval *val)
 
bool zend_optimizer_update_op2_const (zend_op_array *op_array, zend_op *opline, zval *val)
 
bool zend_optimizer_replace_by_const (zend_op_array *op_array, zend_op *opline, uint8_t type, uint32_t var, zval *val)
 
zend_opzend_optimizer_get_loop_var_def (const zend_op_array *op_array, zend_op *free_opline)
 
zend_class_entryzend_optimizer_get_class_entry (const zend_script *script, const zend_op_array *op_array, zend_string *lcname)
 
zend_class_entryzend_optimizer_get_class_entry_from_op1 (const zend_script *script, const zend_op_array *op_array, const zend_op *opline)
 
const zend_class_constantzend_fetch_class_const_info (const zend_script *script, const zend_op_array *op_array, const zend_op *opline, bool *is_prototype)
 
void zend_optimizer_pass1 (zend_op_array *op_array, zend_optimizer_ctx *ctx)
 
void zend_optimizer_pass3 (zend_op_array *op_array, zend_optimizer_ctx *ctx)
 
void zend_optimize_func_calls (zend_op_array *op_array, zend_optimizer_ctx *ctx)
 
void zend_optimize_cfg (zend_op_array *op_array, zend_optimizer_ctx *ctx)
 
void zend_optimize_dfa (zend_op_array *op_array, zend_optimizer_ctx *ctx)
 
zend_result zend_dfa_analyze_op_array (zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa)
 
void zend_dfa_optimize_op_array (zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa, zend_call_info **call_map)
 
void zend_optimize_temporary_variables (zend_op_array *op_array, zend_optimizer_ctx *ctx)
 
void zend_optimizer_nop_removal (zend_op_array *op_array, zend_optimizer_ctx *ctx)
 
void zend_optimizer_compact_literals (zend_op_array *op_array, zend_optimizer_ctx *ctx)
 
void zend_optimizer_compact_vars (zend_op_array *op_array)
 
zend_functionzend_optimizer_get_called_func (zend_script *script, zend_op_array *op_array, zend_op *opline, bool *is_prototype)
 
uint32_t zend_optimizer_classify_function (zend_string *name, uint32_t num_args)
 
void zend_optimizer_migrate_jump (zend_op_array *op_array, zend_op *new_opline, zend_op *opline)
 
void zend_optimizer_shift_jump (zend_op_array *op_array, zend_op *opline, uint32_t *shiftlist)
 
int sccp_optimize_op_array (zend_optimizer_ctx *ctx, zend_op_array *op_array, zend_ssa *ssa, zend_call_info **call_map)
 
int dce_optimize_op_array (zend_op_array *op_array, zend_optimizer_ctx *optimizer_ctx, zend_ssa *ssa, bool reorder_dtor_effects)
 
zend_result zend_ssa_escape_analysis (const zend_script *script, zend_op_array *op_array, zend_ssa *ssa)
 
void zend_foreach_op_array (zend_script *script, zend_op_array_func_t func, void *context)
 

Macro Definition Documentation

◆ COPY_NODE

#define COPY_NODE ( target,
src )
Value:
do { \
target ## _type = src ## _type; \
target = src; \
} while (0)

Definition at line 71 of file zend_optimizer_internal.h.

◆ INV_COND

#define INV_COND ( op)
Value:
#define ZEND_JMPZ
#define ZEND_JMPNZ

Definition at line 38 of file zend_optimizer_internal.h.

◆ INV_COND_EX

#define INV_COND_EX ( op)
Value:
#define ZEND_JMPZ_EX
#define ZEND_JMPNZ_EX

Definition at line 40 of file zend_optimizer_internal.h.

◆ INV_EX_COND

#define INV_EX_COND ( op)
Value:

Definition at line 39 of file zend_optimizer_internal.h.

◆ INV_EX_COND_EX

#define INV_EX_COND_EX ( op)
Value:

Definition at line 41 of file zend_optimizer_internal.h.

◆ LITERAL_BOOL

#define LITERAL_BOOL ( op,
val )
Value:
do { \
zval _c; \
ZVAL_BOOL(&_c, val); \
op.constant = zend_optimizer_add_literal(op_array, &_c); \
} while (0)
zval * val
Definition ffi.c:4262
struct _zval_struct zval
int zend_optimizer_add_literal(zend_op_array *op_array, const zval *zv)

Definition at line 60 of file zend_optimizer_internal.h.

◆ literal_dtor

#define literal_dtor ( zv)
Value:
do { \
zval_ptr_dtor_nogc(zv); \
ZVAL_NULL(zv); \
} while (0)
zval * zv
Definition ffi.c:3975

Definition at line 66 of file zend_optimizer_internal.h.

◆ LITERAL_LONG

#define LITERAL_LONG ( op,
val )
Value:
do { \
zval _c; \
ZVAL_LONG(&_c, val); \
op.constant = zend_optimizer_add_literal(op_array, &_c); \
} while (0)

Definition at line 54 of file zend_optimizer_internal.h.

◆ NUM_VAR

#define NUM_VAR ( v)
Value:
uint32_t v
Definition cdf.c:1237
#define EX_NUM_TO_VAR(n)

Definition at line 36 of file zend_optimizer_internal.h.

◆ RESULT_UNUSED

#define RESULT_UNUSED ( op)
Value:
(op->result_type == IS_UNUSED)
#define IS_UNUSED

Definition at line 43 of file zend_optimizer_internal.h.

◆ SAME_VAR

#define SAME_VAR ( op1,
op2 )
Value:
(op1 ## _type == op2 ## _type && op1.var == op2.var)
op2
op1

Definition at line 44 of file zend_optimizer_internal.h.

◆ VAR_NUM

#define VAR_NUM ( v)
Value:
#define EX_VAR_TO_NUM(n)

Definition at line 35 of file zend_optimizer_internal.h.

◆ ZEND_OP1_JMP_ADDR

#define ZEND_OP1_JMP_ADDR ( opline)
Value:
OP_JMP_ADDR(opline, (opline)->op1)
#define OP_JMP_ADDR(opline, node)

Definition at line 31 of file zend_optimizer_internal.h.

◆ ZEND_OP1_LITERAL

#define ZEND_OP1_LITERAL ( opline)
Value:
(op_array)->literals[(opline)->op1.constant]

Definition at line 30 of file zend_optimizer_internal.h.

◆ ZEND_OP2_JMP_ADDR

#define ZEND_OP2_JMP_ADDR ( opline)
Value:
OP_JMP_ADDR(opline, (opline)->op2)

Definition at line 33 of file zend_optimizer_internal.h.

◆ ZEND_OP2_LITERAL

#define ZEND_OP2_LITERAL ( opline)
Value:
(op_array)->literals[(opline)->op2.constant]

Definition at line 32 of file zend_optimizer_internal.h.

Typedef Documentation

◆ zend_op_array_func_t

typedef void(* zend_op_array_func_t) (zend_op_array *, void *context)

Definition at line 131 of file zend_optimizer_internal.h.

◆ zend_optimizer_ctx

Function Documentation

◆ dce_optimize_op_array()

int dce_optimize_op_array ( zend_op_array * op_array,
zend_optimizer_ctx * optimizer_ctx,
zend_ssa * ssa,
bool reorder_dtor_effects )

Definition at line 526 of file dce.c.

◆ sccp_optimize_op_array()

int sccp_optimize_op_array ( zend_optimizer_ctx * ctx,
zend_op_array * op_array,
zend_ssa * ssa,
zend_call_info ** call_map )

Definition at line 2469 of file sccp.c.

◆ zend_dfa_analyze_op_array()

zend_result zend_dfa_analyze_op_array ( zend_op_array * op_array,
zend_optimizer_ctx * ctx,
zend_ssa * ssa )

Definition at line 41 of file dfa_pass.c.

◆ zend_dfa_optimize_op_array()

void zend_dfa_optimize_op_array ( zend_op_array * op_array,
zend_optimizer_ctx * ctx,
zend_ssa * ssa,
zend_call_info ** call_map )

Definition at line 1037 of file dfa_pass.c.

◆ zend_fetch_class_const_info()

const zend_class_constant * zend_fetch_class_const_info ( const zend_script * script,
const zend_op_array * op_array,
const zend_op * opline,
bool * is_prototype )

Definition at line 869 of file zend_optimizer.c.

◆ zend_foreach_op_array()

void zend_foreach_op_array ( zend_script * script,
zend_op_array_func_t func,
void * context )

Definition at line 1551 of file zend_optimizer.c.

◆ zend_optimize_cfg()

void zend_optimize_cfg ( zend_op_array * op_array,
zend_optimizer_ctx * ctx )

Definition at line 1673 of file block_pass.c.

◆ zend_optimize_dfa()

void zend_optimize_dfa ( zend_op_array * op_array,
zend_optimizer_ctx * ctx )

Definition at line 1665 of file dfa_pass.c.

◆ zend_optimize_func_calls()

void zend_optimize_func_calls ( zend_op_array * op_array,
zend_optimizer_ctx * ctx )

Definition at line 151 of file optimize_func_calls.c.

◆ zend_optimize_temporary_variables()

void zend_optimize_temporary_variables ( zend_op_array * op_array,
zend_optimizer_ctx * ctx )

Definition at line 43 of file optimize_temp_vars_5.c.

◆ zend_optimizer_add_literal()

int zend_optimizer_add_literal ( zend_op_array * op_array,
const zval * zv )

Definition at line 233 of file zend_optimizer.c.

◆ zend_optimizer_classify_function()

uint32_t zend_optimizer_classify_function ( zend_string * name,
uint32_t num_args )

Definition at line 1035 of file zend_optimizer.c.

◆ zend_optimizer_collect_constant()

void zend_optimizer_collect_constant ( zend_optimizer_ctx * ctx,
zval * name,
zval * value )

Definition at line 44 of file zend_optimizer.c.

◆ zend_optimizer_compact_literals()

void zend_optimizer_compact_literals ( zend_op_array * op_array,
zend_optimizer_ctx * ctx )

Definition at line 154 of file compact_literals.c.

◆ zend_optimizer_compact_vars()

void zend_optimizer_compact_vars ( zend_op_array * op_array)

Definition at line 25 of file compact_vars.c.

◆ zend_optimizer_convert_to_free_op1()

void zend_optimizer_convert_to_free_op1 ( zend_op_array * op_array,
zend_op * opline )

Definition at line 214 of file zend_optimizer.c.

◆ zend_optimizer_eval_binary_op()

zend_result zend_optimizer_eval_binary_op ( zval * result,
uint8_t opcode,
zval * op1,
zval * op2 )

Definition at line 56 of file zend_optimizer.c.

◆ zend_optimizer_eval_cast()

zend_result zend_optimizer_eval_cast ( zval * result,
uint32_t type,
zval * op1 )

Definition at line 83 of file zend_optimizer.c.

◆ zend_optimizer_eval_special_func_call()

zend_result zend_optimizer_eval_special_func_call ( zval * result,
zend_string * name,
zend_string * arg )

Definition at line 125 of file zend_optimizer.c.

◆ zend_optimizer_eval_strlen()

zend_result zend_optimizer_eval_strlen ( zval * result,
const zval * op1 )

Definition at line 115 of file zend_optimizer.c.

◆ zend_optimizer_eval_unary_op()

zend_result zend_optimizer_eval_unary_op ( zval * result,
uint8_t opcode,
zval * op1 )

Definition at line 67 of file zend_optimizer.c.

◆ zend_optimizer_get_called_func()

zend_function * zend_optimizer_get_called_func ( zend_script * script,
zend_op_array * op_array,
zend_op * opline,
bool * is_prototype )

Definition at line 921 of file zend_optimizer.c.

◆ zend_optimizer_get_class_entry()

zend_class_entry * zend_optimizer_get_class_entry ( const zend_script * script,
const zend_op_array * op_array,
zend_string * lcname )

Definition at line 833 of file zend_optimizer.c.

◆ zend_optimizer_get_class_entry_from_op1()

zend_class_entry * zend_optimizer_get_class_entry_from_op1 ( const zend_script * script,
const zend_op_array * op_array,
const zend_op * opline )

Definition at line 852 of file zend_optimizer.c.

◆ zend_optimizer_get_collected_constant()

bool zend_optimizer_get_collected_constant ( HashTable * constants,
zval * name,
zval * value )

Definition at line 203 of file zend_optimizer.c.

◆ zend_optimizer_get_loop_var_def()

zend_op * zend_optimizer_get_loop_var_def ( const zend_op_array * op_array,
zend_op * free_opline )

Definition at line 1055 of file zend_optimizer.c.

◆ zend_optimizer_get_persistent_constant()

bool zend_optimizer_get_persistent_constant ( zend_string * name,
zval * result,
int copy )

Definition at line 33 of file block_pass.c.

◆ zend_optimizer_migrate_jump()

void zend_optimizer_migrate_jump ( zend_op_array * op_array,
zend_op * new_opline,
zend_op * opline )

Definition at line 708 of file zend_optimizer.c.

◆ zend_optimizer_nop_removal()

void zend_optimizer_nop_removal ( zend_op_array * op_array,
zend_optimizer_ctx * ctx )

Definition at line 33 of file nop_removal.c.

◆ zend_optimizer_pass1()

void zend_optimizer_pass1 ( zend_op_array * op_array,
zend_optimizer_ctx * ctx )

Definition at line 60 of file pass1.c.

◆ zend_optimizer_pass3()

void zend_optimizer_pass3 ( zend_op_array * op_array,
zend_optimizer_ctx * ctx )

Definition at line 53 of file pass3.c.

◆ zend_optimizer_replace_by_const()

bool zend_optimizer_replace_by_const ( zend_op_array * op_array,
zend_op * opline,
uint8_t type,
uint32_t var,
zval * val )

Definition at line 620 of file zend_optimizer.c.

◆ zend_optimizer_shift_jump()

void zend_optimizer_shift_jump ( zend_op_array * op_array,
zend_op * opline,
uint32_t * shiftlist )

Definition at line 753 of file zend_optimizer.c.

◆ zend_optimizer_update_op1_const()

bool zend_optimizer_update_op1_const ( zend_op_array * op_array,
zend_op * opline,
zval * val )

Definition at line 277 of file zend_optimizer.c.

◆ zend_optimizer_update_op2_const()

bool zend_optimizer_update_op2_const ( zend_op_array * op_array,
zend_op * opline,
zval * val )

Definition at line 438 of file zend_optimizer.c.

◆ zend_ssa_escape_analysis()

zend_result zend_ssa_escape_analysis ( const zend_script * script,
zend_op_array * op_array,
zend_ssa * ssa )

Definition at line 382 of file escape_analysis.c.