diff options
author | Richard Henderson <rth@redhat.com> | 2002-10-01 13:49:39 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-10-01 13:49:39 -0700 |
commit | fd1e5d25e3f39f8ebfc8c3486288f3700d526e98 (patch) | |
tree | 7de45aa9675d34d2ce1aa783dc84b827c618e43d | |
parent | 78872ad9bde66e572f5418862c641f32ce8706f9 (diff) | |
download | gcc-fd1e5d25e3f39f8ebfc8c3486288f3700d526e98.zip gcc-fd1e5d25e3f39f8ebfc8c3486288f3700d526e98.tar.gz gcc-fd1e5d25e3f39f8ebfc8c3486288f3700d526e98.tar.bz2 |
calls.c (precompute_register_parameters): Force non-legitimate constants into pseudos.
* calls.c (precompute_register_parameters): Force non-legitimate
constants into pseudos.
* gcc.dg/tls/opt-3.c: New.
From-SVN: r57709
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/calls.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tls/opt-3.c | 10 |
3 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4af6f0f..a4a53a4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-10-01 Richard Henderson <rth@redhat.com> + + * calls.c (precompute_register_parameters): Force non-legitimate + constants into pseudos. + 2002-10-01 Nick Clifton <nickc@redhat.com> * config/rs6000/spe.md (spe_evrlwi): Add missing third operand diff --git a/gcc/calls.c b/gcc/calls.c index ffedaca..d706751 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -876,6 +876,12 @@ precompute_register_parameters (num_actuals, args, reg_parm_seen) emit_queue (); } + /* If the value is a non-legitimate constant, force it into a + pseudo now. TLS symbols sometimes need a call to resolve. */ + if (CONSTANT_P (args[i].value) + && !LEGITIMATE_CONSTANT_P (args[i].value)) + args[i].value = force_reg (args[i].mode, args[i].value); + /* If we are to promote the function arg to a wider mode, do it now. */ diff --git a/gcc/testsuite/gcc.dg/tls/opt-3.c b/gcc/testsuite/gcc.dg/tls/opt-3.c new file mode 100644 index 0000000..0e56991 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tls/opt-3.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fpic } */ +/* { dg-options "-O2 -fpic -mregparm=3" { target i?86-*-* } } */ + +extern __thread int i, j, k; +extern void bar(int *, int *, int *); +void foo(void) +{ + bar(&i, &j, &k); +} |