Commit 1a218fc9 by Ian Lance Taylor Committed by Ian Lance Taylor

common.opt (fkeep-gc-roots-live): New undocumented option.

gcc/:
	* common.opt (fkeep-gc-roots-live): New undocumented option.
	* tree-ssa-loop-ivopts.c (add_candidate_1): If
	-fkeep-gc-roots-live, skip pointers.
	(add_iv_candidate_for_biv): Handle add_candidate_1 returning
	NULL.

gcc/testsuite/:
	* gcc.dg/tree-ssa/ivopt_5.c: New test.

From-SVN: r232888
parent 5d70666e
2016-01-27 Ian Lance Taylor <iant@google.com>
* common.opt (fkeep-gc-roots-live): New undocumented option.
* tree-ssa-loop-ivopts.c (add_candidate_1): If
-fkeep-gc-roots-live, skip pointers.
(add_iv_candidate_for_biv): Handle add_candidate_1 returning
NULL.
2016-01-27 Uros Bizjak <ubizjak@gmail.com> 2016-01-27 Uros Bizjak <ubizjak@gmail.com>
PR target/69512 PR target/69512
......
...@@ -1380,6 +1380,10 @@ Common Report Var(flag_hoist_adjacent_loads) Optimization ...@@ -1380,6 +1380,10 @@ Common Report Var(flag_hoist_adjacent_loads) Optimization
Enable hoisting adjacent loads to encourage generating conditional move Enable hoisting adjacent loads to encourage generating conditional move
instructions. instructions.
fkeep-gc-roots-live
Common Undocumented Report Var(flag_keep_gc_roots_live) Optimization
; Always keep a pointer to a live memory block
floop-parallelize-all floop-parallelize-all
Common Report Var(flag_loop_parallelize_all) Optimization Common Report Var(flag_loop_parallelize_all) Optimization
Mark all loops as parallel. Mark all loops as parallel.
......
2016-01-27 Ian Lance Taylor <iant@google.com>
* gcc.dg/tree-ssa/ivopt_5.c: New test.
2016-01-27 Ryan Burn <contact@rnburn.com> 2016-01-27 Ryan Burn <contact@rnburn.com>
PR cilkplus/69267 PR cilkplus/69267
......
/* { dg-options "-O2 -fdump-tree-ivopts -fkeep-gc-roots-live" } */
/* Only integer ivopts here when using -fkeep-gc-roots-live. */
void foo (char *pstart, int n)
{
char *p;
char *pend = pstart + n;
for (p = pstart; p < pend; p++)
*p = 1;
}
void foo1 (char *pstart, int n)
{
char *p;
char *pend = pstart + n;
for (p = pstart; p != pend; p++)
*p = 1;
}
/* { dg-final { scan-tree-dump-times "ivtmp.\[0-9_\]* = PHI <\[^0\]" 0 "ivopts"} } */
...@@ -2815,6 +2815,16 @@ add_candidate_1 (struct ivopts_data *data, ...@@ -2815,6 +2815,16 @@ add_candidate_1 (struct ivopts_data *data,
struct iv_cand *cand = NULL; struct iv_cand *cand = NULL;
tree type, orig_type; tree type, orig_type;
/* -fkeep-gc-roots-live means that we have to keep a real pointer
live, but the ivopts code may replace a real pointer with one
pointing before or after the memory block that is then adjusted
into the memory block during the loop. FIXME: It would likely be
better to actually force the pointer live and still use ivopts;
for example, it would be enough to write the pointer into memory
and keep it there until after the loop. */
if (flag_keep_gc_roots_live && POINTER_TYPE_P (TREE_TYPE (base)))
return NULL;
/* For non-original variables, make sure their values are computed in a type /* For non-original variables, make sure their values are computed in a type
that does not invoke undefined behavior on overflows (since in general, that does not invoke undefined behavior on overflows (since in general,
we cannot prove that these induction variables are non-wrapping). */ we cannot prove that these induction variables are non-wrapping). */
...@@ -3083,9 +3093,12 @@ add_iv_candidate_for_biv (struct ivopts_data *data, struct iv *iv) ...@@ -3083,9 +3093,12 @@ add_iv_candidate_for_biv (struct ivopts_data *data, struct iv *iv)
cand = add_candidate_1 (data, cand = add_candidate_1 (data,
iv->base, iv->step, true, IP_ORIGINAL, NULL, iv->base, iv->step, true, IP_ORIGINAL, NULL,
SSA_NAME_DEF_STMT (def)); SSA_NAME_DEF_STMT (def));
if (cand)
{
cand->var_before = iv->ssa_name; cand->var_before = iv->ssa_name;
cand->var_after = def; cand->var_after = def;
} }
}
else else
gcc_assert (gimple_bb (phi) == data->current_loop->header); gcc_assert (gimple_bb (phi) == data->current_loop->header);
} }
......
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