From 51753c1498422e8320a418a595a6c9dec7431da5 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Tue, 24 Feb 2015 18:11:38 +0000 Subject: [PATCH] re PR rtl-optimization/65123 (lra remat places insn which breaks data flow) 2015-02-24 Vladimir Makarov PR rtl-optimization/65123 * lra-remat.c (operand_to_remat): Check hard regs in insn definition too. From-SVN: r220946 --- gcc/ChangeLog | 6 ++++++ gcc/lra-remat.c | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8bd6151b89d..6941bce0ab4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-02-24 Vladimir Makarov + + PR rtl-optimization/65123 + * lra-remat.c (operand_to_remat): Check hard regs in insn + definition too. + 2015-02-24 Nick Clifton * config/v850/v850.h (ASM_SPEC): Pass -msoft-float/-mhard-float on diff --git a/gcc/lra-remat.c b/gcc/lra-remat.c index de5081a739a..fb0eb3c1f7b 100644 --- a/gcc/lra-remat.c +++ b/gcc/lra-remat.c @@ -459,6 +459,16 @@ operand_to_remat (rtx_insn *insn) reg2 = reg2->next) if (reg2->type == OP_OUT && reg->regno == reg2->regno) return -1; + if (reg->regno < FIRST_PSEUDO_REGISTER) + for (struct lra_insn_reg *reg2 = static_id->hard_regs; + reg2 != NULL; + reg2 = reg2->next) + if (reg2->type == OP_OUT + && reg->regno <= reg2->regno + && (reg2->regno + < (reg->regno + + hard_regno_nregs[reg->regno][reg->biggest_mode]))) + return -1; } /* Find the rematerialization operand. */ int nop = static_id->n_operands; -- 2.30.2