]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR target/26018
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Jan 2006 01:06:16 +0000 (01:06 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Jan 2006 01:06:16 +0000 (01:06 +0000)
* config/s390/s390.c (struct machine_function): New flag
decomposed_literal_pool_addresses_ok_p.
(s390_reorg): Set it before final stage of literal pool transforms.
(s390_decompose_address): Only accept displacements of the form
(minus (label_ref ...) (label_ref ...)) if that flag is set.

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

gcc/ChangeLog
gcc/config/s390/s390.c

index ede7d94ca6b30ab56ebac2c181e72d62245817ea..8ef733d0824bf58a243b71b0c5f7a91133cefe42 100644 (file)
@@ -1,3 +1,12 @@
+2006-01-30  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       PR target/26018
+       * config/s390/s390.c (struct machine_function): New flag
+       decomposed_literal_pool_addresses_ok_p.
+       (s390_reorg): Set it before final stage of literal pool transforms.
+       (s390_decompose_address): Only accept displacements of the form
+       (minus (label_ref ...) (label_ref ...)) if that flag is set.
+
 2006-01-30  Carlos O'Donell  <carlos@codesourcery.com>
 
        * optabs.c (prepare_cmp_insn): If unbaised and unsigned then bias
index 883e1213cd7bf310c33ac16554c536f86f468861..37a038d3205b70eba31762f41d6324c3499e02db 100644 (file)
@@ -279,6 +279,9 @@ struct machine_function GTY(())
   /* True if we may need to perform branch splitting.  */
   bool split_branches_pending_p;
 
+  /* True during final stage of literal pool processing.  */
+  bool decomposed_literal_pool_addresses_ok_p;
+
   /* Some local-dynamic TLS symbol name.  */
   const char *some_ld_name;
 
@@ -1705,7 +1708,9 @@ s390_decompose_address (rtx addr, struct s390_address *out)
         }
 
       /* Accept chunkified literal pool symbol references.  */
-      else if (GET_CODE (disp) == MINUS
+      else if (cfun && cfun->machine
+              && cfun->machine->decomposed_literal_pool_addresses_ok_p
+              && GET_CODE (disp) == MINUS
                && GET_CODE (XEXP (disp, 0)) == LABEL_REF
                && GET_CODE (XEXP (disp, 1)) == LABEL_REF)
         {
@@ -8934,6 +8939,8 @@ s390_reorg (void)
      machine_dependent_reorg might confuse insn length counts.  */
   split_all_insns_noflow ();
 
+  /* From here on decomposed literal pool addresses must be accepted.  */
+  cfun->machine->decomposed_literal_pool_addresses_ok_p = true;
 
   /* Install the main literal pool and the associated base
      register load insns.