On Tue, Jun 06, 2006 at 10:39:46AM +0100, Richard Sandiford wrote:
> Wolfgang Mües <[EMAIL PROTECTED]> writes:
> >> ../../../gcc-4.0.2/gcc/unwind-dw2-fde.c: In function
> >> __register_frame_info_table_bases':
> >> ../../../gcc-4.0.2/gcc/unwind-dw2-fde.c:146: error: insn does not
> >> satisfy its constraints:
[cut]
> >> ../../../gcc-4.0.2/gcc/unwind-dw2-fde.c:146: internal compiler error:
> >> in reload_ cse_simplify_operands, at postreload.c:391
>
> This is just a guess, but the insn above might be an output reload.
It is, in a peculiar (and not useful) way. Diffing the greg dump against
the lreg dump shows (using the example code I posted):
+(insn:HI 25 17 38 2 (set (reg:QI 3 r3)
+ (reg:QI 3 r3 [110])) 158 {*arm_movqi_insn_swp} (nil)
+ (nil))
-(insn:HI 25 17 36 2 (set (mem/s:QI (plus:SI (reg/v/f:SI 101 [ x ])
+(insn 38 25 36 2 (set (mem/s:QI (plus:SI (reg/v/f:SI 0 r0 [orig:101 x ]
+ [101])
(const_int 5 [0x5])) [0 <variable>.c2+0 S1 A8])
- (subreg:QI (reg:SI 110) 0)) 158 {*arm_movqi_insn_swp} (nil)
- (expr_list:REG_DEAD (reg:SI 110)
- (expr_list:REG_DEAD (reg/v/f:SI 101 [ x ])
- (nil))))
+ (reg:QI 3 r3)) 158 {*arm_movqi_insn_swp} (nil)
+ (nil))
I.e. change insn 25 to a nop and then add insn 38 as essentially a duplicate
of the original insn 25. I don't think reload was supposed to do that. The
documentation as well as comments in reload.c suggest that the address would
be loaded into a register. I'm running the code in a debugger to find out
why it doesn't happen.
> Reload instructions are not themselves reloaded. In other words,
> if gcc needs to reload a QImode register out to a memory location,
> it will assume that any m<-r move is OK; it will not restrict the
> reload to Q<-r. This is by design. You can:
>
> (1) Trap this in the movqi expander, if you can fix up the general
> case without clobbering additional registers (unlikely).
> (2) Define a reload_outqi pattern to handle general m<-r moves.
> You then get a scratch register to play with. (This interface
> has changed (and improved) since I last used it.)
This option stands a reasonable chance of being the end result. It just adds
more hair than I'd like to. It is one more thing that could go wrong, and so
on.
> (3) Modify reload so that output memory operands are legitimised
> differently (only if you're brave).
> (4) Restrict QImode addresses to 'Q'.
>
> It looks downthread like you've already decided to do (4).
Only as a temporary measure.
> I just
> wasn't sure from the thread whether you realised that output reloads
> might be a specific problem.
I was not aware of this. It is only the second time I've seen postreload
complain about unsatisfied constraints. Thanks for pointing out this
problem.
--
Rask Ingemann Lambertsen