You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2006/12/19 11:02:24 UTC

svn commit: r488609 - in /harmony/enhanced/drlvm/trunk/vm/vmcore: include/cci.h include/compile.h src/jit/compile.cpp

Author: varlax
Date: Tue Dec 19 02:02:23 2006
New Revision: 488609

URL: http://svn.apache.org/viewvc?view=rev&rev=488609
Log:
Applied HARMONY-2670 [drlvm] Callee_Info and associated infrastructure is not used in DRLVM.
Tested on SUSE9.

Modified:
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/cci.h
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/compile.h
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/cci.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/cci.h?view=diff&rev=488609&r1=488608&r2=488609
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/cci.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/cci.h Tue Dec 19 02:02:23 2006
@@ -28,15 +28,6 @@
     char bytes[1];
 };
 
-// Each callee for a given code chunk can have multiple Callee_Info structures,
-// one for each call site in the caller.
-typedef struct Callee_Info {
-    void* caller_ip;        // the IP in the caller where the call was made
-    CodeChunkInfo* callee;  // which code chunk was called
-    uint64 num_calls;       // number of calls to that chunk
-} Callee_Info;
-
-#define NUM_STATIC_CALLEE_ENTRIES 8
 
 class CodeChunkInfo {
     friend struct Method;
@@ -64,9 +55,6 @@
     size_t get_code_block_size() const { return _code_block_size; }
     size_t get_code_block_alignment() const { return _code_block_alignment; }
 
-    unsigned get_num_callees() const { return _num_callees; }
-    Callee_Info* get_callees() const { return _callee_info; }
-
     int get_jit_index() const;
 
     // Note: _data_blocks can only be used for inline info for now
@@ -76,18 +64,12 @@
     unsigned get_num_target_exception_handlers() const;
     Target_Exception_Handler_Ptr get_target_exception_handler_info(unsigned eh_num) const;
 
-    void record_call_to_callee(CodeChunkInfo *callee, void *caller_return_ip);
-    uint64 num_calls_to(CodeChunkInfo* other_chunk) const;
-
     void print_name() const;
     void print_name(FILE* file) const;
-    void print_info(bool print_ellipses=false) const; // does not print callee information; see below
-    void print_callee_info() const; // prints the callee information; usually called after print_info()
+    void print_info(bool print_ellipses=false) const;
 
     static void initialize_code_chunk(CodeChunkInfo* chunk) {
         memset(chunk, 0, sizeof(CodeChunkInfo));
-        chunk->_callee_info = chunk->_static_callee_info;
-        chunk->_max_callees = NUM_STATIC_CALLEE_ENTRIES;
         chunk->_relocatable = TRUE;
     }
 
@@ -120,16 +102,6 @@
     // "Target" handlers
     unsigned _num_target_exception_handlers;
     Target_Exception_Handler_Ptr* _target_exception_handlers;
-
-    // This records for each callee, the number of times it was called
-    // by each call IP in the caller. That is, this is a list of Callee_Info
-    // structures, each giving a call IP
-    // Points to an array of max_callees Callee_Info entries for this code chunk
-    Callee_Info* _callee_info;
-    unsigned _num_callees;
-    unsigned _max_callees;
-    // Array used if a small number of callers to avoid mallocs & frees
-    Callee_Info _static_callee_info[NUM_STATIC_CALLEE_ENTRIES];
 
 public:
     unsigned _heat;

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/compile.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/compile.h?view=diff&rev=488609&r1=488608&r2=488609
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/compile.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/compile.h Tue Dec 19 02:02:23 2006
@@ -100,19 +100,6 @@
 bool needs_override(Method*);
 
 
-//
-// Method instrumentation support.
-//
-
-// Type of the instrumentation procedures called before invoking methods.
-typedef void (*MethodInstrumentationProc)(CodeChunkInfo *callee);
-
-// Interpose on calls to the specified method by calling the instr_proc.
-NativeCodePtr compile_do_instrumentation(CodeChunkInfo *callee, MethodInstrumentationProc instr_proc);
-
-// A MethodInstrumentationProc that records the number of calls from the caller code chunk to the callee.
-void count_method_calls(CodeChunkInfo *callee);
-
 struct DynamicCode
 {
     const char *name;

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp?view=diff&rev=488609&r1=488608&r2=488609
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp Tue Dec 19 02:02:23 2006
@@ -67,16 +67,6 @@
     return -999;
 } //get_index_of_jit
 
-////////////////////////////////////////////////////////////////////////
-// begin Forward declarations
-
-// A MethodInstrumentationProc that records calls in a call graph weighted by the call counts between methods.
-void count_method_calls(CodeChunkInfo* callee);
-
-// end Forward declarations
-////////////////////////////////////////////////////////////////////////
-
-
 
 ////////////////////////////////////////////////////////////////////////
 // begin CodeChunkInfo
@@ -90,9 +80,6 @@
     _relocatable = TRUE;
     _num_target_exception_handlers = 0;
     _target_exception_handlers     = NULL;
-    _callee_info = _static_callee_info;
-    _max_callees = NUM_STATIC_CALLEE_ENTRIES;
-    _num_callees = 0;
     _heat        = 0;
     _code_block     = NULL;
     _jit_info_block = NULL;
@@ -133,85 +120,6 @@
 }
 
 
