| 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. |