[LLVMbugs] [Bug 10841] [AVX] crash due to aligned move being used for register spill with 48 byte offset from %rbp

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Sep 15 17:27:10 PDT 2011


Bruno Cardoso Lopes <bruno.cardoso at gmail.com> changed:

           What    |Removed                     |Added
             Status|NEW                         |RESOLVED
         Resolution|                            |WONTFIX

--- Comment #2 from Bruno Cardoso Lopes <bruno.cardoso at gmail.com> 2011-09-15 19:27:09 CDT ---
Hi Matt,

It happens that we have a big problem here. An explanation follows:

- The function in the bitcode you submitted doesn't have any 256-bit arguments,
and based on x86_64 abi the default stack alignment should be 128-bit (it can
be 256-bit if you have 256-bit arguments on the stack).
- Since there're spill slots of 32 bytes, that triggers stack realignment.
- Since there're dynamic allocas, it triggers dynamic allocation.

We don't really support dynamic allocation and stack re-alignment at the same
time.  See X86InstrInfo.cpp:433:

  // FIXME: Currently we don't support stack realignment for functions with
  //        variable-sized allocas.
  // FIXME: It's more complicated than this...
  if (0 && requiresRealignment && MFI->hasVarSizedObjects())
      "Stack realignment in presence of dynamic allocas is not supported");

This would require a great amount of work that I'm not even quite sure if it's
worth doing: the implementation could be somewhat nasty and the resulting code
slow. As a hack, If we set the stack alignment to 256-bits by default, we
become non-ABI compliant and code calling those functions could break. Is there
any way you can change your front-end to emit all allocas in the entry block?

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list