Changeset 331 in svn for trunk/optimizer.c


Ignore:
Timestamp:
2006-12-16T14:14:15+01:00 (9 years ago)
Author:
Xuefer
Message:

optimzer: implement dop for debugging

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/optimizer.c

    r330 r331  
    1 #if 0
     1#if 1
    22#define DEBUG
    33#endif
     
    1111#   include "processor.h"
    1212#   include "const_string.h"
     13#   include "ext/standard/php_var.h"
     14#endif
     15
     16#ifdef IS_CV
     17#   define XCACHE_IS_CV IS_CV
     18#else
     19#   define XCACHE_IS_CV 16
    1320#endif
    1421
     
    170177}
    171178/* }}} */
     179#ifdef DEBUG
     180static void op_snprint(char *buf, int size, znode *op) /* {{{ */
     181{
     182    switch (op->op_type) {
     183    case IS_CONST:
     184        {
     185            zval result;
     186            zval *zv = &op->u.constant;
     187            TSRMLS_FETCH();
     188
     189            php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC);
     190            php_var_export(&zv, 1 TSRMLS_CC);
     191
     192            php_ob_get_buffer(&result TSRMLS_CC);
     193            php_end_ob_buffer(0, 0 TSRMLS_CC);
     194            snprintf(buf, size, Z_STRVAL(result));
     195            zval_dtor(&result);
     196        }
     197        break;
     198
     199    case IS_TMP_VAR:
     200        snprintf(buf, size, "t@%d", op->u.var);
     201        break;
     202
     203    case XCACHE_IS_CV:
     204    case IS_VAR:
     205        snprintf(buf, size, "v@%d", op->u.var);
     206        break;
     207
     208    case IS_UNUSED:
     209        if (op->u.opline_num) {
     210            snprintf(buf, size, "u#%d", op->u.opline_num);
     211        }
     212        else {
     213            snprintf(buf, size, "-");
     214        }
     215        break;
     216
     217    default:
     218        snprintf(buf, size, "%d %d", op->op_type, op->u.var);
     219    }
     220}
     221/* }}} */
     222static void op_print(int line, zend_op *first, zend_op *end) /* {{{ */
     223{
     224    zend_op *opline;
     225    for (opline = first; opline < end; opline ++) {
     226        char buf_r[20];
     227        char buf_1[20];
     228        char buf_2[20];
     229        op_snprint(buf_r, sizeof(buf_r), &opline->result);
     230        op_snprint(buf_1, sizeof(buf_1), &opline->op1);
     231        op_snprint(buf_2, sizeof(buf_2), &opline->op2);
     232        fprintf(stderr, "%3d %-15s%-5s%-20s%-20s\r\n", opline - first + line, xc_get_opcode(opline->opcode), buf_r, buf_1, buf_2);
     233    }
     234}
     235/* }}} */
     236#endif
    172237
    173238/*
     
    208273static void bb_print(bb_t *bb, zend_op *opcodes) /* {{{ */
    209274{
     275    int line = bb->opcodes - opcodes;
    210276    op_flowinfo_t fi;
    211277    zend_op *last = bb->opcodes + bb->count - 1;
     
    214280
    215281    fprintf(stderr,
    216             "%3d %3d %3d"
     282            "#%-3d cnt:%-3d lno:%-3d"
    217283            " %c%c"
    218             " %3d %3d %3d %3d %3d %s\r\n"
    219             , bb->id, bb->count, bb->alloc ? -1 : bb->opcodes - opcodes
     284            " op1:%-3d op2:%-3d ext:%-3d fal:%-3d cat:%-3d %s\r\n"
     285            , bb->id, bb->count, bb->alloc ? -1 : line
    220286            , bb->used ? 'U' : ' ', bb->alloc ? 'A' : ' '
    221287            , fi.jmpout_op1, fi.jmpout_op2, fi.jmpout_ext, bb->fall, bb->catch, xc_get_opcode(last->opcode)
    222288            );
     289    op_print(line, bb->opcodes, last + 1);
    223290}
    224291/* }}} */
     
    249316{
    250317    int i;
    251     fprintf(stderr,
    252             " id cnt lno"
    253             " UA"
    254             " op1 op2 ext fal cat opcode\r\n"
    255             );
    256318    for (i = 0; i < xc_stack_count(bbs); i ++) {
    257319        bb_print(bbs_get(bbs, i), opcodes);
     
    395457            break;
    396458        }
    397         start = i + 1;
     459        start = i - 1;
    398460        id = bbids[i];
    399461    }
     
    468530    xc_dprint_zend_op_array(op_array, 0 TSRMLS_CC);
    469531#   endif
     532    op_print(0, op_array->opcodes, op_array->opcodes + op_array->last);
    470533#endif
    471534
Note: See TracChangeset for help on using the changeset viewer.