/* Decompose multiword subregs.
- Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012
+ Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@redhat.com>
Ian Lance Taylor <iant@google.com>
unsigned int regno = REGNO (x);
if (HARD_REGISTER_NUM_P (regno))
- return (validate_subreg (word_mode, GET_MODE (x), x, UNITS_PER_WORD)
- && HARD_REGNO_MODE_OK (regno, word_mode));
+ {
+ unsigned int byte, num_bytes;
+
+ num_bytes = GET_MODE_SIZE (GET_MODE (x));
+ for (byte = 0; byte < num_bytes; byte += UNITS_PER_WORD)
+ if (simplify_subreg_regno (regno, GET_MODE (x), byte, word_mode) < 0)
+ return false;
+ return true;
+ }
else
return !bitmap_bit_p (subreg_context, regno);
}
src_reg = expand_shift (GET_CODE (op) == ASHIFT ?
LSHIFT_EXPR : RSHIFT_EXPR,
word_mode, src_reg,
- build_int_cst (NULL_TREE,
- shift_count - BITS_PER_WORD),
+ shift_count - BITS_PER_WORD,
dest_reg, 1);
}
|| GET_CODE (PATTERN (insn)) == USE)
continue;
+ recog_memoized (insn);
+
if (find_decomposable_shift_zext (insn))
continue;
- recog_memoized (insn);
extract_insn (insn);
set = simple_move (insn);
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_dump_func |
TODO_ggc_collect |
TODO_verify_flow /* todo_flags_finish */
}
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_df_finish | TODO_verify_rtl_sharing |
- TODO_dump_func |
TODO_ggc_collect |
TODO_verify_flow /* todo_flags_finish */
}