[llvm-commits] [PATCH] Stack Alignment: clamp the alignment of stack objects in MachineFrameInfo

Manman Ren mren at apple.com
Tue Dec 18 11:27:11 PST 2012


There are some discussions in thread
Re: [llvm-commits] [llvm] r169197 - in /llvm/trunk: include/llvm/CodeGen/MachineFrameInfo.h include/llvm/Target/TargetFrameLowering.h lib/CodeGen/MachineFunction.cpp test/CodeGen/ARM/alloc-no-stack-realign.ll


>> When creating stack object, we use Align
>> Align = std::max((unsigned)TLI.getDataLayout()->getPrefTypeAlignment(Ty),
>>                  AI->getAlignment());
>> The preferred alignment may be too big for the target, and it makes sense to give a warning instead of a fatal error.
> 
> If we can't realign the stack, we should print an error if
> AI->getAlignment() is too large and simply ignore the return of
> getPrefTypeAlignment if it's too large.

This means going through the call sites of these functions CreateStackObject … and checking the alignment there instead of
wrapping it up in these functions.

Another option is to pass in an extra argument for the minimal alignment that must be satisfied.

//////////////////////////////////////////////
--> I will pass an extra argument for the minimal alignment and will use emitError if the minimal alignment can't be satisfied and
will ignore the case where getPrefTypeAlignment is too large.
--> If that does not sound right, please let me know,

Thanks,
Manman

On Dec 18, 2012, at 11:15 AM, Chris Lattner <clattner at apple.com> wrote:

> 
> On Dec 18, 2012, at 11:06 AM, Bob Wilson <bob.wilson at apple.com> wrote:
> 
>>>> 
>>>> Hi Manman,
>>>> 
>>>> Could you move the functions from MachineFrameInfo.h first and then add the clamping code? Also, the debug output you emit should be within 'DEBUG()' macro. Like this:
>>> Hi Bill,
>>> Sure, I will submit it as two patches and guard with DEBUG.
>>>> 
>>>> 	DEBUG(dbgs() << "Warning: requested alignment " << Align
>>>> 	         << " exceeds the stack alignment " << StackAlign
>>>> 	         << " when stack realignment is off\n");
>>>> 
>>>> Or better yet make it an 'assert' if you don't expect this situation to ever occur:
>>> This can actually happen if the user specified a large alignment or the data type has a large alignment.
>> 
>> In that case, using DEBUG is absolutely the wrong thing.  The warning won't be produced in a compiler built without debugging.  Is there any way you could detect this in the front-end and produce a proper diagnostic?  (I haven't thought about that and haven't looked at the code, so forgive me if that's a stupid idea.)  Otherwise, you just have to print out the warning to "errs()".  In the long term, we need to figure out how to let the optimizer and code-gen produce real diagnostics (tracked at Apple in <rdar://problem/12867368>).
> 
> Backend errors like this should be reported with LLVMContext::emitError.

> 
> -Chris

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121218/ae212ef9/attachment.html>


More information about the llvm-commits mailing list