+2017-02-20 Matthew Fortune <matthew.fortune@imgtec.com>
+
+ PR target/78660
+ * lra-constraints.c (curr_insn_transform): Tighten condition
+ for converting SUBREG reloads from OP_OUT to OP_INOUT.
+
2017-02-20 Matthew Fortune <matthew.fortune@imgtec.com>
PR target/78660
< GET_MODE_PRECISION (GET_MODE (reg))
&& WORD_REGISTER_OPERATIONS)))
{
- if (type == OP_OUT)
+ /* An OP_INOUT is required when reloading a subreg of a
+ mode wider than a word to ensure that data beyond the
+ word being reloaded is preserved. Also automatically
+ ensure that strict_low_part reloads are made into
+ OP_INOUT which should already be true from the backend
+ constraints. */
+ if (type == OP_OUT
+ && (curr_static_id->operand[i].strict_low
+ || (GET_MODE_SIZE (GET_MODE (reg)) > UNITS_PER_WORD
+ && (GET_MODE_SIZE (mode)
+ < GET_MODE_SIZE (GET_MODE (reg))))))
type = OP_INOUT;
loc = &SUBREG_REG (*loc);
mode = GET_MODE (*loc);