comparison graal/GraalCompiler/src/com/sun/c1x/doc/performance.txt @ 2509:16b9a8b5ad39

Renamings Runtime=>GraalRuntime and Compiler=>GraalCompiler
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Wed, 27 Apr 2011 11:50:44 +0200
parents graal/Compiler/src/com/sun/c1x/doc/performance.txt@9ec15d6914ca
children
comparison
equal deleted inserted replaced
2508:fea94949e0a2 2509:16b9a8b5ad39
1 Issues that can be addressed for improving performance in C1X
2 ----------------------------------------------------------------
3
4 - indicates not done
5 * indicates done
6
7 Backend:
8 - better handling of constants, especially immediates
9 - (non XIR) checkcast, instanceof: use nullity
10 - (non XIR) checkcast, instanceof: emit fastpath direct compare
11 - use LEA instruction on x86
12 - recognize pointer arithmetic addressing modes
13 - recognize multiply by 3, 5, 9 and emit lea rk, [rs, rs*2], etc
14 - Maxine XIR: make direct runtime calls instead of through global stub
15 - Maxine XIR: implement inline allocation
16 - Maxine XIR: implement biased locking fastpath
17 - Maxine XIR: faster subtype checks for classes, leaves
18 - Maxine XIR: make use of XirSite nullity, range check information
19 - better handling of tableswitch bytecode
20 - better handling of two operand LIR form
21 - Make the following bytecode implementations inline:
22 - f2i f2l f2d d2i d2l d2f (SSE2)
23 * lrem ldiv (64 bit)
24 - fneg dneg
25 - Make the following bytecode implementations global stubs:
26 - frem drem
27 - Global stubs: use EAX for return value as normal instead of [rsp - 16]
28 - Emit direct call to runtime for new instance, monitorenter, monitorexit
29
30 * XIR: expose nullity, range checkness across XIR interface
31 - XIR: make use of CSE'd array length
32 - XIR: generate special if-instanceof XIR variant with label parameters
33 - Optimize special cases of bytecodes:
34 - (MIN_INT / -1) in IDIV,IREM
35 - (MIN_LONG / -1) in LDIV,LREM
36 - (-infinity, Nan, +infinity) in F2I, F2L, D2I, D2L
37
38
39 Frontend:
40 - Remove redundant null check branches in NullCheckEliminator
41 - XIR: implement HIR -> HIR xir translation
42 - Refactor exception edges to allow removal, optimization
43 - Implement typecast elimination
44 - Implement constant propagation
45 - Implement GVN of memory loads / stores
46 - Implement memory reordering
47 - Implement loop invariant code motion
48 - Optimize endianness conversions and endian-writes
49 (e.g. (x >> 24 & 0xff) | (....)) and a[0] = x >> 24 ...
50 - Finish loop peeling
51 - Implement loop unrolling
52 - Allow value numbering of constant loads
53 - Finish loop peeling
54 - Guarded and multiple inlining
55 - Maxine: speculative leaf class and leaf method assumption
56 - Maxine: adjust static / dynamic inlining heuristics
57 (e.g. static: trivial methods only in cold spots)
58 - Aggressive optimization of array copy
59
60 Compilation speed:
61 - Make special iterators for LIROperand input, temp, output
62 - Add analysisInfo field to Value and use in NullCheckEliminator
63 - Remove RiConstantPool, cpi from unresolved HIR instructions (move to RiField, RiMethod)
64 - Use BlockList instead of ArrayList<Block> where appropriate
65 - Use FrameState instead of ValueStack
66 - Remove exceptionHandlers, make DebugInfo hold FrameState, CiCodePos,
67 exception flags and exception handlers
68 - Clean up and simplify LIRInstruction constructor
69 - Create fewer LIRAddresses
70 - Simplify LIRGenerator logic (forcing of loading, etc)
71 - LIROperand: split into virtual register table?
72 - Cleanup assembler and remove dead code, useless assertions
73 - Chain assembler byte buffers and only assemble at the end
74 - Pick optimal initial assembler byte buffer size
75 - Pick good initial sizes for LinearScan data structures
76 - Remove unnecessary uses of ArrayList and replace with arrays or other list
77 - Use iteration over ArrayList instead of explicit loop
78 - Revisit manual editing / removal of items from ArrayList
79 - Remove non-XIR backend
80 - Pre-assemble XIR for backend
81
82 * Initialize compilation-unique instruction id's lazily with thread local compilation
83 * Remove dead LIROpcodes
84 * Remove dead code in LIRGenerator, X86LIRGenerator, LIRAssembler, X86LIRAssembler
85 (remove commented out code)