This backport contains 1 patch from gcc main stream tree. The commit id of these patchs list as following in the order of time. 0001-tree-ssa-sccvn.c-copy_reference_ops_from_ref-Adjust-.patch 2f215d2176608467aeee73b245beedfc60836b71 diff -Nurp gcc-9.3.0_org/gcc/tree-ssa-sccvn.c gcc-9.3.0/gcc/tree-ssa-sccvn.c --- gcc-9.3.0_org/gcc/tree-ssa-sccvn.c 2020-08-18 15:31:39.308000000 +0800 +++ gcc-9.3.0/gcc/tree-ssa-sccvn.c 2020-08-18 15:32:03.456000000 +0800 @@ -797,39 +797,6 @@ vn_reference_eq (const_vn_reference_t co 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) @@ -859,6 +826,20 @@ copy_reference_ops_from_ref (tree ref, v 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);