-//void CodeChunkInfo::initialize_code_chunk(CodeChunkInfo *chunk)
-//{
-//    memset(chunk, 0, sizeof(CodeChunkInfo));
-//    chunk->_callee_info = chunk->_static_callee_info;
-//    chunk->_max_callees = NUM_STATIC_CALLEE_ENTRIES;
-//    chunk->_relocatable = TRUE;
-//} //CodeChunkInfo::initialize_code_chunk
-
-
-// 20040224 Support for recording which methods (actually, CodeChunkInfo's) call which other methods.
-void CodeChunkInfo::record_call_to_callee(CodeChunkInfo *callee, void *caller_ip)
-{
-    Global_Env * vm_env = VM_Global_State::loader_env;
-
-    assert(callee);
-    assert(caller_ip);
-
-    // The weighted call graph is undirected, so we register the call on both the caller_method and callee's list of calls.
-    // 20040422 No, the backedge isn't needed yet. Just record one direction now, and create the other direction later.
-
-    // Acquire a lock to ensure that growing the callee array is safe.
-    vm_env->p_method_call_lock->_lock();                    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-    // Is the <callee, caller_ip> pair already in our list?
-    unsigned i;
-    for (i = 0;  i < _num_callees;  i++) { 
-        Callee_Info *c = &(_callee_info[i]);
-        if ((c->callee == callee) && (c->caller_ip == caller_ip)) {
-            c->num_calls++;
-            vm_env->p_method_call_lock->_unlock();          // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-            return;
-        }
-    }
-
-    // Add a new Callee_Info entry to the array
-    assert(_callee_info != NULL);
-    assert(_num_callees <= _max_callees);
-    if (_num_callees == _max_callees) {
-        // grow the array of callee information
-        unsigned old_max = _max_callees;
-        unsigned new_max = (2 * _max_callees);
-        Callee_Info *new_array = (Callee_Info *)STD_MALLOC(new_max * sizeof(Callee_Info));
-        // Initialize the new array, with zeros at the end of the array
-        memcpy(new_array, _callee_info, (old_max * sizeof(Callee_Info)));
-        memset(&(new_array[old_max]), 0, (_max_callees * sizeof(Callee_Info)));
-        if (_callee_info != _static_callee_info) {
-            STD_FREE(_callee_info);
-        }
-        _callee_info = new_array;
-        _max_callees = new_max;
-        assert(_num_callees < _max_callees);
-    }
-
-    Callee_Info *c = &(_callee_info[_num_callees]);
-    c->callee    = callee;
-    c->caller_ip = caller_ip;
-    c->num_calls = 1;
-    _num_callees++;
-
-    vm_env->p_method_call_lock->_unlock();                  // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-} //CodeChunkInfo::record_call_to_callee
-
-
-uint64 CodeChunkInfo::num_calls_to(CodeChunkInfo *other_chunk) const
-{
-    assert(other_chunk);
-    for (unsigned i = 0;  i < _num_callees;  i++) {
-        Callee_Info *info = &(_callee_info[i]);
-        CodeChunkInfo *callee = info->callee;
-        assert(callee);
-        if (callee == other_chunk) {
-            return info->num_calls;
-        }
-    }
-    // the other chunk wasn't found on our callee list
-    return 0;
-} //CodeChunkInfo::num_calls_to
-
-
 void CodeChunkInfo::print_name() const
 {
     Method *meth = get_method();
@@ -241,24 +149,6 @@
     printf(", %d bytes%s\n", (unsigned)code_size, (print_ellipses? "..." : ""));
 } //CodeChunkInfo::print_info
 
-
-void CodeChunkInfo::print_callee_info() const
-{
-    for (unsigned i = 0;  i < _num_callees;  i++) {
-        Callee_Info *info = &(_callee_info[i]);
-        // Don't print the "back edges" (e.g., b calls a whenever a calls b) added to make the graph symmetric
-        if (info->caller_ip != NULL) {
-            CodeChunkInfo *callee = info->callee;
-            assert(callee);
-            unsigned call_offset = (unsigned)((char *)info->caller_ip - (char *)_code_block);
-            assert(call_offset < _code_block_size);
-            printf("%10" FMT64 "u calls at %u to ", info->num_calls, call_offset);
-            callee->print_name();
-            printf("\n");
-        }
-    }
-} //CodeChunkInfo::print_callee_info
-
 // end CodeChunkInfo
 ////////////////////////////////////////////////////////////////////////
 
@@ -876,59 +766,6 @@
     return NULL;
 } //compile_jit_a_method
 
