<div dir="ltr">Yes, I had noticed the revision was incomplete, due to the double assignment to the AAInfo. Thanks for noticing!<div>I sent out a fix in <a href="https://reviews.llvm.org/D67305">https://reviews.llvm.org/D67305</a>.</div><div><br></div><div>Alina </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Sep 5, 2019 at 7:51 PM Finkel, Hal J. <<a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 9/5/19 6:00 PM, Alina Sbirlea via llvm-commits wrote:<br>
> Author: asbirlea<br>
> Date: Thu Sep  5 16:00:36 2019<br>
> New Revision: 371139<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=371139&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=371139&view=rev</a><br>
> Log:<br>
> [AliasSetTracker] Correct AAInfo check.<br>
><br>
> Properly check if NewAAInfo conflicts with AAInfo.<br>
> Update local variable and alias set that a change occured when a conflict is found.<br>
> Resolves PR42969.<br>
><br>
> Added:<br>
>      llvm/trunk/test/Transforms/LICM/pr42969.ll<br>
> Modified:<br>
>      llvm/trunk/include/llvm/Analysis/AliasSetTracker.h<br>
><br>
> Modified: llvm/trunk/include/llvm/Analysis/AliasSetTracker.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AliasSetTracker.h?rev=371139&r1=371138&r2=371139&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AliasSetTracker.h?rev=371139&r1=371138&r2=371139&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/Analysis/AliasSetTracker.h (original)<br>
> +++ llvm/trunk/include/llvm/Analysis/AliasSetTracker.h Thu Sep  5 16:00:36 2019<br>
> @@ -87,10 +87,11 @@ class AliasSet : public ilist_node<Alias<br>
>           AAInfo = NewAAInfo;<br>
>         else {<br>
>           AAMDNodes Intersection(AAInfo.intersect(NewAAInfo));<br>
> -        if (!Intersection) {<br>
> +        if (!Intersection.TBAA || !Intersection.Scope ||<br>
> +            !Intersection.NoAlias) {<br>
<br>
<br>
Thanks for tracking this down!<br>
<br>
Is now too strong? What if both AAInfo and NewAAInfo started out with <br>
one of these as nullptr?<br>
<br>
  -Hal<br>
<br>
<br>
>             // NewAAInfo conflicts with AAInfo.<br>
>             AAInfo = DenseMapInfo<AAMDNodes>::getTombstoneKey();<br>
> -          return SizeChanged;<br>
> +          SizeChanged = true;<br>
>           }<br>
>           AAInfo = Intersection;<br>
>         }<br>
><br>
> Added: llvm/trunk/test/Transforms/LICM/pr42969.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LICM/pr42969.ll?rev=371139&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LICM/pr42969.ll?rev=371139&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Transforms/LICM/pr42969.ll (added)<br>
> +++ llvm/trunk/test/Transforms/LICM/pr42969.ll Thu Sep  5 16:00:36 2019<br>
> @@ -0,0 +1,71 @@<br>
> +; RUN: opt %s -S -scoped-noalias -enable-mssa-loop-dependency=true -licm -debug-only=licm | FileCheck %s<br>
> +<br>
> +define i16 @main(i1 %a_b_mayalias, i16* %a, i16* %b) {<br>
> +; CHECK-NOT: LICM: Promoting value stored to in loop<br>
> +; CHECK:       scalar.body:<br>
> +; CHECK-NEXT:    [[J:%.*]] = phi i64<br>
> +; CHECK-NEXT:    [[TMP3:%.*]] = load i16<br>
> +; CHECK-NEXT:    [[RESULT:%.*]] = add i16 [[TMP3]], 1<br>
> +; CHECK-NEXT:    store i16 [[RESULT]]<br>
> +<br>
> +entry:<br>
> +  br label %outer<br>
> +<br>
> +outer:                                            ; preds = %scalar.cleanup, %entry<br>
> +; 4 = MemoryPhi({entry,liveOnEntry},{scalar.cleanup,2})<br>
> +  %i = phi i16 [ 0, %entry ], [ %i.next, %scalar.cleanup ]<br>
> +  br i1 %a_b_mayalias, label %<a href="http://scalar.ph" rel="noreferrer" target="_blank">scalar.ph</a>, label %<a href="http://vector.ph" rel="noreferrer" target="_blank">vector.ph</a><br>
> +<br>
> +<a href="http://vector.ph" rel="noreferrer" target="_blank">vector.ph</a>:                                        ; preds = %outer<br>
> +; MemoryUse(4) MayAlias<br>
> +  %tmp1 = load i16, i16* %a, align 1, !alias.scope !0, !tbaa !7<br>
> +  %tmp2 = add i16 %tmp1, 1<br>
> +; 1 = MemoryDef(4)<br>
> +  store i16 %tmp2, i16* %b, align 1, !alias.scope !3, !noalias !0, !tbaa !7<br>
> +  br label %vector.body<br>
> +<br>
> +vector.body:                                      ; preds = %vector.body, %<a href="http://vector.ph" rel="noreferrer" target="_blank">vector.ph</a><br>
> +  %index = phi i64 [ %index.next, %vector.body ], [ 0, %<a href="http://vector.ph" rel="noreferrer" target="_blank">vector.ph</a> ]<br>
> +  %index.next = add i64 %index, 1<br>
> +  %cmp1 = icmp eq i64 %index.next, 16<br>
> +  br i1 %cmp1, label %middle.block, label %vector.body<br>
> +<br>
> +middle.block:                                     ; preds = %vector.body<br>
> +  br label %<a href="http://scalar.ph" rel="noreferrer" target="_blank">scalar.ph</a><br>
> +<br>
> +<a href="http://scalar.ph" rel="noreferrer" target="_blank">scalar.ph</a>:                                        ; preds = %middle.block, %outer<br>
> +; 5 = MemoryPhi({outer,4},{middle.block,1})<br>
> +  %j.start = phi i64 [ 0, %outer ], [ 16, %middle.block ]<br>
> +  br label %scalar.body<br>
> +<br>
> +scalar.body:                                      ; preds = %scalar.body, %<a href="http://scalar.ph" rel="noreferrer" target="_blank">scalar.ph</a><br>
> +; 3 = MemoryPhi({<a href="http://scalar.ph" rel="noreferrer" target="_blank">scalar.ph</a>,5},{scalar.body,2})<br>
> +  %j = phi i64 [ %j.next, %scalar.body ], [ %j.start, %<a href="http://scalar.ph" rel="noreferrer" target="_blank">scalar.ph</a> ]<br>
> +; MemoryUse(3) MayAlias<br>
> +  %tmp3 = load i16, i16* %a, align 1, !tbaa !7<br>
> +  %result = add i16 %tmp3, 1<br>
> +; 2 = MemoryDef(3)<br>
> +  store i16 %result, i16* %b, align 1, !tbaa !7<br>
> +  %j.next = add nuw nsw i64 %j, 1<br>
> +  %cmp2 = icmp ult i64 %j.next, 20<br>
> +  br i1 %cmp2, label %scalar.body, label %scalar.cleanup<br>
> +<br>
> +scalar.cleanup:                                   ; preds = %scalar.body<br>
> +  %result.lcssa = phi i16 [ %result, %scalar.body ]<br>
> +  %i.next = add nuw nsw i16 %i, 1<br>
> +  %exitcond = icmp eq i16 %i.next, 10<br>
> +  br i1 %exitcond, label %exit.block, label %outer<br>
> +<br>
> +exit.block:                                       ; preds = %scalar.cleanup<br>
> +  %result.lcssa.lcssa = phi i16 [ %result.lcssa, %scalar.cleanup ]<br>
> +  ret i16 %result.lcssa.lcssa<br>
> +}<br>
> +<br>
> +!0 = !{!1}<br>
> +!1 = distinct !{!1, !2}<br>
> +!2 = distinct !{!2, !"LVerDomain"}<br>
> +!3 = !{!4}<br>
> +!4 = distinct !{!4, !2}<br>
> +!5 = !{!"Simple C++ TBAA"}<br>
> +!6 = !{!"omnipotent char", !5, i64 0}<br>
> +!7 = !{!6, !6, i64 0}<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
<br>
-- <br>
Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory<br>
<br>
</blockquote></div>