re PR ipa/65270 (issues with merging memory accesses from different code paths)

2015-03-12  Richard Biener  <rguenther@suse.de>

	PR middle-end/65270
	* fold-const.c (operand_equal_p): Fix ordering of resetting
	OEP_ADDRESS_OF and checking for it in the [TARGET_]MEM_REF case.

From-SVN: r221386
This commit is contained in:
Richard Biener 2015-03-12 13:02:42 +00:00 committed by Richard Biener
parent f8af0e3050
commit 6899585abf
2 changed files with 16 additions and 12 deletions

View file

@ -1,3 +1,9 @@
2015-03-12 Richard Biener <rguenther@suse.de>
PR middle-end/65270
* fold-const.c (operand_equal_p): Fix ordering of resetting
OEP_ADDRESS_OF and checking for it in the [TARGET_]MEM_REF case.
2015-03-12 Dominik Vogt <vogt@linux.vnet.ibm.com>
* config/s390/s390.c (s390_reorg): Move code to output nops after label

View file

@ -2934,21 +2934,12 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
return OP_SAME (0);
case TARGET_MEM_REF:
flags &= ~(OEP_CONSTANT_ADDRESS_OF|OEP_ADDRESS_OF);
/* Require equal extra operands and then fall through to MEM_REF
handling of the two common operands. */
if (!OP_SAME_WITH_NULL (2)
|| !OP_SAME_WITH_NULL (3)
|| !OP_SAME_WITH_NULL (4))
return 0;
/* Fallthru. */
case MEM_REF:
flags &= ~(OEP_CONSTANT_ADDRESS_OF|OEP_ADDRESS_OF);
/* Require equal access sizes, and similar pointer types.
We can have incomplete types for array references of
variable-sized arrays from the Fortran frontend
though. Also verify the types are compatible. */
return ((TYPE_SIZE (TREE_TYPE (arg0)) == TYPE_SIZE (TREE_TYPE (arg1))
if (!((TYPE_SIZE (TREE_TYPE (arg0)) == TYPE_SIZE (TREE_TYPE (arg1))
|| (TYPE_SIZE (TREE_TYPE (arg0))
&& TYPE_SIZE (TREE_TYPE (arg1))
&& operand_equal_p (TYPE_SIZE (TREE_TYPE (arg0)),
@ -2963,8 +2954,15 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
&& (MR_DEPENDENCE_BASE (arg0)
== MR_DEPENDENCE_BASE (arg1))
&& (TYPE_ALIGN (TREE_TYPE (arg0))
== TYPE_ALIGN (TREE_TYPE (arg1)))))
&& OP_SAME (0) && OP_SAME (1));
== TYPE_ALIGN (TREE_TYPE (arg1)))))))
return 0;
flags &= ~(OEP_CONSTANT_ADDRESS_OF|OEP_ADDRESS_OF);
return (OP_SAME (0) && OP_SAME (1)
/* TARGET_MEM_REF require equal extra operands. */
&& (TREE_CODE (arg0) != TARGET_MEM_REF
|| (OP_SAME_WITH_NULL (2)
&& OP_SAME_WITH_NULL (3)
&& OP_SAME_WITH_NULL (4))));
case ARRAY_REF:
case ARRAY_RANGE_REF: