blob: 7da5cf391ac82eb60d71fc5bbae58ac7096e2eb5 (
plain)
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
|
* Need to use process_bb_node_lives rather than our own conflict
building routines. Our current approach is slow (not using DF) and
naive/inaccurate. Our current approach also doesn't get hard register
conflicts which are copied from the original pseudo (which is
horribly conservative and the cause of most of our regressions).
* In general, we need to be using DF rather than note_{stores,uses}.
* Need to rewrite the local allocator/spiller.
* How to tune when we're choosing between replacing an operand with a
MEM or emitting distinct load/store insns.
* Should we be working with EBBs and reverse EBBs?
* Is it really necessary to remove the conflicts when we localize a
pseudo? We might get away with just ignoring it. However, we're
probably still going to need the conflict removal bits so we can
"spill" by clearing key conflicts and calling back into IRA.
* ira-costs.c has a twiddle to slightly prefer aligned groups of hard
regs. This should generally help, but needs serious benchmarking.
* Put all the reg_XXX bits into a structure and expand the structure
rather than expanding each array individually. Also helps as we can
dump everything we know about a reg with a single gdb statement rather
than a dozen of them.
* Break ira_reassign_pseudos into two parts, once which just assigns
the given pseudo array the other which does that plus reassignment of
conflicting pseudos. The former is all we care about for ira-reload.c.
* SUBREG handling is probably not correct and certainly not efficient
yet. We want to be able to track which subregs are live and emit code
appropriately. We also want to narrow operands when opportunities
present themselves. Also would like to identify these at kill the
first statement and avoid unncessary conflicts
(set (reg) (whatever))
(set (subreg (reg 0)) (something))
(set (subreg (reg 4)) (something else))
* Need to find an efficient way to determine range transparency.
* Need to find a way to update ranges for newly created pseudos so
that slots can be shared more effectively.
|