public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] PR71060
@ 2016-05-12  7:29 Richard Biener
  0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2016-05-12  7:29 UTC (permalink / raw)
  To: gcc-patches


The PR shows that data-dependence analysis is too strict when making sure
that dr_indices of two DRs are compatible enough to be fed into the
dependence machinery.  The important part is that the structure of the
object needs to be the same which is ensured by type equality.  Then
of course they need to be based on the same address.  Things like whether
the object was referenced via a restrict pointer or with special
alignment doesn't matter for the dependence analysis step using 
dr_indices.

Thus the following patch improves this bit in dependence analysis,
not yet fixing the underlying issue of the "miscompare" which is
if-conversion dropping restrict info when building masked load/stores.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2016-05-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71060
	* tree-data-ref.c (initialize_data_dependence_relation): Do not
	require exact match of DR_BASE_OBJECT but only matching address and
	type.

Index: gcc/tree-data-ref.c
===================================================================
*** gcc/tree-data-ref.c	(revision 236158)
--- gcc/tree-data-ref.c	(working copy)
*************** initialize_data_dependence_relation (str
*** 1538,1545 ****
      }
  
    /* If the references do not access the same object, we do not know
!      whether they alias or not.  */
!   if (!operand_equal_p (DR_BASE_OBJECT (a), DR_BASE_OBJECT (b), 0))
      {
        DDR_ARE_DEPENDENT (res) = chrec_dont_know;
        return res;
--- 1538,1550 ----
      }
  
    /* If the references do not access the same object, we do not know
!      whether they alias or not.  We do not care about TBAA or alignment
!      info so we can use OEP_ADDRESS_OF to avoid false negatives.
!      But the accesses have to use compatible types as otherwise the
!      built indices would not match.  */
!   if (!operand_equal_p (DR_BASE_OBJECT (a), DR_BASE_OBJECT (b), OEP_ADDRESS_OF)
!       || !types_compatible_p (TREE_TYPE (DR_BASE_OBJECT (a)),
! 			      TREE_TYPE (DR_BASE_OBJECT (b))))
      {
        DDR_ARE_DEPENDENT (res) = chrec_dont_know;
        return res;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2016-05-12  7:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-12  7:29 [PATCH] PR71060 Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).