+2014-08-23 David Malcolm <dmalcolm@redhat.com>
+
+ * var-tracking.c (struct micro_operation_def): Strengthen field
+ "insn" from rtx to rtx_insn *.
+ (struct emit_note_data_def): Likewise.
+ (insn_stack_adjust_offset_pre_post): Likewise for param "insn".
+ (vt_stack_adjustments): Likewise for local "insn".
+ (adjust_insn): Likewise for param "insn".
+ (val_store): Likewise.
+ (val_resolve): Likewise.
+ (struct count_use_info): Likewise for field "insn".
+ (log_op_type): Likewise for param "insn".
+ (reverse_op): Likewise.
+ (prepare_call_arguments): Likewise.
+ (add_with_sets): The initial param takes an insn, but we can't
+ yet strengthen it from rtx to rtx_insn * since it's used as a
+ cselib_record_sets_hook callback. For now rename initial param
+ from "insn" to "uncast_insn", and introduce a local "insn" of
+ the stronger rtx_insn * type, with a checked cast.
+ (compute_bb_dataflow): Strengthen local "insn" from rtx to
+ rtx_insn *.
+ (emit_note_insn_var_location): Likewise.
+ (emit_notes_for_changes): Likewise.
+ (emit_notes_for_differences): Likewise.
+ (next_non_note_insn_var_location): Likewise for return type and
+ for param "insn".
+ (emit_notes_in_bb): Likewise for locals "insn" and "next_insn".
+ (vt_initialize): Likewise for local "insn".
+ (delete_debug_insns): Likewise for locals "insn" and "next".
+
2014-08-23 David Malcolm <dmalcolm@redhat.com>
* varasm.c (mark_constants): Strengthen param "insn" from rtx to
instruction or note in the original flow (before any var-tracking
notes are inserted, to simplify emission of notes), for MO_SET
and MO_CLOBBER. */
- rtx insn;
+ rtx_insn *insn;
union {
/* Location. For MO_SET and MO_COPY, this is the SET that
typedef struct emit_note_data_def
{
/* The instruction which the note will be emitted before/after. */
- rtx insn;
+ rtx_insn *insn;
/* Where the note will be emitted (before/after insn)? */
enum emit_note_where where;
/* Local function prototypes. */
static void stack_adjust_offset_pre_post (rtx, HOST_WIDE_INT *,
HOST_WIDE_INT *);
-static void insn_stack_adjust_offset_pre_post (rtx, HOST_WIDE_INT *,
+static void insn_stack_adjust_offset_pre_post (rtx_insn *, HOST_WIDE_INT *,
HOST_WIDE_INT *);
static bool vt_stack_adjustments (void);
PRE- and POST-modifying stack pointer. */
static void
-insn_stack_adjust_offset_pre_post (rtx insn, HOST_WIDE_INT *pre,
+insn_stack_adjust_offset_pre_post (rtx_insn *insn, HOST_WIDE_INT *pre,
HOST_WIDE_INT *post)
{
rtx pattern;
/* Check if the edge destination has been visited yet. */
if (!VTI (dest)->visited)
{
- rtx insn;
+ rtx_insn *insn;
HOST_WIDE_INT pre, post, offset;
VTI (dest)->visited = true;
VTI (dest)->in.stack_adjust = offset = VTI (src)->out.stack_adjust;
as other sets to the insn. */
static void
-adjust_insn (basic_block bb, rtx insn)
+adjust_insn (basic_block bb, rtx_insn *insn)
{
struct adjust_mem_data amd;
rtx set;
values bound to it. */
static void
-val_store (dataflow_set *set, rtx val, rtx loc, rtx insn, bool modified)
+val_store (dataflow_set *set, rtx val, rtx loc, rtx_insn *insn,
+ bool modified)
{
cselib_val *v = CSELIB_VAL_PTR (val);
value. */
static void
-val_resolve (dataflow_set *set, rtx val, rtx loc, rtx insn)
+val_resolve (dataflow_set *set, rtx val, rtx loc, rtx_insn *insn)
{
decl_or_value dv = dv_from_value (val);
struct count_use_info
{
/* The insn where the RTX is. */
- rtx insn;
+ rtx_insn *insn;
/* The basic block where insn is. */
basic_block bb;
INSN of BB. */
static inline void
-log_op_type (rtx x, basic_block bb, rtx insn,
+log_op_type (rtx x, basic_block bb, rtx_insn *insn,
enum micro_operation_type mopt, FILE *out)
{
fprintf (out, "bb %i op %i insn %i %s ",
no longer live we can express its value as VAL - 6. */
static void
-reverse_op (rtx val, const_rtx expr, rtx insn)
+reverse_op (rtx val, const_rtx expr, rtx_insn *insn)
{
rtx src, arg, ret;
cselib_val *v;
/* Compute call_arguments. */
static void
-prepare_call_arguments (basic_block bb, rtx insn)
+prepare_call_arguments (basic_block bb, rtx_insn *insn)
{
rtx link, x, call;
rtx prev, cur, next;
first place, in which case sets and n_sets will be 0). */
static void
-add_with_sets (rtx insn, struct cselib_set *sets, int n_sets)
+add_with_sets (rtx uncast_insn, struct cselib_set *sets, int n_sets)
{
+ rtx_insn *insn = as_a <rtx_insn *> (uncast_insn);
basic_block bb = BLOCK_FOR_INSN (insn);
int n1, n2;
struct count_use_info cui;
FOR_EACH_VEC_ELT (VTI (bb)->mos, i, mo)
{
- rtx insn = mo->insn;
+ rtx_insn *insn = mo->insn;
switch (mo->type)
{
emit_note_insn_var_location (variable_def **varp, emit_note_data *data)
{
variable var = *varp;
- rtx insn = data->insn;
+ rtx_insn *insn = data->insn;
enum emit_note_where where = data->where;
variable_table_type *vars = data->vars;
rtx_note *note;
the notes shall be emitted before of after instruction INSN. */
static void
-emit_notes_for_changes (rtx insn, enum emit_note_where where,
+emit_notes_for_changes (rtx_insn *insn, enum emit_note_where where,
shared_hash vars)
{
emit_note_data data;
NEW_SET. */
static void
-emit_notes_for_differences (rtx insn, dataflow_set *old_set,
+emit_notes_for_differences (rtx_insn *insn, dataflow_set *old_set,
dataflow_set *new_set)
{
shared_hash_htab (old_set->vars)
/* Return the next insn after INSN that is not a NOTE_INSN_VAR_LOCATION. */
-static rtx
-next_non_note_insn_var_location (rtx insn)
+static rtx_insn *
+next_non_note_insn_var_location (rtx_insn *insn)
{
while (insn)
{
FOR_EACH_VEC_ELT (VTI (bb)->mos, i, mo)
{
- rtx insn = mo->insn;
- rtx next_insn = next_non_note_insn_var_location (insn);
+ rtx_insn *insn = mo->insn;
+ rtx_insn *next_insn = next_non_note_insn_var_location (insn);
switch (mo->type)
{
FOR_EACH_BB_FN (bb, cfun)
{
- rtx insn;
+ rtx_insn *insn;
HOST_WIDE_INT pre, post = 0;
basic_block first_bb, last_bb;
delete_debug_insns (void)
{
basic_block bb;
- rtx insn, next;
+ rtx_insn *insn, *next;
if (!MAY_HAVE_DEBUG_INSNS)
return;