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]

Optimisation pass for dual pack architectures



I would like to submit an optimisation pass for egcs that can be used
to pack pairs of instructions into a single parallel instruction.
[This code used to live in the C4x backend but I've hauled it out and
cleaned it up for more general consumption].

The most important optimisation involves packing a pair of
instructions with a data dependency that occur within a loop.  An
example of such a pair are the load and store instructions of a memory
copy or the multiply and add instructions of a dot-product operation.
Since the second instruction relies on the result of the first
instruction, it is necessary to unroll the loop by one iteration.

For example, a vector dot-product operation

   (repeat (N) [
       (set (reg r0) (mult (mem (post_inc ar0)) (mem (post_inc ar1))))
       (set (reg r1) (plus (reg r1) (reg r0)))])

is transformed into:

   (set (reg r0) (mult (mem (post_inc ar0)) (mem (post_inc ar1))))
   (repeat (N - 1) [
       (parallel [
           (set (reg r0) (mult (mem (post_inc ar0)) (mem (post_inc ar1))))
           (set (reg r1) (plus (reg r1) (reg r0)))])])
   (set (reg r1) (plus (reg r1) (reg r0)))


More details can be found at the head of the file multipack.c


Michael.

Fri Jan 22 22:41:01 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* multipack.c: New file.
	* rtl.h (multipack_instructions): Declare prototype.
	* toplev.c (rest_of_compilation): Use it if
	supported by target and flag_multipack_insns non-zero.
	(flag_multipack_insns, main): New variable.
	(f_options): New option -fmultipack-insns.
	* invoke.texi (-fmultipack-insns): New option description.
	* tm.texi (MULTIPACK_INSNS): Describe new macro.

begin 644 multipack.diff.gz
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
(_/8<@BF,````
`
end


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