aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-loop-versioning.cc
diff options
context:
space:
mode:
authorRobin Dapp <rdapp@linux.ibm.com>2019-08-26 10:18:24 +0000
committerRobin Dapp <rdapp@gcc.gnu.org>2019-08-26 10:18:24 +0000
commite944354ec05891474b0d204c6c239c04ee7b527b (patch)
tree7d6c6f10d0b328443395adfe609be168ff339997 /gcc/gimple-loop-versioning.cc
parentbf05a3bbb58b355899ccabe861a06e85b7abe6e4 (diff)
downloadgcc-e944354ec05891474b0d204c6c239c04ee7b527b.zip
gcc-e944354ec05891474b0d204c6c239c04ee7b527b.tar.gz
gcc-e944354ec05891474b0d204c6c239c04ee7b527b.tar.bz2
[PATCH 1/2] Allow folding all statements.
This patch allows users of the substitute_and_fold_engine to enable folding all statements. It is now enabled for VRP which is needed for the match.pd pattern in patch 2/2. The loop versioning pass was missing one case when deconstructing addresses that would only be triggered after this patch for me: It could handle addition and subsequent convert/nop but not a convert/nop directly. This would cause the hash to be calculated differently and, in turn, cause the pass to miss a versioning opportunity. Fixed this by adding the missing case. -- gcc/ChangeLog: 2019-08-26 Robin Dapp <rdapp@linux.ibm.com> * gimple-loop-versioning.cc (loop_versioning::record_address_fragment): Add nop_convert case. * tree-ssa-propagate.c (substitute_and_fold_dom_walker::before_dom_children): Fold all statements if requested. * tree-ssa-propagate.h (class substitute_and_fold_engine): Allow to fold all statements. * tree-vrp.c (class vrp_folder): Let substitute_and_fold_engine fold all statements. From-SVN: r274923
Diffstat (limited to 'gcc/gimple-loop-versioning.cc')
-rw-r--r--gcc/gimple-loop-versioning.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/gimple-loop-versioning.cc b/gcc/gimple-loop-versioning.cc
index 8fa1948..35344b7 100644
--- a/gcc/gimple-loop-versioning.cc
+++ b/gcc/gimple-loop-versioning.cc
@@ -1266,6 +1266,12 @@ loop_versioning::record_address_fragment (gimple *stmt,
continue;
}
}
+ if (CONVERT_EXPR_CODE_P (code))
+ {
+ tree op1 = gimple_assign_rhs1 (assign);
+ address->terms[i].expr = strip_casts (op1);
+ continue;
+ }
}
i += 1;
}