Gidi Nave <gidi.nav...@gmail.com> writes:

> I have a question regarding Plus reload situation I ran into in my
> port (which was taken from branch 4.6):
>
> I got the following insn:  Set d1  (plus r1 -96).
> d1 and r1 are 2 registers from different classes.
>
> The reload (which take place at: reload1.c , gen_reload(out = d1, in =
> (plus r1 -96)) try 3 options:
>
> 1. switch the plus operands:
>               set d1 (plus -96 r1)
>
> 2. split into 2 insns - reload the const to d1 and then add r1:
>               set d1 -96
>               set d1  (plus d1 r1)
>
> 3. split into 2 insns - copy r1 to d1 and then add the const:
>               set d1 r1
>               set d1  (plus d1 -96)
>
> GCC tries generating the 1st option - and fails since no valid pattern is 
> found.
> Then it tries generating the 2nd option and fails once again, since no
> valid pattern is found.
> Then it tries generating the 3rd option without constraint validity
> check(emit_insn_if_valid_for_reload) like the first 2 attempts,
> and creates a new insn which will later fail since it's not satisfying
> it's constraints.
>
> My question is: why is GCC certain that one of those 3 attempts must work?
> In my case, all 3 resulted insns are not supported by the architecture.
What instructions are supported by your processor here?

Ian

Reply via email to