aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2001-03-14 18:59:03 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2001-03-14 18:59:03 +0100
commit9cf218a30f2076faeeb43df2f3b422fc65f59c0e (patch)
tree598f3180a15448548c2aff0a6280b126fe50bfd6 /gcc
parenta58dc194c8b0e7a0af35389e21d9d02b27301539 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/reg-stack.c6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/regstack.C31
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;
+}