http://llvm.org/bugs/show_bug.cgi?id=14719

Arnold Schwaighofer <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
                 CC|                            |[email protected]
         Resolution|FIXED                       |---
           Assignee|[email protected]   |[email protected]

--- Comment #2 from Arnold Schwaighofer <[email protected]> ---
I just stumbled over this while working on dependence checks.

This is not entirely correct:

  /// Check that the reads don't conflict with the read-writes.
  for (MI = Reads.begin(), ME = Reads.end(); MI != ME; ++MI) {
    Value *Val = (*MI).first;
    GetUnderlyingObjects(Val, TempObjects, DL);
    for (ValueVector::iterator UI=TempObjects.begin(), UE=TempObjects.end();
         UI != UE; ++UI) {
      // If all of the writes are identified then we don't care if the read
      // pointer is identified or not.
      if (!AllWritesIdentified && !isIdentifiedObject(*UI)) {
        DEBUG(dbgs() << "LV: Found an unidentified read ptr:"<< **UI <<"\n");
        NeedRTCheck = true;
      }


We could have GetUnderlying return an unidentified object because it stopped
after MaxSteps and have "A[i] = B[i]" where B == A - 1 (just hidden behind
enough phis).

We would however know that if all our writes are identified objects and the
read is a argument (isa<Argument>, like it is the case here) that they can't
alias.

if ((!AreAllWritesIdentified || !isa<Argument>(UnderlyingObj)) &&
!isIdentifiedObject(UnderlyingObj)) {
  NeedRTCheck = true;
}

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to