aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/s390/s390.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/s390/s390.c')
-rw-r--r--gcc/config/s390/s390.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index f9be9cf0a6f..2514a43a940 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -2557,8 +2557,11 @@ s390_secondary_output_reload_class (enum reg_class class,
: (mode == DImode || mode == DFmode))
&& reg_classes_intersect_p (GENERAL_REGS, class)
&& GET_CODE (out) == MEM
- && !offsettable_memref_p (out)
- && !s_operand (out, VOIDmode))
+ && GET_CODE (XEXP (out, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (out, 0), 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (out, 0), 1)) == CONST_INT
+ && !DISP_IN_RANGE (INTVAL (XEXP (XEXP (out, 0), 1))
+ + GET_MODE_SIZE (mode) - 1))
return ADDR_REGS;
if (reg_classes_intersect_p (CC_REGS, class))
@@ -5437,7 +5440,7 @@ s390_alloc_pool (void)
pool->label = gen_label_rtx ();
pool->first_insn = NULL_RTX;
pool->pool_insn = NULL_RTX;
- pool->insns = BITMAP_XMALLOC ();
+ pool->insns = BITMAP_ALLOC (NULL);
pool->size = 0;
return pool;
@@ -5464,7 +5467,7 @@ s390_free_pool (struct constant_pool *pool)
free (c);
}
- BITMAP_XFREE (pool->insns);
+ BITMAP_FREE (pool->insns);
free (pool);
}
@@ -5821,7 +5824,7 @@ s390_chunkify_start (void)
/* Find all labels that are branched into
from an insn belonging to a different chunk. */
- far_labels = BITMAP_XMALLOC ();
+ far_labels = BITMAP_ALLOC (NULL);
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
@@ -5918,7 +5921,7 @@ s390_chunkify_start (void)
}
- BITMAP_XFREE (far_labels);
+ BITMAP_FREE (far_labels);
/* Recompute insn addresses. */