Jeff Law <l...@redhat.com> writes:
> On 05/12/2018 10:02 AM, Richard Sandiford wrote:
>> "A. Skrobov" <tyomi...@gmail.com> writes:
>>>> If we look in sel-sched-ir.c we see that it calls into hash_rtx_cb
>>>> (sigh, bad modularity).   I'm not at all familiar with how the hashing
>>>> is used within the selective scheduler, so I can't really say what the
>>>> selective scheduler *should* be doing here.
>>>
>>> OK, I see. Now what do you think would be the best course of action?
>>> Leave everything as it is? The selective scheduler may or may not want
>>> these memory accesses ignored.
>> 
>> I don't think we can assert even for cse, since AIUI these codes can
>> still be used for stack pushes and pops.
> No.  We're not supposed to have any auto-inc insns prior to the auto-inc
> pass.  A stack push/pop early in the compiler would have to be
> represented by a PARALLEL.
>
> It's been this way forever.  It's documented in the internals manual
> somewhere.

Maybe pops was a generalisation too far :-) but I was going off:

      if (MEM_P (dest))
        {
#ifdef PUSH_ROUNDING
          /* Stack pushes invalidate the stack pointer.  */
          rtx addr = XEXP (dest, 0);
          if (GET_RTX_CLASS (GET_CODE (addr)) == RTX_AUTOINC
              && XEXP (addr, 0) == stack_pointer_rtx)
            invalidate (stack_pointer_rtx, VOIDmode);
#endif
          dest = fold_rtx (dest, insn);
        }

in cse_insn.  These kinds of push are generated by emit_single_push_insn
during expand, so if we asserted for RTX_AUTOINC rtxes then it would
fire for this case.

Richard

Reply via email to