<div dir="ltr">I have an example:<div><br><div>foo(float * restrict y, int off1, int off2) {</div><div>  float * restrict x; </div><div>  for (..) {</div><div>    for (..) {</div><div>      x = y+off1;</div><div>    }</div><div>    x = (const float *)((int)x+off2))</div><div><br></div><div>I'm not sure why this should be capturing the pointer? </div><div><br></div><div>For instance, looking at scoped noalias dbg info:</div><div><br></div><div>SNA: Capture check for B/CSB UO:   %54 = inttoptr i32 %add83 to float*, !dbg !101<br>SNA: Pointer   %1 = call float* @llvm.noalias.p0_float(float* %0, metadata !38), !dbg !41 might be captured!<br></div><div><br></div><div>Is this implying that the noalias intrinsic might be capturing the pointer? It doesn't look like "noalias" intrinsic has NoCapture property on the pointer:</div><div><br></div><div>def int_noalias       : Intrinsic<[llvm_anyptr_ty],<br>                                  [LLVMMatchType<0>, llvm_metadata_ty],<br>                                  [IntrArgMemOnly, Returned<0>]>;<br></div><div><br></div><div>It should though right? From the definition of capture it is returning the pointer; however, we know nothing is happening here.</div><div><br></div><div>I'm on llvm 10 with Hal's restrict patches.</div><div><br></div><div>Thanks.</div><div>       </div><div>    </div><div>  </div></div></div>