This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[wwwdocs] Round 1 of cleaning up "old PROBLEMS"


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>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]