* Merged with df1b780317c3.
authorChristian Thalinger <twisti@complang.tuwien.ac.at>
Sat, 19 Jan 2008 10:17:33 +0000 (11:17 +0100)
committerChristian Thalinger <twisti@complang.tuwien.ac.at>
Sat, 19 Jan 2008 10:17:33 +0000 (11:17 +0100)
1  2 
src/vm/jit/codegen-common.c
src/vm/jit/jit.c
src/vm/jit/show.c
src/vm/vm.c

index d344d15327085397f456dd892b6727fa5d5c7157,0b4b9546fe8eb1b96d4b71275b8eb90eb2874f4f..e511a4a20e05d267d9be054b98b0d3b2d82b9e33
@@@ -1,7 -1,9 +1,7 @@@
  /* src/vm/jit/codegen-common.c - architecture independent code generator stuff
  
 -   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
 -   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
 -   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
 -   J. Wenninger, Institut f. Computersprachen - TU Wien
 +   Copyright (C) 1996-2005, 2006, 2007, 2008
 +   CACAOVM - Verein zu Foerderung der freien virtuellen Machine CACAO
  
     This file is part of CACAO.
  
@@@ -1065,11 -1067,11 +1065,11 @@@ u1 *codegen_generate_stub_compiler(meth
        codegendata *cd;
        ptrint      *d;                     /* pointer to data memory             */
        u1          *c;                     /* pointer to code memory             */
 -      s4           dumpsize;
 +      int32_t      dumpmarker;
  
        /* mark dump memory */
  
 -      dumpsize = dump_size();
 +      DMARKER;
  
        /* allocate required data structures */
  
  
        /* release dump memory */
  
 -      dump_release(dumpsize);
 +      DRELEASE;
  
        /* return native stub code */
  
@@@ -1171,11 -1173,11 +1171,11 @@@ void codegen_generate_stub_builtin(meth
        jitdata  *jd;
        codeinfo *code;
        int       skipparams;
 -      s4        dumpsize;
 +      int32_t   dumpmarker;
  
        /* mark dump memory */
  
 -      dumpsize = dump_size();
 +      DMARKER;
  
        /* Create JIT data structure. */
  
  
        /* release memory */
  
 -      dump_release(dumpsize);
 +      DRELEASE;
  }
  
  
