From 3cf0275d0db7d3e240bc7a010c6de68f15f46ce7 Mon Sep 17 00:00:00 2001 From: Bin Cheng Date: Tue, 13 Jun 2017 15:57:24 +0100 Subject: [PATCH 4/6] copy-dep-fino-20170801.txt --- gcc/tree-ssa-address.c | 17 +++++++++++++++++ gcc/tree-ssa-address.h | 1 + gcc/tree-ssa-loop-ivopts.c | 3 +++ 3 files changed, 21 insertions(+) diff --git a/gcc/tree-ssa-address.c b/gcc/tree-ssa-address.c index 8257fde..aea1730 100644 --- a/gcc/tree-ssa-address.c +++ b/gcc/tree-ssa-address.c @@ -958,6 +958,23 @@ get_address_description (tree op, struct mem_address *addr) addr->offset = TMR_OFFSET (op); } +/* Copy data non-dependences info from FROM to TO which both are MEM_REF or + TARGET_MEM_REF. */ + +void +copy_dependence_info (tree to, tree from) +{ + if ((TREE_CODE (from) != MEM_REF && TREE_CODE (from) != TARGET_MEM_REF) + || MR_DEPENDENCE_CLIQUE (from) == 0) + return; + + gcc_assert (to != NULL_TREE); + gcc_assert (TREE_CODE (to) == MEM_REF || TREE_CODE (to) == TARGET_MEM_REF); + MR_DEPENDENCE_CLIQUE (to) = MR_DEPENDENCE_CLIQUE (from); + MR_DEPENDENCE_BASE (to) = MR_DEPENDENCE_BASE (from); + MR_DEPENDENCE_FIXED_LENGTH_P (to) = MR_DEPENDENCE_FIXED_LENGTH_P (from); +} + /* Copies the reference information from OLD_REF to NEW_REF, where NEW_REF should be either a MEM_REF or a TARGET_MEM_REF. */ diff --git a/gcc/tree-ssa-address.h b/gcc/tree-ssa-address.h index cd62ed9..ebba5ad 100644 --- a/gcc/tree-ssa-address.h +++ b/gcc/tree-ssa-address.h @@ -36,6 +36,7 @@ extern void move_fixed_address_to_symbol (struct mem_address *, struct aff_tree *); tree create_mem_ref (gimple_stmt_iterator *, tree, struct aff_tree *, tree, tree, tree, bool); +extern void copy_dependence_info (tree, tree); extern void copy_ref_info (tree, tree); tree maybe_fold_tmr (tree); diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index b65cd96..6b1efc1 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -7023,6 +7023,9 @@ rewrite_use_address (struct ivopts_data *data, iv, base_hint, data->speed); copy_ref_info (ref, *use->op_p); + /* Copy dependece information from the original reference. */ + copy_dependence_info (ref, *use->op_p); + *use->op_p = ref; } -- 1.9.1