Message ID | 20121108174215.GC1859@tucnak.redhat.com |
---|---|
State | New |
Headers | show |
On Thu, Nov 8, 2012 at 12:42 PM, Jakub Jelinek <jakub@redhat.com> wrote: > We have in rs6000-protos.h > extern bool legitimate_indirect_address_p (rtx, int); > and in rs6000.c > inline bool > legitimate_indirect_address_p (rtx x, int strict) { ... } > and in predicates.md call this function. That works fine in C > (both -fgnu89-inline mode and C99), the function is inlined within rs6000.c > but an out of line copy is still emitted and predicates.md can thus > reference it. But in C++, if compiled with optimizations, without > -fkeep-inline-functions and the compiler inlines all calls to that function, > it doesn't have to emit anything. Thus, either we have the option to > move the definition of legitimate_indirect_address_p into a header (but > rs6000-protos.h doesn't look like a correct spot to define inline > functions), or we need to drop inline keyword and force that way > an out of line copy. Ok for trunk? > > 2012-11-08 Jakub Jelinek <jakub@redhat.com> > > PR target/54308 > * config/rs6000/rs6000.c (legitimate_indirect_address_p): Remove > inline keyword. Okay. Thanks, David
--- gcc/config/rs6000/rs6000.c.jj 2012-10-31 09:20:44.000000000 +0100 +++ gcc/config/rs6000/rs6000.c 2012-11-08 18:33:34.950408593 +0100 @@ -5465,7 +5465,7 @@ avoiding_indexed_address_p (enum machine return (TARGET_AVOID_XFORM && VECTOR_MEM_NONE_P (mode)); } -inline bool +bool legitimate_indirect_address_p (rtx x, int strict) { return GET_CODE (x) == REG && INT_REG_OK_FOR_BASE_P (x, strict);