This is an archive of the discontinued LLVM Phabricator instance.

[CodeGen] Implicitly set stackrealign on the main function, if custom stack alignment is used
ClosedPublic

Authored by mstorsjo on Aug 21 2018, 12:46 AM.

Details

Summary

If using a custom stack alignment, one is expected to make sure that all callers provide such alignment, or realign the stack in all entry points (and callbacks).

Despite this, the compiler can assume that the main function will need realignment in these cases, since the startup routines calling the main function most probably won't provide the custom alignment.

This matches what GCC does in similar cases; if compiling with -mincoming-stack-boundary=X -mpreferred-stack-boundary=X, GCC normally assumes such alignment on entry to a function, but specifically for the main function still does realignment.

Diff Detail

Repository
rL LLVM

Event Timeline

mstorsjo created this revision.Aug 21 2018, 12:46 AM
erichkeane added inline comments.Aug 21 2018, 5:52 AM
lib/CodeGen/CodeGenFunction.cpp
989 ↗(On Diff #161653)

Is there not an attribute name for this already in LLVM? I guess I'm otherwise fine with this, but would want @craig.topper or @rnk to confirm that we're Ok just sending this string as an attribute.

mstorsjo added inline comments.Aug 21 2018, 6:05 AM
lib/CodeGen/CodeGenFunction.cpp
989 ↗(On Diff #161653)

I don't see one in llvm/include/llvm/IR/Attributes.td at least, and all other occurrances in clang just use the plain string.

rnk accepted this revision.Aug 21 2018, 12:40 PM

lgtm

lib/CodeGen/CodeGenFunction.cpp
989 ↗(On Diff #161653)

Yep, we use the string stackrealign attribute.

This revision is now accepted and ready to land.Aug 21 2018, 12:40 PM
This revision was automatically updated to reflect the committed changes.