* PROBLEMS: Remove.
From-SVN: r36869
This commit is contained in:
parent
bb12da9db1
commit
2f6256e7dc
@ -1,5 +1,7 @@
|
|||||||
2000-10-14 Joseph S. Myers <jsm28@cam.ac.uk>
|
2000-10-14 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||||
|
|
||||||
|
* PROBLEMS: Remove.
|
||||||
|
|
||||||
* gcc.texi (Contributing): Update.
|
* gcc.texi (Contributing): Update.
|
||||||
|
|
||||||
2000-10-13 Alexandre Oliva <aoliva@redhat.com>
|
2000-10-13 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
117
gcc/PROBLEMS
117
gcc/PROBLEMS
@ -1,117 +0,0 @@
|
|||||||
3. When find_reloads is used to count number of spills needed
|
|
||||||
it does not take into account the fact that a reload may
|
|
||||||
turn out to be a dummy.
|
|
||||||
|
|
||||||
I'm not sure this really happens any more. Doesn't it find
|
|
||||||
all the dummies on both passes?
|
|
||||||
|
|
||||||
10. movl a3@,a0
|
|
||||||
movl a3@(16),a1
|
|
||||||
clrb a0@(a1:l)
|
|
||||||
is generated and may be worse than
|
|
||||||
movl a3@,a0
|
|
||||||
addl a3@(16),a0
|
|
||||||
clrb a0@
|
|
||||||
If ordering of operands is improved, many more
|
|
||||||
such cases will be generated from typical array accesses.
|
|
||||||
|
|
||||||
38. Hack expand_mult so that if there is no same-modes multiply
|
|
||||||
it will use a widening multiply and then truncate rather than
|
|
||||||
calling the library.
|
|
||||||
|
|
||||||
39. Hack expanding of division to notice cases for
|
|
||||||
long -> short division.
|
|
||||||
|
|
||||||
40. Represent divide insns as (DIV:SI ...) followed by
|
|
||||||
a separate lowpart extract. Represent remainder insns as DIV:SI
|
|
||||||
followed by a separate highpart extract. Then cse can work on
|
|
||||||
the DIV:SI part. Problem is, this may not be desirable on machines
|
|
||||||
where computing the quotient alone does not necessarily give
|
|
||||||
a remainder--such as the 68020 for long operands.
|
|
||||||
|
|
||||||
52. Reloading can look at how reload_contents got set up.
|
|
||||||
If it was copied from a register, just reload from that register.
|
|
||||||
Otherwise, perhaps can change the previous insn to move the
|
|
||||||
data via the reload reg, thus avoiding one memory ref.
|
|
||||||
|
|
||||||
63. Potential problem in cc_status.value2, if it ever activates itself
|
|
||||||
after a two-address subtraction (which currently cannot happen).
|
|
||||||
It is supposed to compare the current value of the destination
|
|
||||||
but eliminating it would use the results of the subtraction, equivalent
|
|
||||||
to comparing the previous value of the destination.
|
|
||||||
|
|
||||||
65. Should loops that neither start nor end with a break
|
|
||||||
be rearranged to end with the last break?
|
|
||||||
|
|
||||||
69. Define the floating point converting arithmetic instructions
|
|
||||||
for the 68881.
|
|
||||||
|
|
||||||
74. Combine loop opt with cse opt in one pass. Do cse on each loop,
|
|
||||||
then loop opt on that loop, and go from innermost loops outward.
|
|
||||||
Make loop invariants available for cse at end of loop.
|
|
||||||
|
|
||||||
85. pea can force a value to be reloaded into an areg
|
|
||||||
which can make it worse than separate adding and pushing.
|
|
||||||
This can only happen for adding something within addql range
|
|
||||||
and it only loses if the qty becomes dead at that point
|
|
||||||
so it can be added to with no copying.
|
|
||||||
|
|
||||||
93. If a pseudo doesn't get a hard reg everywhere,
|
|
||||||
can it get one during a loop?
|
|
||||||
|
|
||||||
96. Can do SImode bitfield insns without reloading, but must
|
|
||||||
alter the operands in special ways.
|
|
||||||
|
|
||||||
99. final could check loop-entry branches to see if they
|
|
||||||
screw up deletion of a test instruction. If they do,
|
|
||||||
can put another test instruction before the branch and
|
|
||||||
make it conditional and redirect it.
|
|
||||||
|
|
||||||
106. Aliasing may be impossible if data types of refs differ
|
|
||||||
and data type of containing objects also differ.
|
|
||||||
(But check this wrt unions.)
|
|
||||||
|
|
||||||
108. Can speed up flow analysis by making a table saying which
|
|
||||||
register is set and which registers are used by each instruction that
|
|
||||||
only sets one register and only uses two. This way avoid the tree
|
|
||||||
walk for such instructions (most instructions).
|
|
||||||
|
|
||||||
109. It is desirable to avoid converting INDEX to SImode if a
|
|
||||||
narrower mode suffices, as HImode does on the 68000.
|
|
||||||
How can this be done?
|
|
||||||
|
|
||||||
110. Possible special combination pattern:
|
|
||||||
If the two operands to a comparison die there and both come from insns
|
|
||||||
that are identical except for replacing one operand with the other,
|
|
||||||
throw away those insns. Ok if insns being discarded are known 1 to 1.
|
|
||||||
An andl #1 after a seq is 1 to 1, but how should compiler know that?
|
|
||||||
|
|
||||||
112. Can convert float to unsigned int by subtracting a constant,
|
|
||||||
converting to signed int, and changing the sign bit.
|
|
||||||
|
|
||||||
117. Any number of slow zero-extensions in one loop, that have
|
|
||||||
their clr insns moved out of the loop, can share one register
|
|
||||||
if their original life spans are disjoint.
|
|
||||||
But it may be hard to be sure of this since
|
|
||||||
the life span data that regscan produces may be hard to interpret
|
|
||||||
validly or may be incorrect after cse.
|
|
||||||
|
|
||||||
118. In cse, when a bfext insn refers to a register, if the field
|
|
||||||
corresponds to a halfword or a byte and the register is equivalent
|
|
||||||
to a memory location, it would be possible to detect this and
|
|
||||||
replace it with a simple memory reference.
|
|
||||||
|
|
||||||
121. Insns that store two values cannot be moved out of loops.
|
|
||||||
The code in scan_loop doesn't even try to deal with them.
|
|
||||||
|
|
||||||
122. When insn-output.c turns a bit-test into a sign-test,
|
|
||||||
it should see whether the cc is already set up with that sign.
|
|
||||||
|
|
||||||
123. When a conditional expression is used as a function arg, it would
|
|
||||||
be faster (and in some cases shorter) to push each alternative rather
|
|
||||||
than compute in a register and push that. This would require
|
|
||||||
being able to specify "push this" as a target for expand_expr.
|
|
||||||
|
|
||||||
124. On the 386, bad code results from foo (bar ()) when bar
|
|
||||||
returns a double, because the pseudo used fails to get preferenced
|
|
||||||
into an fp reg because of the distinction between regs 8 and 9.
|
|
Loading…
Reference in New Issue
Block a user