64 lines
1.8 KiB
Diff
64 lines
1.8 KiB
Diff
Revert:
|
|
[PR106746] drop cselib addr lookup in debug insn mem
|
|
|
|
The testcase used to get scheduled differently depending on the
|
|
presence of debug insns with MEMs. It's not clear to me why those
|
|
MEMs affected scheduling, but the cselib pre-canonicalization of the
|
|
MEM address is not used at all when analyzing debug insns, so the
|
|
memory allocation and lookup are pure waste. Somehow, avoiding that
|
|
waste fixes the problem, or makes it go latent.
|
|
|
|
2023-01-19 Alexandre Oliva <oliva@adacore.com>
|
|
|
|
PR debug/106746
|
|
* sched-deps.cc (sched_analyze_2): Skip cselib address lookup
|
|
within debug insns.
|
|
|
|
--- gcc/sched-deps.cc
|
|
+++ gcc/sched-deps.cc
|
|
@@ -2605,26 +2605,26 @@ sched_analyze_2 (class deps_desc *deps, rtx x, rtx_insn *insn)
|
|
|
|
case MEM:
|
|
{
|
|
- if (!DEBUG_INSN_P (insn))
|
|
- {
|
|
- /* Reading memory. */
|
|
- rtx_insn_list *u;
|
|
- rtx_insn_list *pending;
|
|
- rtx_expr_list *pending_mem;
|
|
- rtx t = x;
|
|
+ /* Reading memory. */
|
|
+ rtx_insn_list *u;
|
|
+ rtx_insn_list *pending;
|
|
+ rtx_expr_list *pending_mem;
|
|
+ rtx t = x;
|
|
|
|
- if (sched_deps_info->use_cselib)
|
|
- {
|
|
- machine_mode address_mode = get_address_mode (t);
|
|
-
|
|
- t = shallow_copy_rtx (t);
|
|
- cselib_lookup_from_insn (XEXP (t, 0), address_mode, 1,
|
|
- GET_MODE (t), insn);
|
|
- XEXP (t, 0)
|
|
- = cselib_subst_to_values_from_insn (XEXP (t, 0), GET_MODE (t),
|
|
- insn);
|
|
- }
|
|
+ if (sched_deps_info->use_cselib)
|
|
+ {
|
|
+ machine_mode address_mode = get_address_mode (t);
|
|
+
|
|
+ t = shallow_copy_rtx (t);
|
|
+ cselib_lookup_from_insn (XEXP (t, 0), address_mode, 1,
|
|
+ GET_MODE (t), insn);
|
|
+ XEXP (t, 0)
|
|
+ = cselib_subst_to_values_from_insn (XEXP (t, 0), GET_MODE (t),
|
|
+ insn);
|
|
+ }
|
|
|
|
+ if (!DEBUG_INSN_P (insn))
|
|
+ {
|
|
t = canon_rtx (t);
|
|
pending = deps->pending_read_insns;
|
|
pending_mem = deps->pending_read_mems;
|