[PATCH] D21000: [CFLAA] Cleaned up StratifiedAttrs handling

Jia Chen via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 6 15:24:22 PDT 2016


grievejia added inline comments.

================
Comment at: lib/Analysis/CFLAliasAnalysis.cpp:1104-1111
@@ -1098,3 +1103,10 @@
   // argument or global, then we don't have to be as conservative.
-  if (AttrsA.any() && AttrsB.any())
+  if ((AttrsA.none() && AttrsB.any()) || (AttrsA.any() && AttrsB.none()))
+    return NoAlias;
+  if (AttrsA.test(AttrUnknownIndex) || AttrsB.test(AttrUnknownIndex))
+    return MayAlias;
+  if ((AttrsA.test(AttrEscapedIndex) && isGlobalOrArgAttr(AttrsB)) ||
+      (AttrsB.test(AttrEscapedIndex) && isGlobalOrArgAttr(AttrsA)))
+    return NoAlias;
+  if (isGlobalOrArgAttr(AttrsA) || isGlobalOrArgAttr(AttrsB))
     return MayAlias;
----------------
grievejia wrote:
> Aha, I see what you are saying. But I'm not sure moving the index check will simplify the logic here.
> 
> In general we have four types of sets: (1) AttrNone (2) AttrUnknown is set (3) only AttrEscaped is set (4) Any global/argument attr is set.
> 
> Let's perform a case-by-case analysis:
> - (1) x (1): index check
> - (1) x (2): NoAlias
> - (1) x (3): NoAlias
> - (1) x (4): NoAlias
> - (2) x (2): MayAlias
> - (2) x (3): MayAlias
> - (2) x (4): MayAlias
> - (3) x (3): index check
> - (3) x (4): NoAlias
> - (4) x (4): MayAlias
> 
> The puzzle here is to figure out the clearest way to express the above logic. I agree with you that I may not have the best answer, but simply putting the index check on top is not a panacea either. (Or I misunderstood what you're saying...)
Oops, I made a mistake: (1) x (3) should be "index check" rather than "NoAlias". I'll update the codes accordingly. 



http://reviews.llvm.org/D21000





More information about the llvm-commits mailing list