@@ -3471,15 +3471,16 @@ static void zend_jit_trace_clenup_stack(zend_jit_trace_stack *stack, const zend_
3471
3471
static void zend_jit_trace_setup_ret_counter (const zend_op * opline , size_t offset )
3472
3472
{
3473
3473
zend_op * next_opline = (zend_op * )(opline + 1 );
3474
+ zend_op_trace_info * const next_trace_info = ZEND_OP_TRACE_INFO (next_opline , offset );
3474
3475
3475
- if (JIT_G (hot_return ) && !ZEND_OP_TRACE_INFO ( next_opline , offset ) -> trace_flags ) {
3476
+ if (JIT_G (hot_return ) && !next_trace_info -> trace_flags ) {
3476
3477
ZEND_ASSERT (zend_jit_ret_trace_counter_handler != NULL );
3477
- if (!ZEND_OP_TRACE_INFO ( next_opline , offset ) -> counter ) {
3478
- ZEND_OP_TRACE_INFO ( next_opline , offset ) -> counter =
3478
+ if (!next_trace_info -> counter ) {
3479
+ next_trace_info -> counter =
3479
3480
& zend_jit_hot_counters [ZEND_JIT_COUNTER_NUM ];
3480
3481
ZEND_JIT_COUNTER_NUM = (ZEND_JIT_COUNTER_NUM + 1 ) % ZEND_HOT_COUNTERS_COUNT ;
3481
3482
}
3482
- ZEND_OP_TRACE_INFO ( next_opline , offset ) -> trace_flags = ZEND_JIT_TRACE_START_RETURN ;
3483
+ next_trace_info -> trace_flags = ZEND_JIT_TRACE_START_RETURN ;
3483
3484
next_opline -> handler = (const void * )zend_jit_ret_trace_counter_handler ;
3484
3485
}
3485
3486
}
@@ -7033,8 +7034,10 @@ static zend_jit_trace_stop zend_jit_compile_root_trace(zend_jit_trace_rec *trace
7033
7034
7034
7035
zend_shared_alloc_lock ();
7035
7036
7037
+ zend_op_trace_info * const trace_info = ZEND_OP_TRACE_INFO (opline , offset );
7038
+
7036
7039
/* Checks under lock */
7037
- if ((ZEND_OP_TRACE_INFO ( opline , offset ) -> trace_flags & ZEND_JIT_TRACE_JITED )) {
7040
+ if ((trace_info -> trace_flags & ZEND_JIT_TRACE_JITED )) {
7038
7041
ret = ZEND_JIT_TRACE_STOP_ALREADY_DONE ;
7039
7042
} else if (ZEND_JIT_TRACE_NUM >= JIT_G (max_root_traces )) {
7040
7043
ret = ZEND_JIT_TRACE_STOP_TOO_MANY_TRACES ;
@@ -7106,7 +7109,7 @@ static zend_jit_trace_stop zend_jit_compile_root_trace(zend_jit_trace_rec *trace
7106
7109
((zend_op * )opline )-> handler = handler ;
7107
7110
7108
7111
ZEND_JIT_TRACE_NUM ++ ;
7109
- ZEND_OP_TRACE_INFO ( opline , offset ) -> trace_flags |= ZEND_JIT_TRACE_JITED ;
7112
+ trace_info -> trace_flags |= ZEND_JIT_TRACE_JITED ;
7110
7113
7111
7114
ret = ZEND_JIT_TRACE_STOP_COMPILED ;
7112
7115
} else if (t -> exit_count >= ZEND_JIT_TRACE_MAX_EXITS ||
@@ -7223,14 +7226,16 @@ static void zend_jit_blacklist_root_trace(const zend_op *opline, size_t offset)
7223
7226
{
7224
7227
zend_shared_alloc_lock ();
7225
7228
7226
- if (!(ZEND_OP_TRACE_INFO (opline , offset )-> trace_flags & ZEND_JIT_TRACE_BLACKLISTED )) {
7229
+ zend_op_trace_info * const trace_info = ZEND_OP_TRACE_INFO (opline , offset );
7230
+
7231
+ if (!(trace_info -> trace_flags & ZEND_JIT_TRACE_BLACKLISTED )) {
7227
7232
SHM_UNPROTECT ();
7228
7233
zend_jit_unprotect ();
7229
7234
7230
7235
((zend_op * )opline )-> handler =
7231
- ZEND_OP_TRACE_INFO ( opline , offset ) -> orig_handler ;
7236
+ trace_info -> orig_handler ;
7232
7237
7233
- ZEND_OP_TRACE_INFO ( opline , offset ) -> trace_flags |= ZEND_JIT_TRACE_BLACKLISTED ;
7238
+ trace_info -> trace_flags |= ZEND_JIT_TRACE_BLACKLISTED ;
7234
7239
7235
7240
zend_jit_protect ();
7236
7241
SHM_PROTECT ();
@@ -7254,8 +7259,9 @@ static bool zend_jit_trace_is_bad_root(const zend_op *opline, zend_jit_trace_sto
7254
7259
return true;
7255
7260
} else {
7256
7261
#if 0
7257
- if (ZEND_OP_TRACE_INFO (opline , offset )-> counter ) {
7258
- * ZEND_OP_TRACE_INFO (opline , offset )-> counter =
7262
+ zend_op_trace_info * const trace_info = ZEND_OP_TRACE_INFO (opline , offset );
7263
+ if (trace_info -> counter ) {
7264
+ * trace_info -> counter =
7259
7265
random () % ZEND_JIT_TRACE_COUNTER_MAX ;
7260
7266
}
7261
7267
#endif
@@ -7575,20 +7581,22 @@ int ZEND_FASTCALL zend_jit_trace_hot_root(zend_execute_data *execute_data, const
7575
7581
7576
7582
EX (opline ) = opline ;
7577
7583
7584
+ zend_op_trace_info * const trace_info = ZEND_OP_TRACE_INFO (opline , offset );
7585
+
7578
7586
/* Lock-free check if the root trace was already JIT-ed or blacklist-ed in another process */
7579
- if (ZEND_OP_TRACE_INFO ( opline , offset ) -> trace_flags & (ZEND_JIT_TRACE_JITED |ZEND_JIT_TRACE_BLACKLISTED )) {
7587
+ if (trace_info -> trace_flags & (ZEND_JIT_TRACE_JITED |ZEND_JIT_TRACE_BLACKLISTED )) {
7580
7588
return 0 ;
7581
7589
}
7582
7590
7583
7591
if (JIT_G (tracing )) {
7584
- ++ (* ZEND_OP_TRACE_INFO ( opline , offset ) -> counter );
7592
+ ++ (* trace_info -> counter );
7585
7593
return 0 ;
7586
7594
}
7587
7595
7588
7596
if (JIT_G (debug ) & ZEND_JIT_DEBUG_TRACE_START ) {
7589
7597
fprintf (stderr , "---- TRACE %d start (%s) %s%s%s() %s:%d\n" ,
7590
7598
trace_num ,
7591
- zend_jit_trace_star_desc (ZEND_OP_TRACE_INFO ( opline , offset ) -> trace_flags ),
7599
+ zend_jit_trace_star_desc (trace_info -> trace_flags ),
7592
7600
EX (func )-> op_array .scope ? ZSTR_VAL (EX (func )-> op_array .scope -> name ) : "" ,
7593
7601
EX (func )-> op_array .scope ? "::" : "" ,
7594
7602
EX (func )-> op_array .function_name ?
@@ -7605,7 +7613,7 @@ int ZEND_FASTCALL zend_jit_trace_hot_root(zend_execute_data *execute_data, const
7605
7613
7606
7614
JIT_G (tracing ) = true;
7607
7615
stop = zend_jit_trace_execute (execute_data , opline , trace_buffer ,
7608
- ZEND_OP_TRACE_INFO ( opline , offset ) -> trace_flags & ZEND_JIT_TRACE_START_MASK , 0 );
7616
+ trace_info -> trace_flags & ZEND_JIT_TRACE_START_MASK , 0 );
7609
7617
JIT_G (tracing ) = false;
7610
7618
7611
7619
if (stop & ZEND_JIT_TRACE_HALT ) {
@@ -8195,14 +8203,15 @@ static int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registe
8195
8203
zend_jit_unprotect ();
8196
8204
8197
8205
jit_extension = (zend_jit_op_array_trace_extension * )ZEND_FUNC_INFO (t -> op_array );
8198
- if (ZEND_OP_TRACE_INFO (t -> opline , jit_extension -> offset )-> trace_flags & ZEND_JIT_TRACE_START_LOOP ) {
8206
+ zend_op_trace_info * const trace_info = ZEND_OP_TRACE_INFO (t -> opline , jit_extension -> offset );
8207
+ if (trace_info -> trace_flags & ZEND_JIT_TRACE_START_LOOP ) {
8199
8208
((zend_op * )(t -> opline ))-> handler = (const void * )zend_jit_loop_trace_counter_handler ;
8200
- } else if (ZEND_OP_TRACE_INFO ( t -> opline , jit_extension -> offset ) -> trace_flags & ZEND_JIT_TRACE_START_ENTER ) {
8209
+ } else if (trace_info -> trace_flags & ZEND_JIT_TRACE_START_ENTER ) {
8201
8210
((zend_op * )(t -> opline ))-> handler = (const void * )zend_jit_func_trace_counter_handler ;
8202
- } else if (ZEND_OP_TRACE_INFO ( t -> opline , jit_extension -> offset ) -> trace_flags & ZEND_JIT_TRACE_START_RETURN ) {
8211
+ } else if (trace_info -> trace_flags & ZEND_JIT_TRACE_START_RETURN ) {
8203
8212
((zend_op * )(t -> opline ))-> handler = (const void * )zend_jit_ret_trace_counter_handler ;
8204
8213
}
8205
- ZEND_OP_TRACE_INFO ( t -> opline , jit_extension -> offset ) -> trace_flags &=
8214
+ trace_info -> trace_flags &=
8206
8215
ZEND_JIT_TRACE_START_LOOP |ZEND_JIT_TRACE_START_ENTER |ZEND_JIT_TRACE_START_RETURN ;
8207
8216
8208
8217
zend_jit_protect ();
@@ -8299,14 +8308,15 @@ static int zend_jit_setup_hot_trace_counters(zend_op_array *op_array)
8299
8308
if (cfg .blocks [i ].flags & ZEND_BB_LOOP_HEADER ) {
8300
8309
/* loop header */
8301
8310
opline = op_array -> opcodes + cfg .blocks [i ].start ;
8302
- if (!(ZEND_OP_TRACE_INFO (opline , jit_extension -> offset )-> trace_flags & ZEND_JIT_TRACE_UNSUPPORTED )) {
8311
+ zend_op_trace_info * const trace_info = ZEND_OP_TRACE_INFO (opline , jit_extension -> offset );
8312
+ if (!(trace_info -> trace_flags & ZEND_JIT_TRACE_UNSUPPORTED )) {
8303
8313
opline -> handler = (const void * )zend_jit_loop_trace_counter_handler ;
8304
- if (!ZEND_OP_TRACE_INFO ( opline , jit_extension -> offset ) -> counter ) {
8305
- ZEND_OP_TRACE_INFO ( opline , jit_extension -> offset ) -> counter =
8314
+ if (!trace_info -> counter ) {
8315
+ trace_info -> counter =
8306
8316
& zend_jit_hot_counters [ZEND_JIT_COUNTER_NUM ];
8307
8317
ZEND_JIT_COUNTER_NUM = (ZEND_JIT_COUNTER_NUM + 1 ) % ZEND_HOT_COUNTERS_COUNT ;
8308
8318
}
8309
- ZEND_OP_TRACE_INFO ( opline , jit_extension -> offset ) -> trace_flags |=
8319
+ trace_info -> trace_flags |=
8310
8320
ZEND_JIT_TRACE_START_LOOP ;
8311
8321
}
8312
8322
}
@@ -8323,13 +8333,14 @@ static int zend_jit_setup_hot_trace_counters(zend_op_array *op_array)
8323
8333
}
8324
8334
}
8325
8335
8326
- if (!ZEND_OP_TRACE_INFO (opline , jit_extension -> offset )-> trace_flags ) {
8336
+ zend_op_trace_info * const trace_info = ZEND_OP_TRACE_INFO (opline , jit_extension -> offset );
8337
+ if (!trace_info -> trace_flags ) {
8327
8338
/* function entry */
8328
8339
opline -> handler = (const void * )zend_jit_func_trace_counter_handler ;
8329
- ZEND_OP_TRACE_INFO ( opline , jit_extension -> offset ) -> counter =
8340
+ trace_info -> counter =
8330
8341
& zend_jit_hot_counters [ZEND_JIT_COUNTER_NUM ];
8331
8342
ZEND_JIT_COUNTER_NUM = (ZEND_JIT_COUNTER_NUM + 1 ) % ZEND_HOT_COUNTERS_COUNT ;
8332
- ZEND_OP_TRACE_INFO ( opline , jit_extension -> offset ) -> trace_flags |=
8343
+ trace_info -> trace_flags |=
8333
8344
ZEND_JIT_TRACE_START_ENTER ;
8334
8345
}
8335
8346
}
0 commit comments