[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