rjmccall added inline comments.

================
Comment at: lib/CodeGen/CGStmt.cpp:525
@@ +524,3 @@
+void CodeGenFunction::LexicalNoAliasInfo::addNoAliasMD() {
+  if (MemoryInsts.empty() || NoAliasScopes.empty())
+    return;
----------------
It's much more likely that NoAliasScopes will be empty than that MemoryInsts 
will be empty.  You should probably fast-path using that, or better yet, with 
the RecordMemoryInsts bit.

================
Comment at: lib/CodeGen/CGStmt.cpp:537
@@ +536,3 @@
+                                      llvm::LLVMContext::MD_noalias),
+                                      NewScopeList));
+
----------------
hfinkel wrote:
> rjmccall wrote:
> > This is a very strange representation.  Every memory operation in the 
> > lexical block is annotated with a list of all of the scopes that were 
> > entered within the block, even if they were entered after the operation.  
> > But for some reason, not with nested scopes?
> > 
> > What's the right patch for me to read about this representation?
> Perhaps unfortunately, this is an artifact of the way that restrict is 
> defined in C. It applies to all accesses in the block in which the variable 
> is declared, even those before the declaration of the restrict-qualified 
> local itself.
> 
> It should work with nested scopes, in the sense that we add these things as 
> we complete each scope. So we add things to the inner scope, and then when we 
> complete the outer scope, we go back over the instructions (including those 
> in the inner scope because the scope recording recurses up the scope 
> hierarchy), and adds the outer scopes - it concatenates them to any added by 
> the inner (nested) scopes.
> 
> The noalias intrinsic's LangRef updates are in D9375.
Ah, I see the recursion now.  Please add a comment explaining that expectation 
here.

================
Comment at: lib/CodeGen/CodeGenFunction.cpp:1900
@@ +1899,3 @@
+
+  if (I->mayReadOrWriteMemory())
+    recordMemoryInstruction(I);
----------------
Is it intentional that this includes calls and invokes?  If so, please leave a 
comment describing which instructions we want to apply this to and why.

In general, this entire patch is really light on comments.

================
Comment at: lib/CodeGen/CodeGenFunction.h:541
@@ +540,3 @@
+
+    LexicalNoAliasInfo(bool RMI = false) : RecordMemoryInsts(RMI) {}
+
----------------
Why this is defaultable?


https://reviews.llvm.org/D9403



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to