-//////////////////////////////////////////////////////////////////////////
-// Instrumentation Stubs
-
-// 20040218 Interpose on calls to the specified method by first calling the specified 
-// instrumentation procedure. That procedure must not allocate memory from the collected heap
-// or throw exceptions (no m_to_n frame is pushed).
-NativeCodePtr compile_do_instrumentation(CodeChunkInfo *callee,
-                                         MethodInstrumentationProc instr_proc)
-{
-    assert(callee);
-    NativeCodePtr callee_addr = callee->get_code_block_addr();
-    assert(callee_addr);
-    LilCodeStub *cs = lil_parse_code_stub(
-        "entry 0:managed:arbitrary;"
-        "push_m2n 0, %0I;"
-        "out platform:pint:void;"
-        "o0=%1i;"
-        "call %2i;"       // call instrumentation procedure
-        "pop_m2n;"
-        "tailcall %3i;",  // call original entry point
-        FRAME_POPABLE, callee, instr_proc, lil_npc_to_fp(callee_addr));
-    assert(cs && lil_is_valid(cs));
-    // TODO: 2 & 3 parameters should be removed from the method signature
-    // since it makes sense for debugging only
-    NativeCodePtr addr = LilCodeGenerator::get_platform()->compile(cs);
-
-    DUMP_STUB(addr, "compile_do_instrumentation", lil_cs_get_code_size(cs));
-
-    lil_free_code_stub(cs);
-    return addr;
-} //compile_do_instrumentation
-
-
-// A MethodInstrumentationProc that records calls in a weighted method call graph, where each arc between 
-// a pair of methods has a weight equal to the call counts between those methods.
-void count_method_calls(CodeChunkInfo *callee)
-{
-    assert(callee);
-    // Get the most recent M2nFrame of the given thread
-    M2nFrame *caller_frame = m2n_get_last_frame();
-    assert(caller_frame);
-    // Get the return address from the preceeding managed frame
-    NativeCodePtr ret_ip = m2n_get_ip(caller_frame);
-    assert(ret_ip);
-
-    // Record call from caller to the callee.
-    Global_Env *env = VM_Global_State::loader_env;
-    CodeChunkInfo *caller = env->vm_methods->find(ret_ip);
-    if (caller != NULL) {
-        caller->record_call_to_callee(callee, ret_ip);
-    }
-} //count_method_calls
-
 
 // Adding dynamic generated code info to global list
 // Is used in JVMTI and native frames interface
@@ -960,5 +797,3 @@
         list = next;
     }
 }
-
-//////////////////////////////////////////////////////////////////////////