Changeset 322
- Timestamp:
- 05/24/07 18:32:49 (1 year ago)
- Files:
-
- eaccelerator/trunk/optimize.c (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
eaccelerator/trunk/optimize.c
r309 r322 28 28 #include "eaccelerator.h" 29 29 30 //#ifdef HAVE_EACCELERATOR31 //#ifdef WITH_EACCELERATOR_OPTIMIZER30 #ifdef HAVE_EACCELERATOR 31 #ifdef WITH_EACCELERATOR_OPTIMIZER 32 32 33 33 #include "zend.h" … … 46 46 /* 47 47 * HOESH: To protect merging. Primary 48 * it a pplies to try & catch blocks.48 * it abblies to try & catch blocks. 49 49 * ZEND_ENGINE_2 specific, but can take place 50 50 */ … … 63 63 } BBlink; 64 64 65 #if 0 65 66 static void dump_bb(BB* bb, zend_op_array *op_array) { 66 67 BB* p = bb; … … 68 69 zend_printf("<pre>%s:%s\n", op_array->filename, op_array->function_name); 69 70 while (p != NULL) { 70 zend_printf(" <strong>bb%u</strong> start=%u len=%d used=%d protected=%d\n",71 zend_printf(" bb%u start=%u len=%d used=%d\n", 71 72 (unsigned int)(p-bb), 72 73 (unsigned int)(p->start-op_array->opcodes), 73 74 p->len, 74 p->used, 75 p->protect_merge); 75 p->used); 76 76 if (p->jmp_1) { 77 77 zend_printf(" jmp_1 bb%u start=%u len=%d used=%d\n", … … 168 168 zend_printf("<br>\n"); 169 169 } 170 #endif 170 171 171 172 #define SET_TO_NOP(op) \ … … 248 249 #ifdef ZEND_ENGINE_2 249 250 (end->opcode == ZEND_RECV || end->opcode == ZEND_RECV_INIT || 250 (end->result.u.EA.type & EXT_TYPE_UNUSED) == 0)) ||251 (end->result.u.EA.type & EXT_TYPE_UNUSED) == 0)) || 251 252 #else 252 253 (end->result.u.EA.type & EXT_TYPE_UNUSED) == 0) || 253 254 #endif 254 255 (end->result.op_type == IS_TMP_VAR)) && 255 !global[VAR_NUM(end->result.u.var)] && !used[VAR_NUM(end->result.u.var)]) {256 !global[VAR_NUM(end->result.u.var)] && !used[VAR_NUM(end->result.u.var)]) { 256 257 switch(end->opcode) { 257 258 case ZEND_JMPZ_EX: … … 548 549 p = bb; 549 550 while (p->next != NULL) { 550 if (p->next->used && (p->next->pred || p->protect_merge)) {551 if (p->next->used && p->next->pred) { 551 552 p = p->next; 552 553 } else { … … 580 581 p = bb; 581 582 while (p != NULL) { 582 while (p->next != NULL && (!p->next->used || p->next->pred == NULL) && !p->protect_merge) {583 while (p->next != NULL && (!p->next->used || p->next->pred == NULL)) { 583 584 del_bb(p->next); 584 585 p->next = p->next->next; … … 2714 2715 bb[tc_element->catch_op].start = &op_array->opcodes[tc_element->catch_op]; 2715 2716 bb[tc_element->catch_op].protect_merge = 1; 2716 bb[tc_element->catch_op].used = 1;2717 2717 } 2718 2718 } 2719 2720 dump_bb(bb, op_array);2721 2722 2719 #endif 2723 2720 /* Find Starts of Basic Blocks */ … … 3178 3175 #define FREE_REG(R) reg_pool[(R)] = 0; 3179 3176 3180 static void reassign_registers(zend_op_array *op_array, BB* p, char *global) { 3177 3178 void reassign_registers(zend_op_array *op_array, BB* p, char *global) { 3181 3179 zend_uint i; 3182 3180 zend_uint n = 0; … … 3300 3298 } 3301 3299 3302 staticvoid restore_operand_types(zend_op_array *op_array) {3300 void restore_operand_types(zend_op_array *op_array) { 3303 3301 zend_op* op = op_array->opcodes; 3304 3302 int len = op_array->last; … … 3324 3322 3325 3323 TSRMLS_FETCH(); 3326 3324 /*??? 3325 #ifdef ZEND_ENGINE_2 3326 return; 3327 #endif 3328 */ 3327 3329 if (!EAG(compiler) || op_array->type != ZEND_USER_FUNCTION) { 3328 3330 return; … … 3335 3337 /* Find All Basic Blocks and build CFG */ 3336 3338 if (build_cfg(op_array, bb)) { 3337 dump_bb(bb, op_array);3338 3339 char *global = do_alloca(op_array->T * sizeof(char)); 3339 3340 if (global == NULL) return; … … 3342 3343 /* Determine Used Blocks and its Predcessors */ 3343 3344 mark_used_bb(bb); 3344 dump_bb(bb, op_array);3345 3345 3346 3346 /* JMP Optimization */ … … 3355 3355 } 3356 3356 3357 /* Mark All Basi cBlocks as Unused. Free Predcessors Links. */3357 /* Mark All Basik Blocks as Unused. Free Predcessors Links. */ 3358 3358 p = bb; 3359 3359 while (p != NULL) { … … 3368 3368 p = bb; 3369 3369 while (p->next != NULL) { 3370 if (p->next->used || p->protect_merge) {3370 if (p->next->used) { 3371 3371 p = p->next; 3372 3372 } else { … … 3398 3398 free_alloca(bb); 3399 3399 } 3400 //#endif3401 //#endif /* #ifdef HAVE_EACCELERATOR */3400 #endif 3401 #endif /* #ifdef HAVE_EACCELERATOR */