From: Richard Biener Date: Mon, 1 Jul 2019 07:37:28 +0000 (+0000) Subject: tree-ssa-sccvn.c (copy_reference_ops_from_ref): Adjust TARGET_MEM_REF handling to... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2f215d2176608467aeee73b245beedfc60836b71;p=gcc.git 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 --- 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);