Mercurial > hg > graal-compiler
comparison graal/Compiler/src/com/sun/c1x/doc/performance.txt @ 2507:9ec15d6914ca
Pull over of compiler from maxine repository.
author | Thomas Wuerthinger <thomas@wuerthinger.net> |
---|---|
date | Wed, 27 Apr 2011 11:43:22 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2506:4a3bf8a5bf41 | 2507:9ec15d6914ca |
---|---|
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) |