diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2005-06-02 19:57:24 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2005-06-02 19:57:24 +0000 |
commit | d24959df23a78d5bf0fc0b317b23824b75a9926c (patch) | |
tree | 50a481d4da980ff75b46359ebab4adc0c8dae35a /gcc | |
parent | 79dd769c9c1e72d83a16524f1cf87ce187a2e61c (diff) | |
download | gcc-d24959df23a78d5bf0fc0b317b23824b75a9926c.zip gcc-d24959df23a78d5bf0fc0b317b23824b75a9926c.tar.gz gcc-d24959df23a78d5bf0fc0b317b23824b75a9926c.tar.bz2 |
s390.c (s390_add_execute): Do not handle out-of-pool execute templates.
* config/s390/s390.c (s390_add_execute): Do not handle out-of-pool
execute templates.
(s390_dump_pool): Likewise.
(s390_mainpool_start, s390_mainpool_finish): Likewise.
(s390_chunkify_start): Likewise.
(s390_dump_execute): Remove.
(s390_reorg): Handle out-of-pool execute templates.
From-SVN: r100510
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 64 |
2 files changed, 36 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 766c4e2..01fa616 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-06-02 Ulrich Weigand <uweigand@de.ibm.com> + + * config/s390/s390.c (s390_add_execute): Do not handle out-of-pool + execute templates. + (s390_dump_pool): Likewise. + (s390_mainpool_start, s390_mainpool_finish): Likewise. + (s390_chunkify_start): Likewise. + (s390_dump_execute): Remove. + (s390_reorg): Handle out-of-pool execute templates. + 2005-06-02 Adrian Straetling <straetling@de.ibm.com> * optabs.c: (expand_bool_compare_and_swap): Emit barrier after diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 2184320..354f55e 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -4672,15 +4672,12 @@ s390_add_execute (struct constant_pool *pool, rtx insn) if (c == NULL) { - rtx label = s390_execute_label (insn); - gcc_assert (label); - c = (struct constant *) xmalloc (sizeof *c); c->value = insn; - c->label = label == const0_rtx ? gen_label_rtx () : XEXP (label, 0); + c->label = gen_label_rtx (); c->next = pool->execute; pool->execute = c; - pool->size += label == const0_rtx ? 6 : 0; + pool->size += 6; } } @@ -4732,28 +4729,6 @@ s390_execute_target (rtx insn) return pattern; } -/* Dump out the out-of-pool execute template insns in POOL - at the end of the instruction stream. */ - -static void -s390_dump_execute (struct constant_pool *pool) -{ - struct constant *c; - rtx insn; - - for (c = pool->execute; c; c = c->next) - { - if (s390_execute_label (c->value) == const0_rtx) - continue; - - insn = emit_label (c->label); - INSN_ADDRESSES_NEW (insn, -1); - - insn = emit_insn (s390_execute_target (c->value)); - INSN_ADDRESSES_NEW (insn, -1); - } -} - /* Indicate that INSN cannot be duplicated. This is the case for execute insns that carry a unique label. */ @@ -4829,9 +4804,6 @@ s390_dump_pool (struct constant_pool *pool, bool remote_label) /* Output in-pool execute template insns. */ for (c = pool->execute; c; c = c->next) { - if (s390_execute_label (c->value) != const0_rtx) - continue; - insn = emit_label_after (c->label, insn); INSN_ADDRESSES_NEW (insn, -1); @@ -4851,9 +4823,6 @@ s390_dump_pool (struct constant_pool *pool, bool remote_label) /* Remove placeholder insn. */ remove_insn (pool->pool_insn); - - /* Output out-of-pool execute template isns. */ - s390_dump_execute (pool); } /* Free all memory used by POOL. */ @@ -4903,7 +4872,7 @@ s390_mainpool_start (void) pool->pool_insn = insn; } - if (s390_execute_label (insn)) + if (!TARGET_CPU_ZARCH && s390_execute_label (insn)) { s390_add_execute (pool, insn); } @@ -4948,9 +4917,6 @@ s390_mainpool_finish (struct constant_pool *pool) /* If the pool is empty, we're done. */ if (pool->size == 0) { - /* However, we may have out-of-pool execute templates. */ - s390_dump_execute (pool); - /* We don't actually need a base register after all. */ cfun->machine->base_reg = NULL_RTX; @@ -5103,7 +5069,7 @@ s390_chunkify_start (void) } } - if (s390_execute_label (insn)) + if (!TARGET_CPU_ZARCH && s390_execute_label (insn)) { if (!curr_pool) curr_pool = s390_start_pool (&pool_list, insn); @@ -8188,6 +8154,28 @@ s390_reorg (void) break; } + /* Generate out-of-pool execute target insns. */ + if (TARGET_CPU_ZARCH) + { + rtx insn, label, target; + + for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) + { + label = s390_execute_label (insn); + if (!label) + continue; + + gcc_assert (label != const0_rtx); + + target = emit_label (XEXP (label, 0)); + INSN_ADDRESSES_NEW (target, -1); + + target = emit_insn (s390_execute_target (insn)); + INSN_ADDRESSES_NEW (target, -1); + } + } + + /* Try to optimize prologue and epilogue further. */ s390_optimize_prologue (); } |