Commit b7442c2f by Jan Hubicka Committed by Jan Hubicka

tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Add edge_to_cancel parameter…

tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Add edge_to_cancel parameter and use it to estimate code optimized out in the...


	* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Add edge_to_cancel
	parameter and use it to estimate code optimized out in the final iteration.
	(loop_edge_to_cancel): New function.
	(try_unroll_loop_completely): New IRRED_IVALIDATED parameter;
	handle unrolling loops with bounds given via max_loop_iteratins;
	handle unrolling non-inner loops when code size shrinks;
	tidy dump output; when the last iteration loop still stays
	as loop in the CFG forcongly redirect the latch to
	__builtin_unreachable.
	(canonicalize_loop_induction_variables): Add irred_invlaidated
	parameter; record niter bound derrived; dump
	max_loop_iterations bounds; call try_unroll_loop_completely
	even if no niter bound is given.
	(canonicalize_induction_variables): Handle irred_invalidated.
	(tree_unroll_loops_completely): Handle non-innermost loops;
	handle irred_invalidated.
	* cfgloop.h (unlop): Declare.
	* cfgloopmanip.c (unloop): Export.
	* tree.c (build_common_builtin_nodes): Build BULTIN_UNREACHABLE.

	* gcc.target/i386/l_fma_float_?.c: Update.
	* gcc.target/i386/l_fma_double_?.c: Update.
	* gfortran.dg/do_1.f90: XFAIL
	* gcc.dg/tree-ssa/cunroll-1.c: New testcase.
	* gcc.dg/tree-ssa/cunroll-2.c: New testcase.
	* gcc.dg/tree-ssa/cunroll-3.c: New testcase.
	* gcc.dg/tree-ssa/cunroll-4.c: New testcase.
	* gcc.dg/tree-ssa/cunroll-5.c: New testcase.
	* gcc.dg/tree-ssa/ldist-17.c: Block cunroll to make testcase still
	valid.

