diff options
author | Sebastian Pop <sebastian.pop@amd.com> | 2009-11-25 05:19:05 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2009-11-25 05:19:05 +0000 |
commit | e8af484268dee77eba449dc151dc7dad718376d8 (patch) | |
tree | 76930a3238f5fc37694e789eedd62129d6fad7c8 /gcc | |
parent | 3899a0b221ee070c9c80ea5e95067e62ced273d6 (diff) | |
download | gcc-e8af484268dee77eba449dc151dc7dad718376d8.zip gcc-e8af484268dee77eba449dc151dc7dad718376d8.tar.gz gcc-e8af484268dee77eba449dc151dc7dad718376d8.tar.bz2 |
sese.c (get_vdef_before_sese): Handle GIMPLE_ASSIGN and GIMPLE_CALL.
2009-10-20 Sebastian Pop <sebastian.pop@amd.com>
* sese.c (get_vdef_before_sese): Handle GIMPLE_ASSIGN and GIMPLE_CALL.
From-SVN: r154613
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog.graphite | 4 | ||||
-rw-r--r-- | gcc/sese.c | 30 |
2 files changed, 28 insertions, 6 deletions
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 05bd2f1..fe4b203 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,5 +1,9 @@ 2009-10-20 Sebastian Pop <sebastian.pop@amd.com> + * sese.c (get_vdef_before_sese): Handle GIMPLE_ASSIGN and GIMPLE_CALL. + +2009-10-20 Sebastian Pop <sebastian.pop@amd.com> + * graphite-sese-to-poly.c (pdr_add_data_dimensions): Do not infer loop upper bounds for 1-element arrays at end of structures. * tree-flow.h (array_at_struct_end_p): Declared. @@ -407,8 +407,8 @@ static tree get_vdef_before_sese (sese region, tree name, sbitmap visited) { unsigned i; - gimple def_stmt = SSA_NAME_DEF_STMT (name); - basic_block def_bb = gimple_bb (def_stmt); + gimple stmt = SSA_NAME_DEF_STMT (name); + basic_block def_bb = gimple_bb (stmt); if (!def_bb || !bb_in_sese_p (def_bb, region)) return name; @@ -418,18 +418,36 @@ get_vdef_before_sese (sese region, tree name, sbitmap visited) SET_BIT (visited, def_bb->index); - switch (gimple_code (def_stmt)) + switch (gimple_code (stmt)) { case GIMPLE_PHI: - for (i = 0; i < gimple_phi_num_args (def_stmt); i++) + for (i = 0; i < gimple_phi_num_args (stmt); i++) { - tree arg = gimple_phi_arg_def (def_stmt, i); - tree res = get_vdef_before_sese (region, arg, visited); + tree arg = gimple_phi_arg_def (stmt, i); + tree res; + + if (gimple_bb (SSA_NAME_DEF_STMT (arg)) + && def_bb->index == gimple_bb (SSA_NAME_DEF_STMT (arg))->index) + continue; + + res = get_vdef_before_sese (region, arg, visited); if (res) return res; } return NULL_TREE; + case GIMPLE_ASSIGN: + case GIMPLE_CALL: + { + use_operand_p use_p = gimple_vuse_op (stmt); + tree use = USE_FROM_PTR (use_p); + + if (def_bb->index == gimple_bb (SSA_NAME_DEF_STMT (use))->index) + RESET_BIT (visited, def_bb->index); + + return get_vdef_before_sese (region, use, visited); + } + default: return NULL_TREE; } |