This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: prevent (pre_inc ...) from satisfying "movhi" RTL template constraints


On Sat, Jul 22, 2017 at 2:43 AM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> ("i" matches everything "n" does; did you mean "rmi"?  If you did
> mean "ri", you should use nonmemory_operand).

The "rni" is not a typo; I was uncertain of the difference between 'n' and 'i',
so I decided to put both of them in. From the definitions, I deduced that 'i'
can support symbolic constants and 'n' does not, and I wasn't sure what to
make of the following definition of 'n':

> ...Many systems cannot support assembly-time constants for operands
> less than a word wide. Constraints for these operands should use 'n' rather
> than 'i'.

> > My question is, why does the compiler match the above RTL code to
> > my "movhi" template? I have not specified an auto {pre,post}
> > inc/decremented ("<" or ">") operand constraint anywhere in the
> > "movhi" template; thus, surely the template match should fail, if the
> > RTL that is attempted to be matched contains such a *cremented
> > expression?
>
> Because your legitimate_address_p (or similar) is fine with it,
> I suspect.

The aforementioned RTL is not invalid; legitimate_address_p correctly
permits addressing of that form. What I would like to do is prevent such
RTL expressions from matching to the "movhi" template (which in my
mind, it shouldn't have matched in the first place), so that it only matches
the "pushhi" template.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]