This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Can shrink-wrapping ever move prologue past an ASM statement?


On Tue, Jul 07, 2015 at 07:53:49PM +0200, Martin Jambor wrote:
> I've been asked to look into the item one of
> http://permalink.gmane.org/gmane.linux.kernel/1990397 and found out
> that at least shrink-wrapping happily moves prologue past an asm
> statement which can be bad if the asm statement contains a call
> instruction.
> 
> Am I right concluding that this is a bug?  Looking into the manual and
> at requires_stack_frame_p() in shrink-wrap.c, I do not see any obvious
> way of marking the asm statement as requiring the stack frame (but I
> will not mind being proven wrong).  Do we want to create one, such as
> only disallowing moving prologue past volatile asm statements?  Any
> other ideas?

For architectures like PowerPC where all calls clobber some register,
you can write e.g.

	asm("bl func" : : : "lr");

and all is well (better than saving/restoring LR manually, too).


For other archs, e.g. x86-64, you can do

	register void *sp asm("%sp");
	asm volatile("call func" : "+r"(sp));

and the result seems to be optimal as well.


Some special clobber, maybe "stack" (like "memory", which won't work)
could be nicer?  What should the *exact* semantics of that be?


Segher


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]