Paolo Bonzini <[EMAIL PROTECTED]> wrote on 22/08/2005 10:10:40:
> > > I tried to use simplify_replace_rtx to replace any use of (reg r)
with[in]
> > > the right-hand-side of the extension and simplify the result.
>
> If he want to replace uses within the RHS of the extension, he should
> pass SET_SRC (pat). He may as well want to handle parallels, in which
> case he should write a new function similar to this:
I think you misunderstood my original purpose. I did mean [with]
and not [in].
Let me explain again.
I have these two instructions:
(insn 1 0 2 0 (set (reg/v:Xmode r)
(sign_extend:Xmode (op:Ymode (...))))
(insn 2 1 3 0 (set (LHS) (RHS)))
where:
1. Xmode > Ymode
2. RHS and/or LHS may contain:
(subreg:Ymode (reg/v:Xmode r) lowpart) and/or (reg/v:Xmode r).
Now I want to replace every *use* of (reg r) in insn 2 with the rhs of
insn 1 and simplify the result. This is way the replacement may happen
in the LHS of insn 2.
Note that I don't want to replace any *def* and uses may appear in the
LHS.
My plan was to use: replace_regs () to replace every use of (reg r)
with the a new pseudo register (because this is the only function that
I found that separates the uses from the defs) and then use
simplifiy_replace_rtx () to replace that new pseudo register with the rhs
of insn 1 and simplify.
To make things even more complicated - insn 2 may be PARALLEL.
Maybe I should use simplify_rtx (replace_rtx (..))?
But it seem to me that simplify_rtx () doesn't deal with SET either.
Do you see a better way?
Thanks,
Leehod.