@@@ -1257,14 -1259,14 +1257,14 @@@ codeinfo *codegen_generate_stub_native(
  {
        jitdata     *jd;
        codeinfo    *code;
 -      s4           dumpsize;
        methoddesc  *md;
        methoddesc  *nmd;       
        int          skipparams;
 +      int32_t      dumpmarker;
  
        /* mark dump memory */
  
 -      dumpsize = dump_size();
 +      DMARKER;
  
        /* Create JIT data structure. */
  
  
        /* release memory */
  
 -      dump_release(dumpsize);
 +      DRELEASE;
  
        /* return native stub code */
  
@@@ -1776,7 -1778,7 +1776,7 @@@ void codegen_emit_phi_moves(jitdata *jd
                        if (compileverbose)
                                printf("...returning - phi lifetimes where joined\n");
  #endif
-                       return;
+                       continue;
                }
  
                if (s->type == -1) {
                        if (compileverbose)
                                printf("...returning - phi lifetimes where joined\n");
  #endif
-                       return;
+                       continue;
                }
  
                tmp_i.opc = 0;
diff --combined src/vm/jit/jit.c
index 178884e6142bdf7b2af7ebcb76a1cbc5553c9b28,b98d891ec3db29fe85d01265f8030d03274f7023..84e6fc5424aaa645d93ee7bc06cba3f79633e40d
@@@ -1,7 -1,9 +1,7 @@@
  /* src/vm/jit/jit.c - calls the code generation functions
  
 -   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
 -   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
 -   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
 -   J. Wenninger, Institut f. Computersprachen - TU Wien
 +   Copyright (C) 1996-2005, 2006, 2007, 2008
 +   CACAOVM - Verein zu Foerderung der freien virtuellen Machine CACAO
  
     This file is part of CACAO.
  
@@@ -1029,7 -1031,7 +1029,7 @@@ u1 *jit_compile(methodinfo *m
  {
        u1      *r;
        jitdata *jd;
 -      s4       dumpsize;
 +      int32_t  dumpmarker;
  
        STATISTICS(count_jit_calls++);
  
  
        /* mark start of dump memory area */
  
 -      dumpsize = dump_size();
 +      DMARKER;
  
        /* create jitdata structure */
  
  
        /* release dump area */
  
 -      dump_release(dumpsize);
 +      DRELEASE;
  
  #if defined(ENABLE_STATISTICS)
        /* measure time */
@@@ -1193,7 -1195,7 +1193,7 @@@ u1 *jit_recompile(methodinfo *m
        u1      *r;
        jitdata *jd;
        u1       optlevel;
 -      s4       dumpsize;
 +      int32_t  dumpmarker;
  
        /* check for max. optimization level */
  
  
        /* mark start of dump memory area */
  
 -      dumpsize = dump_size();
 +      DMARKER;
  
        /* create jitdata structure */
  
  
        /* release dump area */
  
 -      dump_release(dumpsize);
 +      DRELEASE;
  
  #if defined(ENABLE_STATISTICS)
        /* measure time */
@@@ -1462,7 -1464,7 +1462,7 @@@ static u1 *jit_compile_intern(jitdata *
  #endif
  
  #if defined(ENABLE_PYTHON)
-               if (!pythonpass_run(jd, "langauer_tarjan", "langauer_tarjan")) {
+               if (!pythonpass_run(jd, "langauer_tarjan", "main")) {
                        /*return NULL;*/
                }
  #endif
                /* allocate registers */
                if ((opt_lsra) && (jd->exceptiontablelength == 0)) {
                        jd->ls = DNEW(lsradata);
+                       ssa(jd);
                        lsra(jd);
  
                        STATISTICS(count_methods_allocated_by_lsra++);
diff --combined src/vm/jit/show.c
index d8450409b451863697ae45bcee7608851e41967f,3c75bf635038c34efd3355612d02eb2c7f2aa65d..0a51a665ec8d3f442808c7a33b5b7ccced3da06d
@@@ -1,7 -1,9 +1,7 @@@
  /* src/vm/jit/show.c - showing the intermediate representation
  
 -   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
 -   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
 -   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
 -   J. Wenninger, Institut f. Computersprachen - TU Wien
 +   Copyright (C) 1996-2005, 2006, 2007, 2008
 +   CACAOVM - Verein zu Foerderung der freien virtuellen Machine CACAO
  
     This file is part of CACAO.
  
@@@ -524,6 -526,15 +524,15 @@@ void show_basicblock(jitdata *jd, basic
  
                printf("\n");
  
+               if (irstage >= SHOW_CFG) {
+                       printf("succs: %d [ ", bptr->successorcount);
+                       for (i = 0; i < bptr->successorcount; i++)
+                               printf("%d ", bptr->successors[i]->nr);
+                       printf("]\n");
+               }
                if (irstage >= SHOW_STACK) {
                        printf("IN:  ");
                        show_variable_array(jd, bptr->invars, bptr->indepth, irstage);
@@@ -1524,7 -1535,7 +1533,7 @@@ void show_filters_apply(methodinfo *m) 
        int res;
        char *method_name;
        s4 len;
 -      s4 dumpsize;
 +      int32_t dumpmarker;
  
        /* compose full name of method */
  
                utf_bytes(m->descriptor) +
                1;
  
 -      dumpsize = dump_size(); /* allocate memory */
 +      DMARKER;
  
        method_name = DMNEW(char, len);
  
  
        /* release memory */
  
 -      dump_release(dumpsize); 
 -
 +      DRELEASE; 
  }
  
  #define STATE_IS_INITIAL() ((FILTERVERBOSECALLCTR[0] == 0) && (FILTERVERBOSECALLCTR[1] == 0))
diff --combined src/vm/vm.c
index 1e9b11d644fa132944d138c6f354623a45b45820,f2b8d1e91374926c7531c4fcdf9b9777b3d8b159..db6f7ae56b245e97e7c14d02aef0e3135d4324f2
@@@ -1,7 -1,9 +1,7 @@@
  /* src/vm/vm.c - VM startup and shutdown functions
  
 -   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
 -   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
 -   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
 -   J. Wenninger, Institut f. Computersprachen - TU Wien
 +   Copyright (C) 1996-2005, 2006, 2007, 2008
 +   CACAOVM - Verein zu Foerderung der freien virtuellen Machine CACAO
  
     This file is part of CACAO.
  
@@@ -345,9 -347,12 +345,12 @@@ opt_struct opts[] = 
  #if defined(ENABLE_IFCONV)
        { "ifconv",            false, OPT_IFCONV },
  #endif
- #if defined(ENABLE_LSRA) || defined(ENABLE_SSA)
+ #if defined(ENABLE_LSRA)
        { "lsra",              false, OPT_LSRA },
  #endif
+ #if  defined(ENABLE_SSA)
+       { "lsra",              true, OPT_LSRA },
+ #endif
  
  #if defined(ENABLE_INTRP)
        /* interpreter options */
@@@ -584,7 -589,9 +587,9 @@@ static void XXusage(void
        puts("    -lsra                    use linear scan register allocation");
  #endif
  #if defined(ENABLE_SSA)
-       puts("    -lsra                    use linear scan register allocation (with SSA)");
+       puts("    -lsra:...                use linear scan register allocation (with SSA)");
+       puts("       (d)ead code elimination");
+       puts("       (c)opy propagation");
  #endif
  #if defined(ENABLE_DEBUG_FILTER)
        puts("    -XXfi <regex>            begin of dynamic scope for verbosecall filter");
@@@ -1248,9 -1255,31 +1253,31 @@@ bool vm_create(JavaVMInitArgs *vm_args
                        break;
  #endif
  
- #if defined(ENABLE_LSRA) || defined(ENABLE_SSA)
+ #if defined(ENABLE_LSRA)
+               case OPT_LSRA:
+                       opt_lsra = true;
+                       break;
+ #endif
+ #if  defined(ENABLE_SSA)
                case OPT_LSRA:
                        opt_lsra = true;
+                       for (i = 0; i < strlen(opt_arg); i++) {         
+                               switch (opt_arg[i]) {
+                               case 'c':
+                                       opt_ssa_cp = true;
+                                       break;
+                               case 'd':
+                                       opt_ssa_dce = true;
+                                       break;
+                               case ':':
+                                       break;
+                               default:
+                                       usage();
+                               }
+                       }
                        break;
  #endif
  
@@@ -2385,21 -2414,21 +2412,21 @@@ VM_CALL_METHOD(_double, double
  type vm_call_method##name##_valist(methodinfo *m, java_handle_t *o,     \
                                                                   va_list ap)                          \
  {                                                                       \
 -      int32_t   dumpsize;                                                 \
        uint64_t *array;                                                    \
        type      value;                                                    \
 +      int32_t   dumpmarker;                                               \
                                                                          \
        if (m->code == NULL)                                                \
                if (!jit_compile(m))                                            \
                        return 0;                                                   \
                                                                          \
        THREAD_NATIVEWORLD_EXIT;                                            \
 +      DMARKER;                                                            \
                                                                          \
 -      dumpsize = dump_size();                                             \
        array = argument_vmarray_from_valist(m, o, ap);                     \
        value = vm_call##name##_array(m, array);                            \
 -      dump_release(dumpsize);                                             \
                                                                          \
 +      DRELEASE;                                                           \
        THREAD_NATIVEWORLD_ENTER;                                           \
                                                                          \
        return value;                                                       \
@@@ -2423,21 -2452,21 +2450,21 @@@ VM_CALL_METHOD_VALIST(_double, double
  type vm_call_method##name##_jvalue(methodinfo *m, java_handle_t *o,     \
                                                           const jvalue *args)                  \
  {                                                                       \
 -      int32_t   dumpsize;                                                 \
        uint64_t *array;                                                    \
        type      value;                                                    \
 +      int32_t   dumpmarker;                                               \
                                                                          \
        if (m->code == NULL)                                                \
                if (!jit_compile(m))                                            \
                        return 0;                                                   \
                                                                          \
        THREAD_NATIVEWORLD_EXIT;                                            \
 +      DMARKER;                                                            \
                                                                          \
 -      dumpsize = dump_size();                                             \
        array = argument_vmarray_from_jvalue(m, o, args);                   \
        value = vm_call##name##_array(m, array);                            \
 -      dump_release(dumpsize);                                             \
                                                                          \
 +      DRELEASE;                                                           \
        THREAD_NATIVEWORLD_ENTER;                                           \
                                                                          \
        return value;                                                       \
@@@ -2460,11 -2489,11 +2487,11 @@@ VM_CALL_METHOD_JVALUE(_double, double
  java_handle_t *vm_call_method_objectarray(methodinfo *m, java_handle_t *o,
                                                                                  java_handle_objectarray_t *params)
  {
 -      int32_t        dumpsize;
        uint64_t      *array;
        java_handle_t *xptr;
        java_handle_t *ro;
        imm_union      value;
 +      int32_t        dumpmarker;
  
        /* compile methods which are not yet compiled */
  
  
        /* mark start of dump memory area */
  
 -      dumpsize = dump_size();
 +      DMARKER;
  
        /* Fill the argument array from a object-array. */
  
        if (array == NULL) {
                /* release dump area */
  
 -              dump_release(dumpsize);
 +              DRELEASE;
  
                /* enter the nativeworld again */
  
  
        /* release dump area */
  
 -      dump_release(dumpsize);
 +      DRELEASE;
  
        /* enter the nativeworld again */