help with fusing multiple dependent ops in gcc combine pass

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 I received very helpful comments previously
(https://gcc.gnu.org/ml/gcc-help/2014-08/msg00010.html). And I could
successfully fuse dependent ops like following :

...
r1 = (r1) op1 (const)
...
...
r1 = (r1) op2 (r2)
...
...
r3 = op3 (r1)
...

using a define_insn pattern to a new op "testnew36".

Now, How can I fuse the following stream of ops :

...
op1
...
op2 (consumes result of op1)
...
op3 (consumes result of op2)
...
op4 (consumes result of op2)
...

to the following :

...
testnew36
...
testnew40

The pertinent pattern seen in .combine file is a parallel expression :

(parallel [
        (set (reg:DI 256 [ *_15 ])
            (op3:DI (op2:DI (op1:DI (reg:DI 202 [ D.1563 ])
                        (const_int 4 [0x4]))
                    (reg:DI 242 [ inbuf ])) ))
        (set (reg:DI 205 [ D.1566 ])
            (op2:DI (op1:DI (reg:DI 202 [ D.1563 ])
                    (const_int 4 [0x4]))
                (reg:DI 242 [ inbuf ])))
    ])

Is the following the correct way to do combine the four ops :
1. define a new define_insn "*matchtestnewparallel" matching the above
parallel expression which substitutes the first set expression above
(op1+op2+op3 combination) with testnew36 and leaves the second set
expression (op1+op2) as is
2. define a new define_insn "*testnew40" pattern that matches op1 +
op2 + op4 combination.
(I already have a define_insn "*testnew36" pattern that matches
op1+op2+op3 combo.

I have done what I have just described above, but I am not quite
seeing what is desirable. The order in which I defined them in the md
file is - "*matchtestnewparallel", "*testnew40", "*testnew36". Either
I am not doing it right or this is just not the right way to do it.
Can you give me some hints please ?

Thanks




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux