diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-01-18 15:42:40 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-01-18 15:42:40 +0000 |
commit | 19b48b1d0125b919df4e3173081afd81f3fc6358 (patch) | |
tree | b1a6ff5e979ba14aa4880dd089cdde369649a13b /gcc/config/s390/s390.c | |
parent | 8516586fa6aa545d91b68de28b1ea85cefb0abf7 (diff) | |
download | gcc-19b48b1d0125b919df4e3173081afd81f3fc6358.tar.gz |
2012-01-18 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 183270 using svnmerge
[gcc/]
2012-01-18 Basile Starynkevitch <basile@starynkevitch.net>
* warmelt-base.melt (clone_with_discriminant): Better casts in
macrostrings.
* melt/xtramelt-ana-base.melt (tree_function_decl_named)
(function_decl_of_name, tree_function_decl, tree_var_decl_named)
(tree_var_decl, tree_var_decl_of_name, tree_const_decl_of_name)
(tree_const_decl_named, tree_parm_decl_named)
(tree_parm_decl_of_name, tree_parm_decl, tree_result_decl_named)
(tree_result_decl, tree_result_decl_of_name): Improve or add or
change.
* melt/xtramelt-ana-simple.melt (meltframe_exec)
(smaninterp_gimple, ...): Adapt to previous changes.
* melt/xtramelt-c-generator.melt: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@183274 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/s390/s390.c')
-rw-r--r-- | gcc/config/s390/s390.c | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 67cdfb4a0d7..824308addc6 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -1,6 +1,6 @@ /* Subroutines used for code generation on IBM S/390 and zSeries Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Hartmut Penner (hpenner@de.ibm.com) and Ulrich Weigand (uweigand@de.ibm.com) and Andreas Krebbel (Andreas.Krebbel@de.ibm.com). @@ -6608,15 +6608,6 @@ s390_chunkify_start (void) pending_ltrel = pool_ref; } } - /* Make sure we do not split between a call and its - corresponding CALL_ARG_LOCATION note. */ - if (CALL_P (insn)) - { - rtx next = NEXT_INSN (insn); - if (next && NOTE_P (next) - && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION) - continue; - } } if (GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CODE_LABEL) @@ -6627,8 +6618,18 @@ s390_chunkify_start (void) gcc_assert (!pending_ltrel); } - if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS) - section_switch_p = true; + if (NOTE_P (insn)) + switch (NOTE_KIND (insn)) + { + case NOTE_INSN_SWITCH_TEXT_SECTIONS: + section_switch_p = true; + break; + case NOTE_INSN_VAR_LOCATION: + case NOTE_INSN_CALL_ARG_LOCATION: + continue; + default: + break; + } if (!curr_pool || INSN_ADDRESSES_SIZE () <= (size_t) INSN_UID (insn) @@ -6674,7 +6675,7 @@ s390_chunkify_start (void) || curr_pool->size > S390_POOL_CHUNK_MAX || section_switch_p) { - rtx label, jump, barrier; + rtx label, jump, barrier, next, prev; if (!section_switch_p) { @@ -6684,9 +6685,19 @@ s390_chunkify_start (void) if (get_attr_length (insn) == 0) continue; /* Don't separate LTREL_BASE from the corresponding - LTREL_OFFSET load. */ + LTREL_OFFSET load. */ if (pending_ltrel) continue; + next = insn; + do + { + insn = next; + next = NEXT_INSN (insn); + } + while (next + && NOTE_P (next) + && (NOTE_KIND (next) == NOTE_INSN_VAR_LOCATION + || NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)); } else { @@ -6699,7 +6710,14 @@ s390_chunkify_start (void) } label = gen_label_rtx (); - jump = emit_jump_insn_after (gen_jump (label), insn); + prev = insn; + if (prev && NOTE_P (prev)) + prev = prev_nonnote_insn (prev); + if (prev) + jump = emit_jump_insn_after_setloc (gen_jump (label), insn, + INSN_LOCATOR (prev)); + else + jump = emit_jump_insn_after_noloc (gen_jump (label), insn); barrier = emit_barrier_after (jump); insn = emit_label_after (label, barrier); JUMP_LABEL (jump) = label; |