From 27ecd5c2b0dd74f6721e94972751855952acefd1 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Fri, 21 Jul 2017 17:16:51 +0000 Subject: [PATCH] tree-ssa-sccvn.c (vn_nary_op_eq): Check BIT_INSERT_EXPR's operand 1 to see if the types precision matches. 2017-07-21 Andrew Pinski * tree-ssa-sccvn.c (vn_nary_op_eq): Check BIT_INSERT_EXPR's operand 1 to see if the types precision matches. * fold-const.c (operand_equal_p): Likewise. From-SVN: r250431 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 11 ++++++++++- gcc/tree-ssa-sccvn.c | 8 ++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 96f89f4..2033b33 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-07-21 Andrew Pinski + + * tree-ssa-sccvn.c (vn_nary_op_eq): Check BIT_INSERT_EXPR's + operand 1 to see if the types precision matches. + * fold-const.c (operand_equal_p): Likewise. + 2017-07-21 Richard Biener PR tree-optimization/81303 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index d702de2..c061f3e 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3184,9 +3184,18 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags) flags &= ~OEP_ADDRESS_OF; return OP_SAME (0); + case BIT_INSERT_EXPR: + /* BIT_INSERT_EXPR has an implict operand as the type precision + of op1. Need to check to make sure they are the same. */ + if (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST + && TREE_CODE (TREE_OPERAND (arg1, 1)) == INTEGER_CST + && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg0, 1))) + != TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg1, 1)))) + return false; + /* FALLTHRU */ + case VEC_COND_EXPR: case DOT_PROD_EXPR: - case BIT_INSERT_EXPR: return OP_SAME (0) && OP_SAME (1) && OP_SAME (2); case MODIFY_EXPR: diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 324cd73..ca43f01 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -2636,6 +2636,14 @@ vn_nary_op_eq (const_vn_nary_op_t const vno1, const_vn_nary_op_t const vno2) if (!expressions_equal_p (vno1->op[i], vno2->op[i])) return false; + /* BIT_INSERT_EXPR has an implict operand as the type precision + of op1. Need to check to make sure they are the same. */ + if (vno1->opcode == BIT_INSERT_EXPR + && TREE_CODE (vno1->op[1]) == INTEGER_CST + && TYPE_PRECISION (TREE_TYPE (vno1->op[1])) + != TYPE_PRECISION (TREE_TYPE (vno2->op[1]))) + return false; + return true; } -- 2.7.4