Re: unrecognizable insn

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Aug 18, 2019 at 12:23 AM William Tambe <tambewilliam@xxxxxxxxx> wrote:
>
> A simpler question from me should have been:
>
> What should a define_constraint look like to match the following operand ?
> (mem/f/c:SI (mem/c:SI (reg/f:SI 0 %sp)))

Does your target actually support memory indirect addressing modes?
These are uncommon.

This looks more like a mistake with REG_OK_STRICT.  Before register
allocation, we can accept (mem (reg)) where reg is a pseudo reg,
assuming it will get allocated to a hard reg later.  But during
register allocation, we must reject (mem (reg)) where reg is a
psuedo-reg, because this means the reg was not allocated to a hard
register, and is instead mapped to a stack slot.  Once register
allocation finished, the (mem (reg)) will be changed to (mem (mem
(stack-slot-address)) which is unlikely to be a valid address.  You
can see this if you look at the RTL dumps.  The code that decides
whether it is OK to accept a pseudo-reg here is controlled by
REG_OK_STRICT.  See for instance the definition of
REGNO_MODE_OK_FOR_BASE_P in working ports.  Or if you defined the
TARGET_LEGITIMATE_ADDRESS_P hook, this is controlled by the "strict"
argument.  In strict mode, you need to reject pseudo-regs, and in
non-strict mode you accept pseudo-regs.

Jim



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux