File: TODO

package info (click to toggle)
erlang 1%3A17.3-dfsg-4%2Bdeb8u2
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 173,700 kB
  • sloc: erlang: 1,354,179; xml: 365,926; ansic: 325,720; cpp: 50,390; makefile: 23,663; java: 10,540; sh: 10,013; lisp: 8,056; python: 4,826; pascal: 3,263; asm: 2,904; perl: 2,853; tcl: 245; sed: 86
file content (130 lines) | stat: -rw-r--r-- 3,888 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
Bugfix
======
 P->current (Fix observable behaviour?)
 New calling convention for guard bifs (Recognize at load time).
 Long branches:
   timer:tc(hipe,c,[megaco_text_parser,[{timeout,infinity}]]).
   {4801210531,
     {error,[{problem,too_long_branch},{address,3381732},{length,-828622}]}}

Performance
===========

 Better handling of multimove in regalloc.
 Faster closure creation. (Can static fields be preallocated?)
 Expand pseudo-ops before scheduler (SPARC)
 Stack maps for SPARC + Make frames in Sparc not in RTL.
 Coalesce spill locations.

Feature
=======

 Stack traces from stack maps.

Cleanup
=======

 Speedup renaming and other bottlenecks in the compiler.
 Only calls with fail label should end basic blocks.
 Remove fail-entry-points from RTL (sparc/x86). 
 Cleanup hipe_*_registers.erl and interface/rules with regalloc.
 HiPE in bootstrap.
 Cleanup and merge loaders. (Better handling of data.) 	
 Re-examine switching code.

Extensions
==========

 Design strategy for finding all processes holding a certain closure. 
 Design strategy for native code unloading.
 mbufs: In guards -> throw away, in bifs -> trigger special GC. (fix for native.)
 Unified heap + process optimization (+ PE).
 Incremental GC.


Old list compiled by Thomas Lindgren (needs cleaning up)
========================================================

<h1>Experimental implementations</h1>
<h2>RTL</h2>
<UL>
  <LI> Algebraiska frenklingar av uttryck (ex. reducera integer multiply,
      ta bort addition med 0, etc)
  <LI> Partial redundancy elimination 
</UL>

<h1>Unimplemented optimizations</h1>

<H2>Erlang/Core source-level-optimizations</H2>
<UL>
  <LI> "Context compilation"
  <LI> CDR-kodning
  <LI> List reuse
  <LI> Compilation by transformation
</UL>

<H2>Icode-optimizations</H2>
<UL>
  <LI> Convertion to loops from recursive programs
  <LI> Dominatorer
      (<a href="./thomasl/icode/dominators.erl">lngsamma</a>, snabba)
</UL>

<H2>RTL-optimizations</H2>
<UL>
  <LI> Common subexpression elimination
  <LI> Ta bort redundanta tester globalt (ex. upprepade typtester)
  <LI> Ordna om hopp (ex. byt ordning p nil/cons-tester)
  <LI> Goto eliminering (= expandera uncond. jumps m. knd mltavla)
  <LI> Save/restore-placering: datafldesanalys, interaktion m. catch-frames
  <LI> Loop optimeringar
      <UL>
	<LI> Dominatorer (se dominatorer fr icode)
	<LI> Unrolling
	<LI> Invariant expression removal
      </UL>
  <LI> Partial redundancy elimination by lazy code motion
  <LI> Partially dead code
</UL>

<H2>Sparc-optimizations</H2>
<UL>
  <LI> Global register allocation
      <UL>
	<LI> <a href="./thomasl/regalloc/regalloc.erl">
	    Pessimistisk frgning</a>
	<LI> Optimistisk frgning (kan sls p i samma fil som pessimistisk
	    frgning ovan).
	<LI> Bttre berkning av spillkostnader
	<LI> Renaming
	<LI> Callee-saves register
	<LI> Live-range splitting
      </UL>
  <LI> Instruktionsschedulering
      <UL>
	<LI> Branch delay slot scheduling
	<LI> Load delay slot scheduling
	<LI> Spekulativa loads med lduwa
	<LI> Kollapsa serier av tester med bpr
	<LI> Begrnsad predicated execution med movcc
      </UL>
  <LI> Kodlayout: statiska frutsgelser om riktning av hopp,
      layout, stta branch prediction bits i hopp, etc.
  <LI> Prefetching av kod med SparcV9:s bpn.
</UL>

<H2>Other optimizations</H2>

Profile driven optimizations.
<UL>
  <LI> Utplacering av rknare i CFG:er (per block, per bge)
  <LI> Statiska metoder att uppskatta exekveringstid (inom och mellan proc.)
  <LI> Feedback till program, annotering av CFG:er med profileringsinfo.
  <LI> Kodlayout med profileringsinfo.
  <LI> Skapa superblock
  <LI> Skapa hyperblock
  <LI> Plocka fram heta block, skapa en 'het' sub-CFG som hoppar
      till den kalla huvud-CFG:n vid behov.
  <LI> Optimering av het CFG, kodfrflyttning frn het till kall CFG.
  <LI> Spawn-time specialization
</UL>