Hi Paolo, thanks for the tip.

I tried it and things look different now, but I still didn't achieve
the desired efficiency. Now after subreg lowering the code looks like:

(insn 6 29 7 (parallel [
            (set (subreg:SI (reg/v:DI 133 [ tmp ]) 0)
                (unspec:SI [ (reg/f:SI 135)] 12036))
            (set (subreg:SI (reg/v:DI 133 [ tmp ]) 4)
                (unspec:SI [(reg/f:SI 135)] 12037))
        ]))
(insn 7 6 11  (set (reg:SI 139)
        (subreg:SI (reg/v:DI 133 [ tmp ]) 4)) )
(insn 11 7 12(set (reg:SI 138 [ tmp ]
        (subreg:SI (reg/v:DI 133 [ tmp ]) 0)) )

The copy operations are still there, and, unfortunately, they are not removed
in later stages.

I am now trying to catch this construct with peephole2 and
do the removal there. I don't like this solution though, as the scheduler might
reorder insns.   I wonder if  splitter  might help in this, as it runs
before the scheduler?
In your case, were the moves generated at all ? If yes, at what stage were they
removed?

I also think, if I want the regs to be non-consecutive, the insn with
DI as an operand
shouldn't appear in the final stages, because the DI operand  would
require consecutive regs. Therefore I try to substitute originally
expanded insn in the peephole2 (or in split?) with a similar one with
two SI destination operands instead of
DI subregs. Does it sound logical or I am wrong in my assumption ?

Dmitry

Ps. Ian, i use version 4.3.0


On 2/7/08, Paolo Bonzini <[EMAIL PROTECTED]> wrote:
>
> >  In the response of Paolo I also don't understand how the DI pseudo could be
> >  mapped on two consecutive SI regs. I think gcc always  will map a multiword
> > pseudo on consecutive word-size regs. Am I wrong here ?
>
> Oops, I forgot a part.  In the RTL description don't write
>
>   [(set (match_operand:DI 0 "register_operand")
>         (unspec [...] SUPER_LD32))]
>
> but
>
>   [(set (subreg:SI (match_operand:DI 0 "register_operand") 0)
>         (unspec [...] SUPER_LD32_LO))
>    (set (subreg:SI (match_operand:DI 0 "register_operand") 4)
>         (unspec [...] SUPER_LD32_HI))]
>
> Paolo
>

Reply via email to