https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109780

--- Comment #17 from Xi Ruoyao <xry111 at gcc dot gnu.org> ---
(In reply to H.J. Lu from comment #16)
> Created attachment 55409 [details]
> A patch
> 
> I am stilling trying to find a small testcase.

The patch triggers an ICE building Spidermonkey 115b9 (it segfaults with GCC
trunk because of some unaligned vmovdqa):

0x93297b ix86_finalize_stack_frame_flags
        ../../gcc/gcc/config/i386/i386.cc:8224
0x162064c ix86_expand_epilogue(int)
        ../../gcc/gcc/config/i386/i386.cc:9405
0x1b2e27f gen_epilogue()
        ../../gcc/gcc/config/i386/i386.md:17517
0x160a815 target_gen_epilogue
        ../../gcc/gcc/config/i386/i386.md:17013
0xf15e86 make_epilogue_seq
        ../../gcc/gcc/function.cc:5964
0xf15f8b thread_prologue_and_epilogue_insns()
        ../../gcc/gcc/function.cc:6046
0xf166c2 rest_of_handle_thread_prologue_and_epilogue
        ../../gcc/gcc/function.cc:6544
0xf166c2 execute
        ../../gcc/gcc/function.cc:6625

The code at i386.cc:8224 reads:

  if (crtl->stack_realign_finalized)
    {
      /* After stack_realign_needed is finalized, we can't no longer
         change it.  */
      gcc_assert (crtl->stack_realign_needed == stack_realign);
      return;
    }

I'm not sure if the assert should be dropped or it's more difficult.

Or can we just force to use unaligned vector moves for block operations until
we can find a better solution?  It's at least better than leaving the
vectorized block moving broken and forcing people trying to disable the
feature.

Reply via email to