Commit 4deef538 by Alexandre Oliva Committed by Alexandre Oliva

re PR debug/43092 (Wrong debuginfo with VTA and -fomit-frame-pointer/-mno-accumulate-outgoing-args)

PR debug/43092
PR rtl-optimization/43494
* rtl.h (for_each_inc_dec_fn): New type.
(for_each_inc_dec): Declare.
* rtlanal.c (struct for_each_inc_dec_ops): New type.
(for_each_inc_dec_find_inc_dec): New fn.
(for_each_inc_dec_find_mem): New fn.
(for_each_inc_dec): New fn.
* dse.c (struct insn_size): Remove.
(replace_inc_dec, replace_inc_dec_mem): Remove.
(emit_inc_dec_insn_before): New fn.
(check_for_inc_dec): Use it, along with for_each_inc_dec.
(canon_address): Pass mem modes to cselib_lookup.
* cselib.h (cselib_lookup): Add memmode argument.  Adjust callers.
(cselib_lookup_from_insn): Likewise.
(cselib_subst_to_values): Likewise.
* cselib.c (find_slot_memmode): New var.
(cselib_find_slot): New fn.  Use it instead of
htab_find_slot_with_hash everywhere.
(entry_and_rtx_equal_p): Use find_slot_memmode.
(autoinc_split): New fn.
(rtx_equal_for_cselib_p): Rename and implement in terms of...
(rtx_equal_for_cselib_1): ... this.  Take memmode, pass it on.
Deal with autoinc.  Special-case recursion into MEMs.
(cselib_hash_rtx): Likewise.
(cselib_lookup_mem): Infer pmode from address mode.  Distinguish
address and MEM modes.
(cselib_subst_to_values): Add memmode, pass it on.
Deal with autoinc.
(cselib_lookup): Add memmode argument, pass it on.
(cselib_lookup_from_insn): Add memmode.
(cselib_invalidate_rtx): Discard obsolete push_operand handling.
(struct cselib_record_autoinc_data): New.
(cselib_record_autoinc_cb): New fn.
(cselib_record_sets): Use it, along with for_each_inc_dec.  Pass MEM
mode to cselib_lookup.  Reset autoinced REGs here instead of...
(cselib_process_insn): ... here.
* var-tracking.c (replace_expr_with_values, use_type): Pass MEM mode
to cselib_lookup.
(add_uses): Likewise, also to cselib_subst_to_values.
(add_stores): Likewise.
* sched-deps.c 	(add_insn_mem_dependence): Pass mode to
cselib_subst_to_values.
(sched_analyze_1, sched_analyze_2): Likewise.  Adjusted.
* gcse.c (do_local_cprop): Adjusted.
* postreload.c (reload_cse_simplify_set): Adjusted.
(reload_cse_simplify_operands): Adjusted.
* sel-sched-dump (debug_mem_addr_value): Pass mode.

