From 3cd045d10e27fcdc283a9f102e2dcded02c27b8b Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Tue, 31 Jan 2006 01:06:16 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 9 +++++++++ gcc/config/s390/s390.c | 9 ++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ede7d94ca6b..8ef733d0824 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2006-01-30 Ulrich Weigand + + 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 * 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 883e1213cd7..37a038d3205 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.