From 59a05b0ca26ba2af84ccafe3422f35c0460dff1c Mon Sep 17 00:00:00 2001 From: Eric Botcazou <ebotcazou@adacore.com> Date: Wed, 21 Oct 2009 10:08:39 +0000 Subject: [PATCH] tree-vect-stmts.c (exist_non_indexing_operands_for_use_p): Tweak order of checks. * tree-vect-stmts.c (exist_non_indexing_operands_for_use_p): Tweak order of checks. From-SVN: r153051 --- gcc/ChangeLog | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gnat.dg/loop_optimization7.adb | 16 ++++++++++++++++ gcc/testsuite/gnat.dg/loop_optimization7.ads | 9 +++++++++ gcc/testsuite/gnat.dg/loop_optimization7_pkg.ads | 10 ++++++++++ gcc/tree-vect-stmts.c | 10 ++++------ 6 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/loop_optimization7.adb create mode 100644 gcc/testsuite/gnat.dg/loop_optimization7.ads create mode 100644 gcc/testsuite/gnat.dg/loop_optimization7_pkg.ads diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 933ce5f978ce..4b96a2f00dbc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * tree-vect-stmts.c (exist_non_indexing_operands_for_use_p): Tweak + order of checks. + 2009-10-20 Richard Henderson <rth@redhat.com> * tree-eh.c (lower_try_finally_copy): Do lower_eh_constructs_1 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d5cb9eb7d3e8..ae7687def705 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/loop_optimization7.ad[sb]: New test. + * gnat.dg/loop_optimization7_pkg.ads: New helper. + 2009-10-21 Janus Weil <janus@gcc.gnu.org> PR fortran/41706 diff --git a/gcc/testsuite/gnat.dg/loop_optimization7.adb b/gcc/testsuite/gnat.dg/loop_optimization7.adb new file mode 100644 index 000000000000..166839494658 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization7.adb @@ -0,0 +1,16 @@ +-- { dg-do compile } +-- { dg-options "-O3" } +-- { dg-options "-O3 -msse" { target i?86-*-* x86_64-*-* } } + +package body Loop_Optimization7 is + + function Conv (A : Arr) return Arr is + Result : Arr; + begin + for I in A'Range loop + Result (I) := Conv (A (I)); + end loop; + return Result; + end; + +end Loop_Optimization7; diff --git a/gcc/testsuite/gnat.dg/loop_optimization7.ads b/gcc/testsuite/gnat.dg/loop_optimization7.ads new file mode 100644 index 000000000000..ab0a165ea904 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization7.ads @@ -0,0 +1,9 @@ +with Loop_Optimization7_Pkg; use Loop_Optimization7_Pkg; + +package Loop_Optimization7 is + + type Arr is array (1..8) of Rec; + + function Conv (A : Arr) return Arr; + +end Loop_Optimization7; diff --git a/gcc/testsuite/gnat.dg/loop_optimization7_pkg.ads b/gcc/testsuite/gnat.dg/loop_optimization7_pkg.ads new file mode 100644 index 000000000000..0eaefa1b0f32 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization7_pkg.ads @@ -0,0 +1,10 @@ +package Loop_Optimization7_Pkg is + pragma Pure; + + type Rec is record + F : Float; + end record; + + function Conv (Trig : Rec) return Rec; + +end Loop_Optimization7_Pkg; diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index ddaee818310e..fb4a5bf5dd76 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -172,13 +172,13 @@ exist_non_indexing_operands_for_use_p (tree use, gimple stmt) { tree operand; stmt_vec_info stmt_info = vinfo_for_stmt (stmt); - + /* USE corresponds to some operand in STMT. If there is no data reference in STMT, then any operand that corresponds to USE is not indexing an array. */ if (!STMT_VINFO_DATA_REF (stmt_info)) return true; - + /* STMT has a data_ref. FORNOW this means that its of one of the following forms: -1- ARRAY_REF = var @@ -191,14 +191,12 @@ exist_non_indexing_operands_for_use_p (tree use, gimple stmt) Therefore, all we need to check is if STMT falls into the first case, and whether var corresponds to USE. */ - - if (TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME) - return false; if (!gimple_assign_copy_p (stmt)) return false; + if (TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME) + return false; operand = gimple_assign_rhs1 (stmt); - if (TREE_CODE (operand) != SSA_NAME) return false; -- GitLab