From-SVN: r169782
parent 1551d44a
2011-02-03 Alexandre Oliva <aoliva@redhat.com>
PR debug/43092
PR rtl-optimization/43494
* rtl.h (for_each_inc_dec_fn): New type.
(for_each_inc_dec): Declare.
* rtlanal.c (struct for_each_inc_dec_ops): New type.
(for_each_inc_dec_find_inc_dec): New fn.
(for_each_inc_dec_find_mem): New fn.
(for_each_inc_dec): New fn.
* dse.c (struct insn_size): Remove.
(replace_inc_dec, replace_inc_dec_mem): Remove.
(emit_inc_dec_insn_before): New fn.
(check_for_inc_dec): Use it, along with for_each_inc_dec.
(canon_address): Pass mem modes to cselib_lookup.
* cselib.h (cselib_lookup): Add memmode argument. Adjust callers.
(cselib_lookup_from_insn): Likewise.
(cselib_subst_to_values): Likewise.
* cselib.c (find_slot_memmode): New var.
(cselib_find_slot): New fn. Use it instead of
htab_find_slot_with_hash everywhere.
(entry_and_rtx_equal_p): Use find_slot_memmode.
(autoinc_split): New fn.
(rtx_equal_for_cselib_p): Rename and implement in terms of...
(rtx_equal_for_cselib_1): ... this. Take memmode, pass it on.
Deal with autoinc. Special-case recursion into MEMs.
(cselib_hash_rtx): Likewise.
(cselib_lookup_mem): Infer pmode from address mode. Distinguish
address and MEM modes.
(cselib_subst_to_values): Add memmode, pass it on.
Deal with autoinc.
(cselib_lookup): Add memmode argument, pass it on.
(cselib_lookup_from_insn): Add memmode.
(cselib_invalidate_rtx): Discard obsolete push_operand handling.
(struct cselib_record_autoinc_data): New.
(cselib_record_autoinc_cb): New fn.
(cselib_record_sets): Use it, along with for_each_inc_dec. Pass MEM
mode to cselib_lookup. Reset autoinced REGs here instead of...
(cselib_process_insn): ... here.
* var-tracking.c (replace_expr_with_values, use_type): Pass MEM mode
to cselib_lookup.
(add_uses): Likewise, also to cselib_subst_to_values.
(add_stores): Likewise.
* sched-deps.c (add_insn_mem_dependence): Pass mode to
cselib_subst_to_values.
(sched_analyze_1, sched_analyze_2): Likewise. Adjusted.
* gcse.c (do_local_cprop): Adjusted.
* postreload.c (reload_cse_simplify_set): Adjusted.
(reload_cse_simplify_operands): Adjusted.
* sel-sched-dump (debug_mem_addr_value): Pass mode.
2011-02-03 Alexandre Oliva <aoliva@redhat.com>
PR tree-optimization/45122
* tree-ssa-loop-niter.c (number_of_iterations_exit): Don't make
unsafe assumptions when there's more than one loop exit.
......
......@@ -70,8 +70,10 @@ extern void (*cselib_discard_hook) (cselib_val *);
extern void (*cselib_record_sets_hook) (rtx insn, struct cselib_set *sets,
int n_sets);
extern cselib_val *cselib_lookup (rtx, enum machine_mode, int);
extern cselib_val *cselib_lookup_from_insn (rtx, enum machine_mode, int, rtx);
extern cselib_val *cselib_lookup (rtx, enum machine_mode,
int, enum machine_mode);
extern cselib_val *cselib_lookup_from_insn (rtx, enum machine_mode,
int, enum machine_mode, rtx);
extern void cselib_init (int);
extern void cselib_clear_table (void);
extern void cselib_finish (void);
......@@ -85,7 +87,7 @@ extern rtx cselib_expand_value_rtx_cb (rtx, bitmap, int,
cselib_expand_callback, void *);
extern bool cselib_dummy_expand_value_rtx_cb (rtx, bitmap, int,
cselib_expand_callback, void *);
extern rtx cselib_subst_to_values (rtx);
extern rtx cselib_subst_to_values (rtx, enum machine_mode);
extern void cselib_invalidate_rtx (rtx);
extern void cselib_reset_table (unsigned int);
......
......@@ -806,82 +806,25 @@ free_store_info (insn_info_t insn_info)
insn_info->store_rec = NULL;
}
struct insn_size {
int size;
rtx insn;
};
/* Add an insn to do the add inside a x if it is a
PRE/POST-INC/DEC/MODIFY. D is an structure containing the insn and
the size of the mode of the MEM that this is inside of. */
/* Callback for for_each_inc_dec that emits an INSN that sets DEST to
SRC + SRCOFF before insn ARG. */
static int
replace_inc_dec (rtx *r, void *d)
emit_inc_dec_insn_before (rtx mem ATTRIBUTE_UNUSED,
rtx op ATTRIBUTE_UNUSED,
rtx dest, rtx src, rtx srcoff, void *arg)
{
rtx x = *r;
struct insn_size *data = (struct insn_size *)d;
switch (GET_CODE (x))
{
case PRE_INC:
case POST_INC:
{
rtx r1 = XEXP (x, 0);
rtx c = gen_int_mode (data->size, GET_MODE (r1));
emit_insn_before (gen_rtx_SET (VOIDmode, r1,
gen_rtx_PLUS (GET_MODE (r1), r1, c)),
data->insn);
return -1;
}
rtx insn = (rtx)arg;
case PRE_DEC:
case POST_DEC:
{
rtx r1 = XEXP (x, 0);
rtx c = gen_int_mode (-data->size, GET_MODE (r1));
emit_insn_before (gen_rtx_SET (VOIDmode, r1,
gen_rtx_PLUS (GET_MODE (r1), r1, c)),
data->insn);
return -1;
}
if (srcoff)
src = gen_rtx_PLUS (GET_MODE (src), src, srcoff);
case PRE_MODIFY:
case POST_MODIFY:
{
/* We can reuse the add because we are about to delete the
insn that contained it. */
rtx add = XEXP (x, 0);
rtx r1 = XEXP (add, 0);
emit_insn_before (gen_rtx_SET (VOIDmode, r1, add), data->insn);
return -1;
}
default:
return 0;
}
}
/* We can reuse all operands without copying, because we are about
to delete the insn that contained it. */
emit_insn_before (gen_rtx_SET (VOIDmode, dest, src), insn);
/* If X is a MEM, check the address to see if it is PRE/POST-INC/DEC/MODIFY
and generate an add to replace that. */
static int
replace_inc_dec_mem (rtx *r, void *d)
{
rtx x = *r;
if (x != NULL_RTX && MEM_P (x))
{
struct insn_size data;
data.size = GET_MODE_SIZE (GET_MODE (x));
data.insn = (rtx) d;
for_each_rtx (&XEXP (x, 0), replace_inc_dec, &data);
return -1;
}
return 0;
return -1;
}
/* Before we delete INSN, make sure that the auto inc/dec, if it is
......@@ -892,7 +835,7 @@ check_for_inc_dec (rtx insn)
{
rtx note = find_reg_note (insn, REG_INC, NULL_RTX);
if (note)
for_each_rtx (&insn, replace_inc_dec_mem, insn);
for_each_inc_dec (&insn, emit_inc_dec_insn_before, insn);
}
......@@ -1107,7 +1050,7 @@ canon_address (rtx mem,
*alias_set_out = 0;
cselib_lookup (mem_address, address_mode, 1);
cselib_lookup (mem_address, address_mode, 1, GET_MODE (mem));
if (dump_file)
{
......@@ -1187,7 +1130,7 @@ canon_address (rtx mem,
}
}
*base = cselib_lookup (address, address_mode, true);
*base = cselib_lookup (address, address_mode, true, GET_MODE (mem));
*group_id = -1;
if (*base == NULL)
......
......@@ -2738,7 +2738,7 @@ do_local_cprop (rtx x, rtx insn)
|| (GET_CODE (PATTERN (insn)) != USE
&& asm_noperands (PATTERN (insn)) < 0)))
{
cselib_val *val = cselib_lookup (x, GET_MODE (x), 0);
cselib_val *val = cselib_lookup (x, GET_MODE (x), 0, VOIDmode);
struct elt_loc_list *l;
if (!val)
......
......@@ -262,7 +262,7 @@ reload_cse_simplify_set (rtx set, rtx insn)
return 0;
#endif
val = cselib_lookup (src, GET_MODE (SET_DEST (set)), 0);
val = cselib_lookup (src, GET_MODE (SET_DEST (set)), 0, VOIDmode);
if (! val)
return 0;
......@@ -476,7 +476,7 @@ reload_cse_simplify_operands (rtx insn, rtx testreg)
continue;
}
#endif /* LOAD_EXTEND_OP */
v = cselib_lookup (op, recog_data.operand_mode[i], 0);
v = cselib_lookup (op, recog_data.operand_mode[i], 0, VOIDmode);
if (! v)
continue;
......
......@@ -1916,6 +1916,17 @@ extern int computed_jump_p (const_rtx);
typedef int (*rtx_function) (rtx *, void *);
extern int for_each_rtx (rtx *, rtx_function, void *);
/* Callback for for_each_inc_dec, to process the autoinc operation OP
within MEM that sets DEST to SRC + SRCOFF, or SRC if SRCOFF is
NULL. The callback is passed the same opaque ARG passed to
for_each_inc_dec. Return zero to continue looking for other
autoinc operations, -1 to skip OP's operands, and any other value
to interrupt the traversal and return that value to the caller of
for_each_inc_dec. */
typedef int (*for_each_inc_dec_fn) (rtx mem, rtx op, rtx dest, rtx src,
rtx srcoff, void *arg);
extern int for_each_inc_dec (rtx *, for_each_inc_dec_fn, void *arg);
typedef int (*rtx_equal_p_callback_function) (const_rtx *, const_rtx *,
rtx *, rtx *);
extern int rtx_equal_p_cb (const_rtx, const_rtx,
......
......@@ -2886,7 +2886,124 @@ for_each_rtx (rtx *x, rtx_function f, void *data)
return for_each_rtx_1 (*x, i, f, data);
}
/* Data structure that holds the internal state communicated between
for_each_inc_dec, for_each_inc_dec_find_mem and
for_each_inc_dec_find_inc_dec. */
struct for_each_inc_dec_ops {
/* The function to be called for each autoinc operation found. */
for_each_inc_dec_fn fn;
/* The opaque argument to be passed to it. */
void *arg;
/* The MEM we're visiting, if any. */
rtx mem;
};
static int for_each_inc_dec_find_mem (rtx *r, void *d);
/* Find PRE/POST-INC/DEC/MODIFY operations within *R, extract the
operands of the equivalent add insn and pass the result to the
operator specified by *D. */
static int
for_each_inc_dec_find_inc_dec (rtx *r, void *d)
{
rtx x = *r;
struct for_each_inc_dec_ops *data = (struct for_each_inc_dec_ops *)d;
switch (GET_CODE (x))
{
case PRE_INC:
case POST_INC:
{
int size = GET_MODE_SIZE (GET_MODE (data->mem));
rtx r1 = XEXP (x, 0);
rtx c = gen_int_mode (size, GET_MODE (r1));
return data->fn (data->mem, x, r1, r1, c, data->arg);
}
case PRE_DEC:
case POST_DEC:
{
int size = GET_MODE_SIZE (GET_MODE (data->mem));
rtx r1 = XEXP (x, 0);
rtx c = gen_int_mode (-size, GET_MODE (r1));
return data->fn (data->mem, x, r1, r1, c, data->arg);
}
case PRE_MODIFY:
case POST_MODIFY:
{
rtx r1 = XEXP (x, 0);
rtx add = XEXP (x, 1);
return data->fn (data->mem, x, r1, add, NULL, data->arg);
}
case MEM:
{
rtx save = data->mem;
int ret = for_each_inc_dec_find_mem (r, d);
data->mem = save;
return ret;
}
default:
return 0;
}
}
/* If *R is a MEM, find PRE/POST-INC/DEC/MODIFY operations within its
address, extract the operands of the equivalent add insn and pass
the result to the operator specified by *D. */
static int
for_each_inc_dec_find_mem (rtx *r, void *d)
{
rtx x = *r;
if (x != NULL_RTX && MEM_P (x))
{
struct for_each_inc_dec_ops *data = (struct for_each_inc_dec_ops *) d;
int result;
data->mem = x;
result = for_each_rtx (&XEXP (x, 0), for_each_inc_dec_find_inc_dec,
data);
if (result)
return result;
return -1;
}
return 0;
}
/* Traverse *X looking for MEMs, and for autoinc operations within
them. For each such autoinc operation found, call FN, passing it
the innermost enclosing MEM, the operation itself, the RTX modified
by the operation, two RTXs (the second may be NULL) that, once
added, represent the value to be held by the modified RTX
afterwards, and ARG. FN is to return -1 to skip looking for other
autoinc operations within the visited operation, 0 to continue the
traversal, or any other value to have it returned to the caller of
for_each_inc_dec. */
int
for_each_inc_dec (rtx *x,
for_each_inc_dec_fn fn,
void *arg)
{
struct for_each_inc_dec_ops data;
data.fn = fn;
data.arg = arg;
data.mem = NULL;
return for_each_rtx (x, for_each_inc_dec_find_mem, &data);
}
/* Searches X for any reference to REGNO, returning the rtx of the
reference found if any. Otherwise, returns NULL_RTX. */
......
......@@ -1566,7 +1566,7 @@ add_insn_mem_dependence (struct deps_desc *deps, bool read_p,
if (sched_deps_info->use_cselib)
{
mem = shallow_copy_rtx (mem);
XEXP (mem, 0) = cselib_subst_to_values (XEXP (mem, 0));
XEXP (mem, 0) = cselib_subst_to_values (XEXP (mem, 0), GET_MODE (mem));
}
link = alloc_EXPR_LIST (VOIDmode, canon_rtx (mem), *mem_list);
*mem_list = link;
......@@ -2283,8 +2283,9 @@ sched_analyze_1 (struct deps_desc *deps, rtx x, rtx insn)
= targetm.addr_space.address_mode (MEM_ADDR_SPACE (dest));
t = shallow_copy_rtx (dest);
cselib_lookup_from_insn (XEXP (t, 0), address_mode, 1, insn);
XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
cselib_lookup_from_insn (XEXP (t, 0), address_mode, 1,
GET_MODE (t), insn);
XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0), GET_MODE (t));
}
t = canon_rtx (t);
......@@ -2440,8 +2441,9 @@ sched_analyze_2 (struct deps_desc *deps, rtx x, rtx insn)
= targetm.addr_space.address_mode (MEM_ADDR_SPACE (t));
t = shallow_copy_rtx (t);
cselib_lookup_from_insn (XEXP (t, 0), address_mode, 1, insn);
XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
cselib_lookup_from_insn (XEXP (t, 0), address_mode, 1,
GET_MODE (t), insn);
XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0), GET_MODE (t));
}
if (!DEBUG_INSN_P (insn))
......
......@@ -960,8 +960,8 @@ debug_mem_addr_value (rtx x)
address_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
t = shallow_copy_rtx (x);
if (cselib_lookup (XEXP (t, 0), address_mode, 0))
XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
if (cselib_lookup (XEXP (t, 0), address_mode, 0, GET_MODE (t)))
XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0), GET_MODE (t));
t = canon_rtx (t);
addr = get_addr (XEXP (t, 0));
......
......@@ -737,7 +737,7 @@ use_narrower_mode_test (rtx *loc, void *data)
switch (GET_CODE (*loc))
{
case REG:
if (cselib_lookup (*loc, GET_MODE (SUBREG_REG (subreg)), 0))
if (cselib_lookup (*loc, GET_MODE (SUBREG_REG (subreg)), 0, VOIDmode))
return 1;
return -1;
case PLUS:
......@@ -3954,8 +3954,10 @@ variable_post_merge_new_vals (void **slot, void *info)
subsequent rounds. */
cselib_val *v;
gcc_assert (!cselib_lookup (node->loc,
GET_MODE (node->loc), 0));
v = cselib_lookup (node->loc, GET_MODE (node->loc), 1);
GET_MODE (node->loc), 0,
VOIDmode));
v = cselib_lookup (node->loc, GET_MODE (node->loc), 1,
VOIDmode);
cselib_preserve_value (v);
cselib_invalidate_rtx (node->loc);
cval = v->val_rtx;
......@@ -4793,7 +4795,7 @@ find_use_val (rtx x, enum machine_mode mode, struct count_use_info *cui)
return cui->sets[i].src_elt;
}
else
return cselib_lookup (x, mode, 0);
return cselib_lookup (x, mode, 0, VOIDmode);
}
return NULL;
......@@ -4822,14 +4824,15 @@ replace_expr_with_values (rtx loc)
else if (MEM_P (loc))
{
cselib_val *addr = cselib_lookup (XEXP (loc, 0),
get_address_mode (loc), 0);
get_address_mode (loc), 0,
GET_MODE (loc));
if (addr)
return replace_equiv_address_nv (loc, addr->val_rtx);
else
return NULL;
}
else
return cselib_subst_to_values (loc);
return cselib_subst_to_values (loc, VOIDmode);
}
/* Determine what kind of micro operation to choose for a USE. Return
......@@ -4849,7 +4852,8 @@ use_type (rtx loc, struct count_use_info *cui, enum machine_mode *modep)
rtx ploc = PAT_VAR_LOCATION_LOC (loc);
if (! VAR_LOC_UNKNOWN_P (ploc))
{
cselib_val *val = cselib_lookup (ploc, GET_MODE (loc), 1);
cselib_val *val = cselib_lookup (ploc, GET_MODE (loc), 1,
VOIDmode);
/* ??? flag_float_store and volatile mems are never
given values, but we could in theory use them for
......@@ -4871,7 +4875,8 @@ use_type (rtx loc, struct count_use_info *cui, enum machine_mode *modep)
if (REG_P (loc)
|| (find_use_val (loc, GET_MODE (loc), cui)
&& cselib_lookup (XEXP (loc, 0),
get_address_mode (loc), 0)))
get_address_mode (loc), 0,
GET_MODE (loc))))
return MO_VAL_SET;
}
else
......@@ -5033,13 +5038,15 @@ add_uses (rtx *ploc, void *data)
rtx mloc = vloc;
enum machine_mode address_mode = get_address_mode (mloc);
cselib_val *val
= cselib_lookup (XEXP (mloc, 0), address_mode, 0);
= cselib_lookup (XEXP (mloc, 0), address_mode, 0,
GET_MODE (mloc));
if (val && !cselib_preserved_value_p (val))
{
micro_operation moa;
preserve_value (val);
mloc = cselib_subst_to_values (XEXP (mloc, 0));
mloc = cselib_subst_to_values (XEXP (mloc, 0),
GET_MODE (mloc));
moa.type = MO_VAL_USE;
moa.insn = cui->insn;
moa.u.loc = gen_rtx_CONCAT (address_mode,
......@@ -5109,13 +5116,15 @@ add_uses (rtx *ploc, void *data)
rtx mloc = oloc;
enum machine_mode address_mode = get_address_mode (mloc);
cselib_val *val
= cselib_lookup (XEXP (mloc, 0), address_mode, 0);
= cselib_lookup (XEXP (mloc, 0), address_mode, 0,
GET_MODE (mloc));
if (val && !cselib_preserved_value_p (val))
{
micro_operation moa;
preserve_value (val);
mloc = cselib_subst_to_values (XEXP (mloc, 0));
mloc = cselib_subst_to_values (XEXP (mloc, 0),
GET_MODE (mloc));
moa.type = MO_VAL_USE;
moa.insn = cui->insn;
moa.u.loc = gen_rtx_CONCAT (address_mode,
......@@ -5225,7 +5234,7 @@ reverse_op (rtx val, const_rtx expr)
if (!SCALAR_INT_MODE_P (GET_MODE (src)) || XEXP (src, 0) == cfa_base_rtx)
return NULL_RTX;
v = cselib_lookup (XEXP (src, 0), GET_MODE (XEXP (src, 0)), 0);
v = cselib_lookup (XEXP (src, 0), GET_MODE (XEXP (src, 0)), 0, VOIDmode);
if (!v || !cselib_preserved_value_p (v))
return NULL_RTX;
......@@ -5346,13 +5355,15 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
rtx mloc = loc;
enum machine_mode address_mode = get_address_mode (mloc);
cselib_val *val = cselib_lookup (XEXP (mloc, 0),
address_mode, 0);
address_mode, 0,
GET_MODE (mloc));
if (val && !cselib_preserved_value_p (val))
{
preserve_value (val);
mo.type = MO_VAL_USE;
mloc = cselib_subst_to_values (XEXP (mloc, 0));
mloc = cselib_subst_to_values (XEXP (mloc, 0),
GET_MODE (mloc));
mo.u.loc = gen_rtx_CONCAT (address_mode, val->val_rtx, mloc);
mo.insn = cui->insn;
if (dump_file && (dump_flags & TDF_DETAILS))
......@@ -5411,7 +5422,7 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
if (GET_CODE (PATTERN (cui->insn)) == COND_EXEC)
{
cselib_val *oval = cselib_lookup (oloc, GET_MODE (oloc), 0);
cselib_val *oval = cselib_lookup (oloc, GET_MODE (oloc), 0, VOIDmode);
gcc_assert (oval != v);
gcc_assert (REG_P (oloc) || MEM_P (oloc));
......@@ -8077,7 +8088,8 @@ vt_add_function_parameter (tree parm)
if (offset)
return;
val = cselib_lookup (var_lowpart (mode, incoming), mode, true);
val = cselib_lookup (var_lowpart (mode, incoming), mode, true,
VOIDmode);
/* ??? Float-typed values in memory are not handled by
cselib. */
......@@ -8197,7 +8209,7 @@ vt_init_cfa_base (void)
frame_pointer_needed
? hard_frame_pointer_rtx : stack_pointer_rtx);
val = cselib_lookup_from_insn (cfa_base_rtx, GET_MODE (cfa_base_rtx), 1,
get_insns ());
VOIDmode, get_insns ());
preserve_value (val);
cselib_preserve_cfa_base_value (val, REGNO (cfa_base_rtx));
var_reg_decl_set (&VTI (ENTRY_BLOCK_PTR)->out, cfa_base_rtx,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment