This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[wwwdocs] Round 1 of cleaning up "old PROBLEMS"
- From: Steven Bosscher <stevenb at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sat, 13 Nov 2004 16:16:54 +0100
- Subject: [wwwdocs] Round 1 of cleaning up "old PROBLEMS"
- Organization: SUSE Labs
Hi,
Let's clean up some items, some of which just don't make sense without
more context, and some that were fixed long ago, from the old PROBLEMS
file which is now integrated in http://gcc.gnu.org/projects/index.html.
I'd like to remove the following items
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.
Apparently it actually does take dummies into account here (the stuff
in find_dummy_reload???).
10 (see patch)
The target for which this was a problem isn't mentioned, so it is
not even clear what the problem is. There is no way to check if
the problem still exists.
52 Reloading can look at how <code>reload_contents</code>
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.</li>
`grep -r "reload_contents" *' shows nothing.
65 Should loops that neither start nor end with a break be
rearranged to end with the last break?
With natural loop detection instead of syntactic loop note sugar,
this point doesn't make sense.
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.
From the "I do everything" school, just what we are trying to avoid.
This item basically seems to describe some stupid form of partial
redundancy elimination. We of course do that.
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.
Must be translated to english or be removed. What is "pea"??
93 If a pseudo doesn't get a hard reg everywhere, can it get
one during a loop?
Known as store motion. We do that.
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.
First of all this is not final's job. Second, final doesn't know
a thing about loops.
106 Aliasing may be impossible if data types of refs differ
and data type of containing objects also differ. (But check this wrt
unions.) This may now be covered by <code>-fstrict-aliasing</code>.
We handle this case.
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.
I can't find a similar comment in loop.c. But it probably doesn't
matter anyway because the tree loop optimizers should not have this
limitation, and in any case loop.c will itself go away soon now.
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
Say what?! I don't understand this one.
124 On the 386, bad code results from foo (bar()) when bar returns
a double.
GCC mainline gives this at "-O2 -fomit-frame-pointer".
subl $12, %esp
call bar
fstpl (%esp)
call foo
addl $12, %esp
ret
That is the best the compiler can do AFAICT.
OK?
Gr.
Steven
Index: index.html
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/projects/index.html,v
retrieving revision 1.48
diff -u -3 -p -r1.48 index.html
--- index.html 11 Nov 2004 11:55:56 -0000 1.48
+++ index.html 13 Nov 2004 15:13:46 -0000
@@ -745,28 +635,6 @@ anything applicable to current GCC (and
gcc-patches to remove such analysed entries from the list.</p>
<ol>
- <li value="3">When <code>find_reloads</code> 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.
-
- <p>I'm not sure this really happens any more. Doesn't it find all the
- dummies on both passes?</p></li>
-
- <li value="10">
- <pre>
- movl a3@,a0
- movl a3@(16),a1
- clrb a0@(a1:l)
- </pre>
- <p>is generated and may be worse than</p>
- <pre>
- movl a3@,a0
- addl a3@(16),a0
- clrb a0@
- </pre>
- <p>If ordering of operands is improved, many more such cases will be
- generated from typical array accesses.</p></li>
-
<li value="38">Hack <code>expand_mult</code> so that if there is no
same-modes multiply it will use a widening multiply and then truncate
rather than calling the library.</li>
@@ -781,11 +649,6 @@ gcc-patches to remove such analysed entr
computing the quotient alone does not necessarily give a
remainder--such as the 68020 for long operands.</li>
- <li value="52">Reloading can look at how <code>reload_contents</code>
- 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.</li>
-
<li value="63">Potential problem in <code>cc_status.value2</code>, if it
ever activates itself after a two-address subtraction (which currently
cannot happen). It is supposed to compare the current value of the
@@ -793,37 +656,12 @@ gcc-patches to remove such analysed entr
subtraction, equivalent to comparing the previous value of the
destination.</li>
- <li value="65">Should loops that neither start nor end with a break be
- rearranged to end with the last break?</li>
-
<li value="69">Define the floating point converting arithmetic
instructions for the 68881.</li>
- <li value="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.</li>
-
- <li value="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.</li>
-
- <li value="93">If a pseudo doesn't get a hard reg everywhere, can it get
- one during a loop?</li>
-
<li value="96">Can do SImode bitfield insns without reloading, but must
alter the operands in special ways.</li>
- <li value="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.</li>
-
- <li value="106">Aliasing may be impossible if data types of refs differ
- and data type of containing objects also differ. (But check this wrt
- unions.) This may now be covered by <code>-fstrict-aliasing</code>.</li>
-
<li value="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
@@ -853,24 +691,9 @@ gcc-patches to remove such analysed entr
equivalent to a memory location, it would be possible to detect this
and replace it with a simple memory reference.</li>
- <li value="121">Insns that store two values cannot be moved out of
- loops. The code in <code>scan_loop</code> doesn't even try to deal
- with them.</li>
-
<li value="122">When <code>insn-output.c</code> turns a bit-test into a
sign-test, it should see whether the condition code is already set up
with that sign.</li>
-
- <li value="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
- <code>expand_expr</code>.</li>
-
- <li value="124">On the 386, bad code results from <code>foo (bar
- ())</code> when <code>bar</code> returns a double, because the pseudo
- used fails to get preferenced into an fp reg because of the
- distinction between regs 8 and 9.</li>
</ol>
</body>