H.J. Lu wrote: > On Mon, Jun 27, 2011 at 7:52 AM, Ulrich Weigand <uweig...@de.ibm.com> wrote: > > H.J. Lu wrote: > > > >> Given input: > >> > >> (plus:SI (subreg:SI (plus:DI (reg/f:DI 7 sp) > >> =A0 =A0 =A0 =A0 =A0 =A0 (const_int 16 [0x10])) 0) > >> =A0 =A0 (const_int -1 [0xffffffffffffffff])) > > > > Once again, this seems weird as legitimate address ... =A0If this really > > can occur validly, there'll probably need to be an insn+splitter and/or > > a secondard reload provided by the back-end to handle it. > > This is the valid memory address for any instructions which > take a memory operand under x32. How will insn+splitter and/or > a secondard reload help x32 here? Do I implement such a thing for > all instructions which take a memory operand?
Well, if this *is* already accepted as valid, then I don't understand why it is getting reloaded in the first place. > > With your change below, it seems you're just falling through to > > the generic gen_rtx_SET case, right? =A0 How does this help? > > > > I added ix86_simplify_base_disp to i386.c to handle such cases. I see. It appears that this routine is used within ix86_decompose_address, which means that: - addresses containing constructs as above will be accepted as valid - the simplification will *not* be done in place in the RTL stream, but on the fly every time the address is looked at This explains why just emitting a plain SET is accepted. But if this is the case, then the PLUS case in gen_reload should also have worked, since the first thing it tries is just a plain SET as well: [snip] The simplest approach is to try to generate such an insn and see if it is recognized and matches its constraints. If so, it can be used. [snip] insn = emit_insn_if_valid_for_reload (gen_rtx_SET (VOIDmode, out, in)); if (insn) return insn; Can you check in your test case why this isn't accepted here? In general, I'm wondering if it really a good idea to accept complex non-simplified expressions like the above as valid addresses, instead of simplifying them directly where they are generated, and then just accepting the simplified versions. That simplification could occur e.g. in a secondary reload for PLUS (in those cases where we actually require a reload), or in a legitimize_reload_address handler (in those cases where the address can remain in place). Bye, Ulrich -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE ulrich.weig...@de.ibm.com