Hi!
extern void bar (void) __attribute__((visibility (hidden)));
void foo (void)
{
bar ();
bar ();
}
compiled on ppc64-linux with -O2 -m64 -mminimal-toc
leads to bl bar without nop in the following instruction
and to sibling call.
Now, when this together with bar's definition is linked
into a
Jakub Jelinek writes:
Jakub compiled on ppc64-linux with -O2 -m64 -mminimal-toc
Jakub leads to bl bar without nop in the following instruction
Jakub and to sibling call.
Jakub Now, when this together with bar's definition is linked
Jakub into a big binary and foo and bar need to have different
On 6/25/07, David Edelsohn [EMAIL PROTECTED] wrote:
Just out of curiosity, are you using a version of GCC with or
without the section anchor support? Is the application still overrunning
the TOC with sectcion anchors?
I have access to programs that overflow the TOC even with section
On Mon, Jun 25, 2007 at 07:32:48AM -0400, David Edelsohn wrote:
Jakub Jelinek writes:
Jakub compiled on ppc64-linux with -O2 -m64 -mminimal-toc
Jakub leads to bl bar without nop in the following instruction
Jakub and to sibling call.
Jakub Now, when this together with bar's definition is
Jakub Jelinek wrote:
Hi!
extern void bar (void) __attribute__((visibility (hidden)));
void foo (void)
{
bar ();
bar ();
}
compiled on ppc64-linux with -O2 -m64 -mminimal-toc
leads to bl bar without nop in the following instruction
and to sibling call.
Shouldn't -mminimal-toc also
Mark Mitchell writes:
Mark I think the DECL_EXTERNAL case should go before the visibility checks in
Mark default_binds_local_p_1. A DECL_EXTERNAL entity never binds locally.
Jakub,
Do you want to follow up with a patch to change the ordering of
tests in default_binds_local_p_1()?
On Mon, Jun 25, 2007 at 09:31:14AM -0400, Mark Mitchell wrote:
David Edelsohn wrote:
/* If defined in this object and visibility is not default, must be
local. */
else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
local_p = true;
Why does binds_local_p return true
On Mon, Jun 25, 2007 at 09:15:40AM -0400, David Edelsohn wrote:
Emitting a NOP depends on SYMBOL_FLAG_LOCAL.
if (targetm.binds_local_p (decl))
flags |= SYMBOL_FLAG_LOCAL;
PPC64 uses the default binds_local_p() hook, default_binds_local_p_1():
/* If defined in this object
Mark Mitchell writes:
Mark That would be my recommendation: limit optimizations that require a
Mark short branch to calls to functions in the same translation unit, not
Mark just in the same shared object. But, that's just my two cents; the
Mark Power maintainers might have a different take.
Emitting a NOP depends on SYMBOL_FLAG_LOCAL.
if (targetm.binds_local_p (decl))
flags |= SYMBOL_FLAG_LOCAL;
PPC64 uses the default binds_local_p() hook, default_binds_local_p_1():
/* If defined in this object and visibility is not default, must be
local. */
else if
David Edelsohn wrote:
/* If defined in this object and visibility is not default, must be
local. */
else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
local_p = true;
Why does binds_local_p return true for non-default visibility?
I was just about to ask that.
It's an
On Mon, Jun 25, 2007 at 07:06:01AM -0400, Jakub Jelinek wrote:
Hi!
extern void bar (void) __attribute__((visibility (hidden)));
void foo (void)
{
bar ();
bar ();
}
compiled on ppc64-linux with -O2 -m64 -mminimal-toc
leads to bl bar without nop in the following instruction
and to
Daniel Jacobowitz wrote:
I think the DECL_EXTERNAL case should go before the visibility checks in
default_binds_local_p_1. A DECL_EXTERNAL entity never binds locally.
That isn't the meaning that most callers of this function want,
however. They want same shared object, which is what it
On Mon, Jun 25, 2007 at 10:15:55AM -0400, Mark Mitchell wrote:
Daniel Jacobowitz wrote:
I think the DECL_EXTERNAL case should go before the visibility checks in
default_binds_local_p_1. A DECL_EXTERNAL entity never binds locally.
That isn't the meaning that most callers of this
Jakub Jelinek wrote:
For replacability the current definition is just fine. Weak functions
must be assumed to be always replaceable and non-weak functions which are
known to bind within the same executable resp. shared library are not
replaceable - linker will issue error if two non-weak
Mark Mitchell writes:
Mark Good point -- if there's no definition in the current translation unit,
Mark then I guess we aren't going to make any bad assumptions about the
Mark contents of the function. So, I guess that just means that the Power
Mark back end needs to check for !DECL_EXTERNAL in
David Edelsohn wrote:
Mark Mitchell writes:
Mark Good point -- if there's no definition in the current translation unit,
Mark then I guess we aren't going to make any bad assumptions about the
Mark contents of the function. So, I guess that just means that the Power
Mark back end needs to
On Mon, Jun 25, 2007 at 12:48:10PM -0400, Mark Mitchell wrote:
I was suggesting leaving the hook alone, but modifying the test for the
sibling call optimization in rs6000_function_ok_for_sibcall to:
!DECL_EXTERNAL (decl) binds_local_p (decl)
In other words, per Jakub's argument,
Jakub Jelinek writes:
Jakub I guess the right thing to do would be to replace the current
Jakub 3 uses of SYMBOL_REF_LOCAL_P (x) macro in config/rs6000/*.md
Jakub with
Jakub SYMBOL_REF_LOCAL_P (x) (!TARGET_ARCH64 || !SYMBOL_REF_EXTERNAL_P (x))
Jakub where TARGET_ARCH64 is replaced by whatever
19 matches
Mail list logo