aboutsummaryrefslogtreecommitdiff
path: root/gcc/var-tracking.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-02-06 16:47:12 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2014-02-06 16:47:12 +0100
commitaf116cae675e31b999844b7243c01bed9517c51c (patch)
tree8de46f81cd70d54fc09484c5fbcc0e6550226bb6 /gcc/var-tracking.c
parent0f5e5e02b74643e16969a2a6e4bbee77185efaf0 (diff)
downloadgcc-af116cae675e31b999844b7243c01bed9517c51c.zip
gcc-af116cae675e31b999844b7243c01bed9517c51c.tar.gz
gcc-af116cae675e31b999844b7243c01bed9517c51c.tar.bz2
re PR debug/59992 (Compilation of insn-recog.c too slow due to var-tracking)
PR debug/59992 * var-tracking.c (adjust_mems): Before adding a SET to amd->side_effects, adjust it's SET_SRC using simplify_replace_fn_rtx. * gcc.dg/pr59992.c: New test. From-SVN: r207562
Diffstat (limited to 'gcc/var-tracking.c')
-rw-r--r--gcc/var-tracking.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index cfa7850..a13cac7 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -1067,10 +1067,13 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
? GET_MODE_SIZE (amd->mem_mode)
: -GET_MODE_SIZE (amd->mem_mode),
GET_MODE (loc)));
+ store_save = amd->store;
+ amd->store = false;
+ tem = simplify_replace_fn_rtx (tem, old_rtx, adjust_mems, data);
+ amd->store = store_save;
amd->side_effects = alloc_EXPR_LIST (0,
gen_rtx_SET (VOIDmode,
- XEXP (loc, 0),
- tem),
+ XEXP (loc, 0), tem),
amd->side_effects);
return addr;
case PRE_MODIFY:
@@ -1080,10 +1083,14 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
addr = XEXP (loc, 0);
gcc_assert (amd->mem_mode != VOIDmode);
addr = simplify_replace_fn_rtx (addr, old_rtx, adjust_mems, data);
+ store_save = amd->store;
+ amd->store = false;
+ tem = simplify_replace_fn_rtx (XEXP (loc, 1), old_rtx,
+ adjust_mems, data);
+ amd->store = store_save;
amd->side_effects = alloc_EXPR_LIST (0,
gen_rtx_SET (VOIDmode,
- XEXP (loc, 0),
- XEXP (loc, 1)),
+ XEXP (loc, 0), tem),
amd->side_effects);
return addr;
case SUBREG: