Commit d24959df by Ulrich Weigand Committed by Ulrich Weigand

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
parent 79dd769c
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> 2005-06-02 Adrian Straetling <straetling@de.ibm.com>
* optabs.c: (expand_bool_compare_and_swap): Emit barrier after * optabs.c: (expand_bool_compare_and_swap): Emit barrier after
......
...@@ -4672,15 +4672,12 @@ s390_add_execute (struct constant_pool *pool, rtx insn) ...@@ -4672,15 +4672,12 @@ s390_add_execute (struct constant_pool *pool, rtx insn)
if (c == NULL) if (c == NULL)
{ {
rtx label = s390_execute_label (insn);
gcc_assert (label);
c = (struct constant *) xmalloc (sizeof *c); c = (struct constant *) xmalloc (sizeof *c);
c->value = insn; c->value = insn;
c->label = label == const0_rtx ? gen_label_rtx () : XEXP (label, 0); c->label = gen_label_rtx ();
c->next = pool->execute; c->next = pool->execute;
pool->execute = c; pool->execute = c;
pool->size += label == const0_rtx ? 6 : 0; pool->size += 6;
} }
} }
...@@ -4732,28 +4729,6 @@ s390_execute_target (rtx insn) ...@@ -4732,28 +4729,6 @@ s390_execute_target (rtx insn)
return pattern; 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 /* Indicate that INSN cannot be duplicated. This is the case for
execute insns that carry a unique label. */ execute insns that carry a unique label. */
...@@ -4829,9 +4804,6 @@ s390_dump_pool (struct constant_pool *pool, bool remote_label) ...@@ -4829,9 +4804,6 @@ s390_dump_pool (struct constant_pool *pool, bool remote_label)
/* Output in-pool execute template insns. */ /* Output in-pool execute template insns. */
for (c = pool->execute; c; c = c->next) 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 = emit_label_after (c->label, insn);
INSN_ADDRESSES_NEW (insn, -1); INSN_ADDRESSES_NEW (insn, -1);
...@@ -4851,9 +4823,6 @@ s390_dump_pool (struct constant_pool *pool, bool remote_label) ...@@ -4851,9 +4823,6 @@ s390_dump_pool (struct constant_pool *pool, bool remote_label)
/* Remove placeholder insn. */ /* Remove placeholder insn. */
remove_insn (pool->pool_insn); remove_insn (pool->pool_insn);
/* Output out-of-pool execute template isns. */
s390_dump_execute (pool);
} }
/* Free all memory used by POOL. */ /* Free all memory used by POOL. */
...@@ -4903,7 +4872,7 @@ s390_mainpool_start (void) ...@@ -4903,7 +4872,7 @@ s390_mainpool_start (void)
pool->pool_insn = insn; pool->pool_insn = insn;
} }
if (s390_execute_label (insn)) if (!TARGET_CPU_ZARCH && s390_execute_label (insn))
{ {
s390_add_execute (pool, insn); s390_add_execute (pool, insn);
} }
...@@ -4948,9 +4917,6 @@ s390_mainpool_finish (struct constant_pool *pool) ...@@ -4948,9 +4917,6 @@ s390_mainpool_finish (struct constant_pool *pool)
/* If the pool is empty, we're done. */ /* If the pool is empty, we're done. */
if (pool->size == 0) 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. */ /* We don't actually need a base register after all. */
cfun->machine->base_reg = NULL_RTX; cfun->machine->base_reg = NULL_RTX;
...@@ -5103,7 +5069,7 @@ s390_chunkify_start (void) ...@@ -5103,7 +5069,7 @@ s390_chunkify_start (void)
} }
} }
if (s390_execute_label (insn)) if (!TARGET_CPU_ZARCH && s390_execute_label (insn))
{ {
if (!curr_pool) if (!curr_pool)
curr_pool = s390_start_pool (&pool_list, insn); curr_pool = s390_start_pool (&pool_list, insn);
...@@ -8188,6 +8154,28 @@ s390_reorg (void) ...@@ -8188,6 +8154,28 @@ s390_reorg (void)
break; 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 (); s390_optimize_prologue ();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment