From 15961e4a1bbd3ddd2a4ebe09aad07aa6541ed321 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Thu, 26 Jan 2017 17:08:12 +0000 Subject: re PR target/79131 (ICE: in extract_constrain_insn, at recog.c:2213, big-endian ARM) 2017-01-26 Vladimir Makarov PR target/79131 * lra-assigns.c (setup_live_pseudos_and_spill_after_risky): Take endianess for subregs into account. * lra-constraints.c (lra_constraints): Do risky transformations always on the first iteration. * lra-lives.c (check_pseudos_live_through_calls): Add arg last_call_used_reg_set. (process_bb_lives): Define and use last_call_used_reg_set. * lra.c (lra): Always continue after lra_constraints on the first iteration. 2017-01-26 Vladimir Makarov PR target/79131 * gcc.target/arm/pr79131.c: New. From-SVN: r244942 --- gcc/lra-constraints.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'gcc/lra-constraints.c') diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 7b0d2f4..2586913 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -4511,7 +4511,10 @@ lra_constraints (bool first_p) && REGNO (pic_offset_table_rtx) >= FIRST_PSEUDO_REGISTER) lra_risky_transformations_p = true; else - lra_risky_transformations_p = false; + /* On the first iteration we should check IRA assignment + correctness. In rare cases, the assignments can be wrong as + early clobbers operands are ignored in IRA. */ + lra_risky_transformations_p = first_p; new_insn_uid_start = get_max_uid (); new_regno_start = first_p ? lra_constraint_new_regno_start : max_reg_num (); /* Mark used hard regs for target stack size calulations. */ -- cgit v1.1