OSDN Git Service

2006-10-26 Andreas Krebbel <krebbel1@de.ibm.com>
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Oct 2006 06:58:29 +0000 (06:58 +0000)
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Oct 2006 06:58:29 +0000 (06:58 +0000)
* config/s390/s390.c (s390_init_frame_layout): Check positive
frame_size.

2006-10-26  Andreas Krebbel  <krebbel1@de.ibm.com>

* gcc.dg/20061026.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118062 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/s390/s390.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/20061026.c [new file with mode: 0644]

index f467dce..554a22c 100644 (file)
@@ -1,3 +1,8 @@
+2006-10-26  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * config/s390/s390.c (s390_init_frame_layout): Check positive
+       frame_size.
+
 2006-10-26  Ben Elliston  <bje@au.ibm.com>
 
        * gimplify.c (get_name): Remove extraneous break.
index 3fd3638..59baba9 100644 (file)
@@ -6718,8 +6718,8 @@ s390_init_frame_layout (void)
       /* Try to predict whether we'll need the base register.  */
       base_used = cfun->machine->split_branches_pending_p
                  || current_function_uses_const_pool
-                 || (!DISP_IN_RANGE (-frame_size)
-                     && !CONST_OK_FOR_K (-frame_size));
+                 || (!DISP_IN_RANGE (frame_size)
+                     && !CONST_OK_FOR_K (frame_size));
 
       /* Decide which register to use as literal pool base.  In small
         leaf functions, try to use an unused call-clobbered register
index 5f1cbf7..ad0ca6f 100644 (file)
@@ -1,3 +1,7 @@
+2006-10-26  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * gcc.dg/20061026.c: New testcase.
+
 2006-10-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/29563
diff --git a/gcc/testsuite/gcc.dg/20061026.c b/gcc/testsuite/gcc.dg/20061026.c
new file mode 100644 (file)
index 0000000..fb3de23
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+/* This testcase failed on s390.  The frame size for function f will be
+   exactly 32768 bytes.  The back end has to recognize that this is to
+   large for a 16bit constant and therefore should reserve the literal
+   pool base pointer.  */
+
+int f () {
+  char a[32608];
+
+  g (a);
+}