diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-03-14 18:59:03 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-03-14 18:59:03 +0100 |
commit | 9cf218a30f2076faeeb43df2f3b422fc65f59c0e (patch) | |
tree | 598f3180a15448548c2aff0a6280b126fe50bfd6 /gcc | |
parent | a58dc194c8b0e7a0af35389e21d9d02b27301539 (diff) | |
download | gcc-9cf218a30f2076faeeb43df2f3b422fc65f59c0e.zip gcc-9cf218a30f2076faeeb43df2f3b422fc65f59c0e.tar.gz gcc-9cf218a30f2076faeeb43df2f3b422fc65f59c0e.tar.bz2 |
reg-stack.c (stack_result): Unconditionally use FUNCTION_OUTGOING_VALUE resp.
* reg-stack.c (stack_result): Unconditionally use
FUNCTION_OUTGOING_VALUE resp. FUNCTION_VALUE.
* g++.old-deja/g++.other/regstack.C: New test.
From-SVN: r40457
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reg-stack.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/regstack.C | 31 |
4 files changed, 41 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 54031ae..dd2818d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-03-14 Jakub Jelinek <jakub@redhat.com> + + * reg-stack.c (stack_result): Unconditionally use + FUNCTION_OUTGOING_VALUE resp. FUNCTION_VALUE. + Wed Mar 14 16:36:25 CET 2001 Jan Hubicka <jh@suse.cz> * expr.c (emit_move_insn_1): Split push of complex value when diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 1d14a01..2f00113 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -786,11 +786,7 @@ stack_result (decl) return 0; result = DECL_RTL (DECL_RESULT (decl)); - /* ?!? What is this code supposed to do? Can this code actually - trigger if we kick out aggregates above? */ - if (result != 0 - && ! (GET_CODE (result) == REG - && REGNO (result) < FIRST_PSEUDO_REGISTER)) + if (result != 0) { #ifdef FUNCTION_OUTGOING_VALUE result diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c86f750..3198df8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-03-14 Jakub Jelinek <jakub@redhat.com> + + * g++.old-deja/g++.other/regstack.C: New test. + 2001-03-12 Nathan Sidwell <nathan@codesourcery.com> * g++.old-deja/g++.other/ref4.C: New test. diff --git a/gcc/testsuite/g++.old-deja/g++.other/regstack.C b/gcc/testsuite/g++.old-deja/g++.other/regstack.C new file mode 100644 index 0000000..ea72221 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/regstack.C @@ -0,0 +1,31 @@ +// Special g++ Options: -O2 +// Skip if not target: i?86-*-* + +inline double foo (double x) +{ + register double r; + asm volatile ("fsqrt" : "=t" (r) : "0" (x)); + return r; +} + +struct X +{ + ~X() {} +}; + +int b; + +double bar (X x) +{ + if (b) + return 1.0; + return 36.0 * foo (36.0); +} + +int main () +{ + X x; + if (bar (x) != 216.0) + return 1; + return 0; +} |