Frederic Riss <frederic.r...@gmail.com> writes:

> I tried to limit the lower-subreg pass to splitting integral types by
> constraining MODES_TIEABLE_P. This works for my simple test cases, but
> I get some testsuite regressions of the form:
>
> ../gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c:27:1: error:
> unrecognizable insn:
> (insn 45 2 46 2
> ../gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c:2 (set
> (subreg:SI (subreg:DF (reg/v:DI 136 [ d ]) 0) 0)
>         (const_int 2454267026 [0x92492492])) -1 (nil))
>
> My other option is to disable subreg-splitting on my port, but I
> wonder what adverse effects it could have on 64bits integral code.
>
> What is the correct way to deal with this?

Setting MODES_TIEABLE_P is the right way to control lower-subreg.  Your
problem lies elsewhere.  gcc requires that all simple moves be handled
by the backend one way or another, and the above insn is a simple move.
Why is it not recognized?  Is register 136 a pseudo or a hard register?
If a hard floating point register, how do you load a constant into a
floating point register?

Ian

Reply via email to