diff options
Diffstat (limited to 'gcc/config/s390/s390.c')
-rw-r--r-- | gcc/config/s390/s390.c | 15 |
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. */ |