comparison ProblemsIdeas.txt @ 3227:8793d44991fd

Added Verify option to be able to diable graph verification, ideal graph printing now also print string value for colors, removed redundant DCE/Canon phases
author Gilles Duboscq <gilles.duboscq@oracle.com>
date Wed, 20 Jul 2011 18:49:19 +0200
parents 7610d0b83fd1
children 4a6bda6cfe28
comparison
equal deleted inserted replaced
3225:7610d0b83fd1 3227:8793d44991fd
29 public void foo(int a, int b, boolean c) { 29 public void foo(int a, int b, boolean c) {
30 // ... 30 // ...
31 } 31 }
32 32
33 Here invoke 1 and 2 should always be inlined regardless of the size of the inlined graph/method size and without increasing the inlining depth 33 Here invoke 1 and 2 should always be inlined regardless of the size of the inlined graph/method size and without increasing the inlining depth
34 specializations should always be inlined if we are in a trivial method, not only he methods with only one invoke, we shoudl also do it for exemple for methods that invoke and only do simple operations on paramteres or result
34 35
35 36
36 * 'computable' slots in Framstates/debug info 37 * 'computable' slots in Framstates/debug info
37 38
38 Framestates/debug info will keep some values live for longer than they should because the values are needed for exemple for a very unlikely Deopt, this increases the pressure on register allocator. 39 Framestates/debug info will keep some values live for longer than they should because the values are needed for exemple for a very unlikely Deopt, this increases the pressure on register allocator.
47 Some optimizations may benefit from knowing is some assumption can be done. For exemple some loop optimisations may want to know the likelyhood of 2 values being aliased so that it can know if inserting a deopt-if-aliased guard is really beneficial. 48 Some optimizations may benefit from knowing is some assumption can be done. For exemple some loop optimisations may want to know the likelyhood of 2 values being aliased so that it can know if inserting a deopt-if-aliased guard is really beneficial.
48 This kind of information can not always be derived just from branch probabilities and it would be interesting to be able to ask the runtime to profile an expression, the simplest version would be to generate a boolean expression and get the probability for it being true. 49 This kind of information can not always be derived just from branch probabilities and it would be interesting to be able to ask the runtime to profile an expression, the simplest version would be to generate a boolean expression and get the probability for it being true.
49 This requires going through the compiler and asking for further profiling there are 2 main options here : 50 This requires going through the compiler and asking for further profiling there are 2 main options here :
50 - Reprofile the method in interpreter with the new profiled expression (we may modify the method bytecode to insert a conditional branch on the expression we want to profile, thus using the classical branch probability infrastructure) 51 - Reprofile the method in interpreter with the new profiled expression (we may modify the method bytecode to insert a conditional branch on the expression we want to profile, thus using the classical branch probability infrastructure)
51 - insert a profiling snippet in the compiled code and ask runtime to recompile the method after N executions 52 - insert a profiling snippet in the compiled code and ask runtime to recompile the method after N executions
53
54
55 * Transform some contiguous array accesses into phis when possible
56 Example : (most probably found in scientific code, for example relaxation code)
57
58 for (int i = 1; i < A.length - 1; i++) {
59 vm1 = A[i-1];
60 v0 = A[i];
61 vp1 = A[i+1];
62 // ...
63 }
64
65 should be transformed into
66 vm1 = A[0];
67 v0 = A[1];
68 for (int i = 0; i < A.length - 1; i++) {
69 vp1 = A[i+1];
70 // ...
71 vm1 = v0;
72 v0 = vp1;
73 }
74
75 This could be done in the context of a more advanced induction varaible analysis to be able to detect such access patterns. In this example we removed 2 array access (2 loads + 2 address computation + 2 bounds checks if not hoisted) while only adding 2 moves (phis)
76
77
78 * Implement array bounds check elimination