Commit 78f63b79 by Bin Cheng Committed by Bin Cheng

common.opt (funsafe-loop-optimizations): Mark ignore.

	* common.opt (funsafe-loop-optimizations): Mark ignore.
	* doc/invoke.texi (funsafe-loop-optimizations): Remove.
	* loop-iv.c (get_simple_loop_desc): Remove unsafe-loop-optimizations
	related code.
	* tree-ssa-loop-niter.c (finite_loop_p): Ditto.
	* config/bfin/bfin.c (bfin_can_use_doloop_p): Ditto.

From-SVN: r238642
parent faa1612a
2016-07-22 Bin Cheng <bin.cheng@arm.com> 2016-07-22 Bin Cheng <bin.cheng@arm.com>
* common.opt (funsafe-loop-optimizations): Mark ignore.
* doc/invoke.texi (funsafe-loop-optimizations): Remove.
* loop-iv.c (get_simple_loop_desc): Remove unsafe-loop-optimizations
related code.
* tree-ssa-loop-niter.c (finite_loop_p): Ditto.
* config/bfin/bfin.c (bfin_can_use_doloop_p): Ditto.
2016-07-22 Bin Cheng <bin.cheng@arm.com>
* tree-ssa-loop-niter.h (number_of_iterations_exit_assumptions): New * tree-ssa-loop-niter.h (number_of_iterations_exit_assumptions): New
Parameter. Parameter.
* tree-ssa-loop-niter.c (number_of_iterations_exit_assumptions): New * tree-ssa-loop-niter.c (number_of_iterations_exit_assumptions): New
......
...@@ -2507,8 +2507,8 @@ Perform loop unrolling for all loops. ...@@ -2507,8 +2507,8 @@ Perform loop unrolling for all loops.
; that control loops do not overflow and that the loops with nontrivial ; that control loops do not overflow and that the loops with nontrivial
; exit condition are not infinite ; exit condition are not infinite
funsafe-loop-optimizations funsafe-loop-optimizations
Common Report Var(flag_unsafe_loop_optimizations) Optimization Common Ignore
Allow loop optimizations to assume that the loops behave in normal way. Does nothing. Preserved for backward compatibility.
fassociative-math fassociative-math
Common Report Var(flag_associative_math) SetByCombined Optimization Common Report Var(flag_associative_math) SetByCombined Optimization
......
...@@ -3375,10 +3375,7 @@ bfin_can_use_doloop_p (const widest_int &, const widest_int &iterations_max, ...@@ -3375,10 +3375,7 @@ bfin_can_use_doloop_p (const widest_int &, const widest_int &iterations_max,
/* Due to limitations in the hardware (an initial loop count of 0 /* Due to limitations in the hardware (an initial loop count of 0
does not loop 2^32 times) we must avoid to generate a hardware does not loop 2^32 times) we must avoid to generate a hardware
loops when we cannot rule out this case. */ loops when we cannot rule out this case. */
if (!flag_unsafe_loop_optimizations return (wi::ltu_p (iterations_max, 0xFFFFFFFF));
&& wi::geu_p (iterations_max, 0xFFFFFFFF))
return false;
return true;
} }
/* Increment the counter for the number of loop instructions in the /* Increment the counter for the number of loop instructions in the
......
...@@ -414,7 +414,7 @@ Objective-C and Objective-C++ Dialects}. ...@@ -414,7 +414,7 @@ Objective-C and Objective-C++ Dialects}.
-ftree-switch-conversion -ftree-tail-merge -ftree-ter @gol -ftree-switch-conversion -ftree-tail-merge -ftree-ter @gol
-ftree-vectorize -ftree-vrp -funconstrained-commons @gol -ftree-vectorize -ftree-vrp -funconstrained-commons @gol
-funit-at-a-time -funroll-all-loops -funroll-loops @gol -funit-at-a-time -funroll-all-loops -funroll-loops @gol
-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol -funsafe-math-optimizations -funswitch-loops @gol
-fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt @gol -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt @gol
-fweb -fwhole-program -fwpa -fuse-linker-plugin @gol -fweb -fwhole-program -fwpa -fuse-linker-plugin @gol
--param @var{name}=@var{value} --param @var{name}=@var{value}
...@@ -6818,15 +6818,6 @@ number of iterations of a loop are used to guide loop unrolling and peeling ...@@ -6818,15 +6818,6 @@ number of iterations of a loop are used to guide loop unrolling and peeling
and loop exit test optimizations. and loop exit test optimizations.
This option is enabled by default. This option is enabled by default.
@item -funsafe-loop-optimizations
@opindex funsafe-loop-optimizations
This option tells the loop optimizer to assume that loop indices do not
overflow, and that loops with nontrivial exit condition are not
infinite. This enables a wider range of loop optimizations even if
the loop optimizer itself cannot prove that these assumptions are valid.
If you use @option{-Wunsafe-loop-optimizations}, the compiler warns you
if it finds this kind of loop.
@item -funconstrained-commons @item -funconstrained-commons
@opindex funconstrained-commons @opindex funconstrained-commons
This option tells the compiler that variables declared in common blocks This option tells the compiler that variables declared in common blocks
......
...@@ -3027,42 +3027,6 @@ get_simple_loop_desc (struct loop *loop) ...@@ -3027,42 +3027,6 @@ get_simple_loop_desc (struct loop *loop)
iv_analysis_loop_init (loop); iv_analysis_loop_init (loop);
find_simple_exit (loop, desc); find_simple_exit (loop, desc);
loop->simple_loop_desc = desc; loop->simple_loop_desc = desc;
if (desc->simple_p && (desc->assumptions || desc->infinite))
{
const char *wording;
/* Assume that no overflow happens and that the loop is finite.
We already warned at the tree level if we ran optimizations there. */
if (!flag_tree_loop_optimize && warn_unsafe_loop_optimizations)
{
if (desc->infinite)
{
wording =
flag_unsafe_loop_optimizations
? N_("assuming that the loop is not infinite")
: N_("cannot optimize possibly infinite loops");
warning (OPT_Wunsafe_loop_optimizations, "%s",
gettext (wording));
}
if (desc->assumptions)
{
wording =
flag_unsafe_loop_optimizations
? N_("assuming that the loop counter does not overflow")
: N_("cannot optimize loop, the loop counter may overflow");
warning (OPT_Wunsafe_loop_optimizations, "%s",
gettext (wording));
}
}
if (flag_unsafe_loop_optimizations && single_exit (loop))
{
desc->assumptions = NULL_RTX;
desc->infinite = NULL_RTX;
}
}
return desc; return desc;
} }
......
...@@ -2362,8 +2362,6 @@ finite_loop_p (struct loop *loop) ...@@ -2362,8 +2362,6 @@ finite_loop_p (struct loop *loop)
widest_int nit; widest_int nit;
int flags; int flags;
if (flag_unsafe_loop_optimizations)
return true;
flags = flags_from_decl_or_type (current_function_decl); flags = flags_from_decl_or_type (current_function_decl);
if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE)) if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE))
{ {
......
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