diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-12 15:23:33 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-12 15:23:33 +0000 |
commit | 9456798d72d0e81a2a553287f436dcb05cff175a (patch) | |
tree | 1e80106d0c4f828b72deb6e782c20d788c0dd818 /gcc/gimple-ssa-strength-reduction.c | |
parent | e89aee4174fe58eaba553027558144a0f423960c (diff) | |
download | gcc-9456798d72d0e81a2a553287f436dcb05cff175a.tar.gz |
[./]
2013-11-12 Basile Starynkevitch <basile@starynkevitch.net>
{{merge with trunk GCC 4.9 svn rev 204695; previous trunk merge
was 202773; very unstable...}}
[gcc/]
2013-11-11 Basile Starynkevitch <basile@starynkevitch.net>
{{merge with trunk GCC 4.9 svn rev 204695; very unstable}}
* melt-runtime.h (MELT_VERSION_STRING): Bump to "1.0.1+".
* melt-run.proto.h: Update copyright years.
include tree-cfg.h instead of tree-flow.h for GCC 4.9.
* melt-runtime.cc: Include tree-cfg.h not tree-flow.h for GCC 4.9.
(meltgc_walk_gimple_seq): Fatal error with GCC 4.9 since the
walk_use_def_chains function disappeared from GCC...
* melt/xtramelt-ana-gimple.melt (walk_gimple_seq)
(walk_gimple_seq_unique_tree): issue some #warning-s for GCC 4.9
because walk_use_def_chains function disappeared from GCC...
* melt/xtramelt-probe.melt (probe_docmd): Issue an error since
currently the MELT probe is not usable with GCC 4.9....
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@204705 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gimple-ssa-strength-reduction.c')
-rw-r--r-- | gcc/gimple-ssa-strength-reduction.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c index 8d48adde01d..88afc91200f 100644 --- a/gcc/gimple-ssa-strength-reduction.c +++ b/gcc/gimple-ssa-strength-reduction.c @@ -42,12 +42,17 @@ along with GCC; see the file COPYING3. If not see #include "tree-pass.h" #include "cfgloop.h" #include "gimple-pretty-print.h" -#include "tree-ssa.h" +#include "gimple-ssa.h" +#include "tree-cfg.h" +#include "tree-phinodes.h" +#include "ssa-iterators.h" +#include "tree-ssanames.h" #include "domwalk.h" #include "pointer-set.h" #include "expmed.h" #include "params.h" #include "hash-table.h" +#include "tree-ssa-address.h" /* Information about a strength reduction candidate. Each statement in the candidate table represents an expression of one of the @@ -379,6 +384,7 @@ static bool address_arithmetic_p; /* Forward function declarations. */ static slsr_cand_t base_cand_from_table (tree); static tree introduce_cast_before_cand (slsr_cand_t, tree, tree); +static bool legal_cast_p_1 (tree, tree); /* Produce a pointer to the IDX'th candidate in the candidate vector. */ @@ -768,6 +774,14 @@ backtrace_base_for_ref (tree *pbase) slsr_cand_t base_cand; STRIP_NOPS (base_in); + + /* Strip off widening conversion(s) to handle cases where + e.g. 'B' is widened from an 'int' in order to calculate + a 64-bit address. */ + if (CONVERT_EXPR_P (base_in) + && legal_cast_p_1 (base_in, TREE_OPERAND (base_in, 0))) + base_in = get_unwidened (base_in, NULL_TREE); + if (TREE_CODE (base_in) != SSA_NAME) return tree_to_double_int (integer_zero_node); @@ -786,7 +800,7 @@ backtrace_base_for_ref (tree *pbase) else if (base_cand->kind == CAND_ADD && TREE_CODE (base_cand->stride) == INTEGER_CST && integer_onep (base_cand->stride)) - { + { /* X = B + (i * S), S is integer one. */ *pbase = base_cand->base_expr; return base_cand->index; @@ -3564,8 +3578,8 @@ const pass_data pass_data_strength_reduction = class pass_strength_reduction : public gimple_opt_pass { public: - pass_strength_reduction(gcc::context *ctxt) - : gimple_opt_pass(pass_data_strength_reduction, ctxt) + pass_strength_reduction (gcc::context *ctxt) + : gimple_opt_pass (pass_data_strength_reduction, ctxt) {} /* opt_pass methods: */ |