[llvm-dev] Question about a AA result and its use in Dependence Analysis

De Azevedo Piovezan, Felipe via llvm-dev llvm-dev at lists.llvm.org
Fri May 31 14:55:24 PDT 2019


Hello llvm-dev,

I would appreciate your feedback on the following problem. We're trying to determine whether this is a bug in LLVM or not.

In the IR snippet below, we have two pointers (p and q) which initially point to two completely non-overlapping locations. Then, on every iteration of a loop, we swap the pointers and load from the first, followed by a store to the second.

1) AA says the two pointers are NoAlias, even though they do point to the same location if we consider them in distinct loop iterations. Is this right?
2) Dependence Analysis says there is no dependence between the load and the store. Is this right?

define float @f() {
entry:
  %g = alloca float, align 4
  %h = alloca float, align 4
  br label %for.body

for.cond.cleanup:
  ret float undef

for.body:
  %p = phi float* [ %g, %entry ], [ %q, %for.body ]
  %q = phi float* [ %h, %entry ], [ %p, %for.body ]
  %0 = load float, float* %p, align 4
  store float undef, float* %q, align 4
  br i1 undef, label %for.cond.cleanup, label %for.body
}

AliasSet[0x872d800, 1] must alias, Ref       Pointers: (float* %p, LocationSize::precise(4))
AliasSet[0x872d8b0, 1] must alias, Mod       Pointers: (float* %q, LocationSize::precise(4))

da analyze -
   %0 = load float, float* %p, align 4   ; I added these two debug statements, DA doesn't print the values it is looking at...
  store float undef, float* %q, align 4
none!

--
Felipe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190531/abb502c6/attachment.html>


More information about the llvm-dev mailing list