From 2f215d2176608467aeee73b245beedfc60836b71 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 1 Jul 2019 07:37:28 +0000 Subject: [PATCH] tree-ssa-sccvn.c (copy_reference_ops_from_ref): Adjust TARGET_MEM_REF handling to also handle address-taken ones. 2019-07-01 Richard Biener * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Adjust TARGET_MEM_REF handling to also handle address-taken ones. From-SVN: r272842 --- gcc/ChangeLog | 5 +++++ gcc/tree-ssa-sccvn.c | 47 +++++++++++++------------------------------- 2 files changed, 19 insertions(+), 33 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c559b3ec4df..77d58451fb2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-07-01 Richard Biener + + * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Adjust + TARGET_MEM_REF handling to also handle address-taken ones. + 2019-07-01 Hongtao Liu * doc/sourcebuild.texi (Effective-Target Keywords, Other diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 9c74be074d2..dcfafef8552 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -791,39 +791,6 @@ vn_reference_eq (const_vn_reference_t const vr1, const_vn_reference_t const vr2) static void copy_reference_ops_from_ref (tree ref, vec *result) { - if (TREE_CODE (ref) == TARGET_MEM_REF) - { - vn_reference_op_s temp; - - result->reserve (3); - - memset (&temp, 0, sizeof (temp)); - temp.type = TREE_TYPE (ref); - temp.opcode = TREE_CODE (ref); - temp.op0 = TMR_INDEX (ref); - temp.op1 = TMR_STEP (ref); - temp.op2 = TMR_OFFSET (ref); - temp.off = -1; - temp.clique = MR_DEPENDENCE_CLIQUE (ref); - temp.base = MR_DEPENDENCE_BASE (ref); - result->quick_push (temp); - - memset (&temp, 0, sizeof (temp)); - temp.type = NULL_TREE; - temp.opcode = ERROR_MARK; - temp.op0 = TMR_INDEX2 (ref); - temp.off = -1; - result->quick_push (temp); - - memset (&temp, 0, sizeof (temp)); - temp.type = NULL_TREE; - temp.opcode = TREE_CODE (TMR_BASE (ref)); - temp.op0 = TMR_BASE (ref); - temp.off = -1; - result->quick_push (temp); - return; - } - /* For non-calls, store the information that makes up the address. */ tree orig = ref; while (ref) @@ -853,6 +820,20 @@ copy_reference_ops_from_ref (tree ref, vec *result) temp.base = MR_DEPENDENCE_BASE (ref); temp.reverse = REF_REVERSE_STORAGE_ORDER (ref); break; + case TARGET_MEM_REF: + /* The base address gets its own vn_reference_op_s structure. */ + temp.op0 = TMR_INDEX (ref); + temp.op1 = TMR_STEP (ref); + temp.op2 = TMR_OFFSET (ref); + temp.clique = MR_DEPENDENCE_CLIQUE (ref); + temp.base = MR_DEPENDENCE_BASE (ref); + result->safe_push (temp); + memset (&temp, 0, sizeof (temp)); + temp.type = NULL_TREE; + temp.opcode = ERROR_MARK; + temp.op0 = TMR_INDEX2 (ref); + temp.off = -1; + break; case BIT_FIELD_REF: /* Record bits, position and storage order. */ temp.op0 = TREE_OPERAND (ref, 1); -- 2.30.2