diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2004-11-19 18:01:54 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@gcc.gnu.org> | 2004-11-19 18:01:54 +0000 |
commit | 0e1ad529d715d705d1d4f8dbc188a52a3a570637 (patch) | |
tree | 92c1666170014e9d1f804e9f4ae4f881f22c7b57 /gcc | |
parent | 075523c69fec880d83efa91c773fb5a602968a6c (diff) | |
download | gcc-0e1ad529d715d705d1d4f8dbc188a52a3a570637.zip gcc-0e1ad529d715d705d1d4f8dbc188a52a3a570637.tar.gz gcc-0e1ad529d715d705d1d4f8dbc188a52a3a570637.tar.bz2 |
No darwin non-lazy-ptr for address calculatation when not needed.
OKed by Geoff Keating.
From-SVN: r90925
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/darwin.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/lazy-ptr-test.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/non-lazy-ptr-test.c | 40 |
4 files changed, 64 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 25f3d05..dcba5b0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-11-18 Fariborz Jahanian <fjahanian@apple.com> + + * config/darwin.c (machopic_data_defined_p): return 1 for + MACHOPIC_DEFINED_FUNCTION. + 2004-11-19 Jeff Law <law@redhat.com> * tree-ssa.c (verify_ssa): Remove redundant checking of PHI diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index c84a9be..04beb4d 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -169,6 +169,7 @@ machopic_data_defined_p (rtx sym_ref) switch (machopic_classify_symbol (sym_ref)) { case MACHOPIC_DEFINED_DATA: + case MACHOPIC_DEFINED_FUNCTION: return 1; default: return 0; diff --git a/gcc/testsuite/gcc.dg/lazy-ptr-test.c b/gcc/testsuite/gcc.dg/lazy-ptr-test.c new file mode 100644 index 0000000..da66b51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lazy-ptr-test.c @@ -0,0 +1,18 @@ +/* { dg-do compile { target powerpc*-apple-darwin* } } */ +/* { dg-options "-S" } */ + +void f () __attribute__((weak_import)); + +typedef void PF (void); + +void f(void){}; + +PF* g (void) { return f; } + +int main() +{ + (*g())(); + return 0; +} + +/* { dg-final { scan-assembler "non_lazy_ptr" } } */ diff --git a/gcc/testsuite/gcc.dg/non-lazy-ptr-test.c b/gcc/testsuite/gcc.dg/non-lazy-ptr-test.c new file mode 100644 index 0000000..e496784 --- /dev/null +++ b/gcc/testsuite/gcc.dg/non-lazy-ptr-test.c @@ -0,0 +1,40 @@ +/* { dg-do compile { target powerpc*-apple-darwin* } } */ +/* { dg-options "-S" } */ + +typedef void PF (void); + +static void f(void) { +} + +void f1(void) { +} + +extern void f2(void) { +} + +static void f3(void); + +__private_extern__ void pe(void) +{ +} + +PF* g (void) { f(); return f; } +PF* x (void) { return f1; } +PF* y (void) { f2(); return f2; } +PF* z (void) { return f3; } +PF* w (void) { pe(); return pe; } + +int main() +{ + (*g())(); + (*x())(); + (*y())(); + (*z())(); + (*w())(); + return 0; +} + +void f3(void) { +} + +/* { dg-final { scan-assembler-not "non_lazy_ptr" } } */ |