harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexei Fedotov (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-3067) [drlvm][verifier] wide instructions
Date Sun, 28 Jan 2007 13:30:49 GMT
[drlvm][verifier] wide instructions
-----------------------------------

                 Key: HARMONY-3067
                 URL: https://issues.apache.org/jira/browse/HARMONY-3067
             Project: Harmony
          Issue Type: Bug
          Components: DRLVM
            Reporter: Alexei Fedotov


=== Description ===

The patch adds checks of two constraints, fixes  
exception data flow issue and made arrangements  
for further subroutine inlining implementation.
 
While adding a number of new checks, the patch  
reduces the total legth of the code by 75 lines  
and reduces verifier memory usage by removing  
structures which are not used. At least  
removing dead data just improves readability.

=== Testing ===

Before the patch the test WideGoto.class hangs  
on verification stage.

After the patch a verifier correctly reports:

Uncaught exception in main:
java.lang.VerifyError: (class: WideGoto,  
method: main([Ljava/lang/String;)V) wide should  
be followed by iload, fload, aload, lload,  
dload, istore, fstore, astore, lstore, dstore,  
ret or iinc


The patch passes acceptance tests.

Both patches and non-patched versions fail on  
the same thread manager assertion when trying  
to run eclipse.

=== Changes ===

Below goes a detailed list of changes:

   * Added verification of wide instructions.  
Added verification of the total bytecode  
length.

   * Added a new file for subroutine  
implementation, added a reference to the file  
to MSVC project. Added design of subroutine  
inlining algorithm.

   * Added type flags for graph nodes and an  
appropriate constructor to create nodes of  
different types. Added an assertion to get  
instruction range only for  
VF_TYPE_NODE_CODE_RANGE nodes.

   * Simplified checks of a node type removing  
access to a last code instruction of a  
node. Removed artificial instructions for  
handler nodes and start/end nodes.

   * Removed service functions to work with  
artificial instructions. Moved instruction  
stack maps to the corresponding node maps.  
Removed second parsing of method signature when  
creating method IN and OUT maps.

   * Two times decreased a size of bytecode  
annotation structures and completely removed  
offset structures for such structures. Added  
annotations to vf_Context.

   * Removed a dynamic vector of exception  
handlers for each instruction.

   * Removed debug flag macros which are no  
longer used in the current version.

   * Simplified edge pre-counting algorithm by  
noticing that each basic block except the last  
produces at least one OUT edge, so we just need  
to make action about those blocks which branch  
execution. Used local counters in loops instead  
of one global counter to foster compiler  
optimizations.

   * Made vf_Graph class getters inline putting  
their definitions in the header file. Added  
GetEdgeCount getter. Removed unused SetNode  
method (should be added CopyNode instead for  
subroutine inlining).

   * Added a new reporter macro to add class  
and method names to any report.

   * Adopted debug facilities to work with new  
data structures.

   * When parsing a class file or getting  
exception information used local unsigned short  
type instead of reused and casted int.


=== Formatting ===

I changed formatting of the code I touched.

   * Fixed English and removed excessive "This  
function ..." in documentation. Added  
Doxygen style documentation using @param and  
@return tags for new functions.

   * Renamed "deep" -> "depth" and "begin" ->  
"start" in variable and function names using  
input from a focus group from my cubicle. 

   * Started using class library C style for  
brackets and spaces in function names.  
Consistently followed C style for local  
variable names and functions (low caps with  
underscore). Left Windows/JNI style (camel  
style with the first letter in method name  
uppercased) for C++ constructs.

   * To my ear getting a number of nodes  
doesn't imply that we are getting all nodes. So  
I renamed GetNodeNumber to GetNodeCount.

   * Reduced repeated long indirect pointer  
chains context->a->b[i]->c caching in a local  
variable.

   * Reformat long lines to fit 72 symbols.



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message