From-SVN: r192538
parent 90922d36
2012-10-17 Jan Hubicka <jh@suse.cz>
* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Add edge_to_cancel
parameter and use it to estimate code optimized out in the final iteration.
(loop_edge_to_cancel): New function.
(try_unroll_loop_completely): New IRRED_IVALIDATED parameter;
handle unrolling loops with bounds given via max_loop_iteratins;
handle unrolling non-inner loops when code size shrinks;
tidy dump output; when the last iteration loop still stays
as loop in the CFG forcongly redirect the latch to
__builtin_unreachable.
(canonicalize_loop_induction_variables): Add irred_invlaidated
parameter; record niter bound derrived; dump
max_loop_iterations bounds; call try_unroll_loop_completely
even if no niter bound is given.
(canonicalize_induction_variables): Handle irred_invalidated.
(tree_unroll_loops_completely): Handle non-innermost loops;
handle irred_invalidated.
* cfgloop.h (unlop): Declare.
* cfgloopmanip.c (unloop): Export.
* tree.c (build_common_builtin_nodes): Build BULTIN_UNREACHABLE.
2012-10-17 Michael Meissner <meissner@linux.vnet.ibm.com>
* opth-gen.awk (TARGET_* generation): Always generate TARGET_<xxx>
......@@ -320,7 +320,8 @@ extern struct loop *loopify (edge, edge,
struct loop * loop_version (struct loop *, void *,
basic_block *, unsigned, unsigned, unsigned, bool);
extern bool remove_path (edge);
void scale_loop_frequencies (struct loop *, int, int);
extern void unloop (struct loop *, bool *);
extern void scale_loop_frequencies (struct loop *, int, int);
/* Induction variable analysis. */
......
......@@ -37,7 +37,6 @@ static int find_path (edge, basic_block **);
static void fix_loop_placements (struct loop *, bool *);
static bool fix_bb_placement (basic_block);
static void fix_bb_placements (basic_block, bool *);
static void unloop (struct loop *, bool *);
/* Checks whether basic block BB is dominated by DATA. */
static bool
......@@ -895,7 +894,7 @@ loopify (edge latch_edge, edge header_edge,
If this may cause the information about irreducible regions to become
invalid, IRRED_INVALIDATED is set to true. */
static void
void
unloop (struct loop *loop, bool *irred_invalidated)
{
basic_block *body;
......
2012-10-16 Jan Hubicka <jh@suse.cz>
* gcc.target/i386/l_fma_float_?.c: Update.
* gcc.target/i386/l_fma_double_?.c: Update.
* gfortran.dg/do_1.f90: XFAIL
* gcc.dg/tree-ssa/cunroll-1.c: New testcase.
* gcc.dg/tree-ssa/cunroll-2.c: New testcase.
* gcc.dg/tree-ssa/cunroll-3.c: New testcase.
* gcc.dg/tree-ssa/cunroll-4.c: New testcase.
* gcc.dg/tree-ssa/cunroll-5.c: New testcase.
* gcc.dg/tree-ssa/ldist-17.c: Block cunroll to make testcase still
valid.
2012-10-16 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR c/53063
......
/* { dg-do compile } */
/* { dg-options "-O2 -ftree-loop-distribution -ftree-loop-distribute-patterns -fdump-tree-ldist-details" } */
/* { dg-options "-O2 -ftree-loop-distribution -ftree-loop-distribute-patterns -fdump-tree-ldist-details -fdisable-tree-cunroll -fdisable-tree-cunrolli" } */
typedef int mad_fixed_t;
struct mad_pcm
......
......@@ -16,11 +16,11 @@
/* { dg-final { scan-assembler-times "vfnmadd231pd" 4 } } */
/* { dg-final { scan-assembler-times "vfnmsub132pd" 4 } } */
/* { dg-final { scan-assembler-times "vfnmsub231pd" 4 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd213sd" 8 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 8 } } */
/* { dg-final { scan-assembler-times "vfmsub213sd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd213sd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub213sd" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 20 } } */
/* { dg-final { scan-assembler-times "vfmadd213sd" 20 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 20 } } */
/* { dg-final { scan-assembler-times "vfmsub213sd" 20 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 20 } } */
/* { dg-final { scan-assembler-times "vfnmadd213sd" 20 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 20 } } */
/* { dg-final { scan-assembler-times "vfnmsub213sd" 20 } } */
......@@ -12,7 +12,7 @@
/* { dg-final { scan-assembler-times "vfmsub132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 40 } } */
......@@ -16,11 +16,11 @@
/* { dg-final { scan-assembler-times "vfnmadd231pd" 4 } } */
/* { dg-final { scan-assembler-times "vfnmsub132pd" 4 } } */
/* { dg-final { scan-assembler-times "vfnmsub231pd" 4 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd213sd" 8 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 8 } } */
/* { dg-final { scan-assembler-times "vfmsub213sd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd213sd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub213sd" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 20 } } */
/* { dg-final { scan-assembler-times "vfmadd213sd" 20 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 20 } } */
/* { dg-final { scan-assembler-times "vfmsub213sd" 20 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 20 } } */
/* { dg-final { scan-assembler-times "vfnmadd213sd" 20 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 20 } } */
/* { dg-final { scan-assembler-times "vfnmsub213sd" 20 } } */
......@@ -12,7 +12,7 @@
/* { dg-final { scan-assembler-times "vfmsub132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 40 } } */
......@@ -12,7 +12,7 @@
/* { dg-final { scan-assembler-times "vfmsub132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 40 } } */
......@@ -12,7 +12,7 @@
/* { dg-final { scan-assembler-times "vfmsub132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132pd" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 16 } } */
/* { dg-final { scan-assembler-times "vfmadd132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfmsub132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfnmadd132sd" 40 } } */
/* { dg-final { scan-assembler-times "vfnmsub132sd" 40 } } */
......@@ -16,11 +16,11 @@
/* { dg-final { scan-assembler-times "vfnmadd231ps" 4 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ps" 4 } } */
/* { dg-final { scan-assembler-times "vfnmsub231ps" 4 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd213ss" 8 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 8 } } */
/* { dg-final { scan-assembler-times "vfmsub213ss" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd213ss" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub213ss" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 36 } } */
/* { dg-final { scan-assembler-times "vfmadd213ss" 36 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 36 } } */
/* { dg-final { scan-assembler-times "vfmsub213ss" 36 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 36 } } */
/* { dg-final { scan-assembler-times "vfnmadd213ss" 36 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 36 } } */
/* { dg-final { scan-assembler-times "vfnmsub213ss" 36 } } */
......@@ -12,7 +12,7 @@
/* { dg-final { scan-assembler-times "vfmsub132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 72 } } */
......@@ -16,11 +16,11 @@
/* { dg-final { scan-assembler-times "vfnmadd231ps" 4 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ps" 4 } } */
/* { dg-final { scan-assembler-times "vfnmsub231ps" 4 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd213ss" 8 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 8 } } */
/* { dg-final { scan-assembler-times "vfmsub213ss" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd213ss" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub213ss" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 36 } } */
/* { dg-final { scan-assembler-times "vfmadd213ss" 36 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 36 } } */
/* { dg-final { scan-assembler-times "vfmsub213ss" 36 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 36 } } */
/* { dg-final { scan-assembler-times "vfnmadd213ss" 36 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 36 } } */
/* { dg-final { scan-assembler-times "vfnmsub213ss" 36 } } */
......@@ -12,7 +12,7 @@
/* { dg-final { scan-assembler-times "vfmsub132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 72 } } */
......@@ -12,7 +12,7 @@
/* { dg-final { scan-assembler-times "vfmsub132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 72 } } */
......@@ -12,7 +12,7 @@
/* { dg-final { scan-assembler-times "vfmsub132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ps" 8 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 16 } } */
/* { dg-final { scan-assembler-times "vfmadd132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfmsub132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfnmadd132ss" 72 } } */
/* { dg-final { scan-assembler-times "vfnmsub132ss" 72 } } */
! { dg-do run }
! { dg-do run { xfail *-*-* } }
! XFAIL is tracked in PR 54932
! Program to check corner cases for DO statements.
program do_1
implicit none
......
......@@ -9524,6 +9524,15 @@ build_common_builtin_nodes (void)
tree tmp, ftype;
int ecf_flags;
if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
{
ftype = build_function_type (void_type_node, void_list_node);
local_define_builtin ("__builtin_unreachable", ftype, BUILT_IN_UNREACHABLE,
"__builtin_unreachable",
ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
| ECF_CONST | ECF_LEAF);
}
if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
|| !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
{
......
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