diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2006-01-31 01:06:16 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2006-01-31 01:06:16 +0000 |
commit | 3cd045d10e27fcdc283a9f102e2dcded02c27b8b (patch) | |
tree | c66c9889dde4a9acf3c4c6bf6cc70f8374ff3b9e | |
parent | de8d0a67e4b91b7b3dba34a7838b3cf8e23d8d85 (diff) | |
download | gcc-3cd045d10e27fcdc283a9f102e2dcded02c27b8b.zip gcc-3cd045d10e27fcdc283a9f102e2dcded02c27b8b.tar.gz gcc-3cd045d10e27fcdc283a9f102e2dcded02c27b8b.tar.bz2 |
re PR target/26018 (Assembler errors with -march=z900 compiling glibc)
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.
From-SVN: r110422
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 9 |
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ede7d94..8ef733d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 883e121..37a038d 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -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. |