================
Comment at: lib/CodeGen/CGExpr.cpp:1286
@@ -1283,1 +1285,3 @@
+    Value = Builder.CreateNoAlias(Value, NAI->second);
+
   if (Ty->isAtomicType() ||
----------------
This is very strange.  Why do the aliasing properties of an address cause 
metadata to be attached to the value stored into it?  Shouldn't the metadata be 
on the address (in which case, perhaps it should have been attached to the load 
from the restrict pointer?) or the store?

Also, please find some way to avoid doing a DenseMap lookup on every single 
store.  I would guess that the address only has an entry in that table if it 
was restrict-qualified; you can probably find a way to pass that information 
down.

================
Comment at: lib/CodeGen/CGStmt.cpp:267
@@ +266,3 @@
+/// restrict-qualified variables declared within it.
+struct RestrictFinder : RecursiveASTVisitor<RestrictFinder> {
+  bool FoundRestrictDecl;
----------------
RecursiveASTVisitors are actually really big; the last time I checked, a 
RecursiveASTVisitor compiled to several hundred kilobytes of code, no matter 
how few traversals you actually have in it.

Also, doing a recursive walk every time you enter a scope is inherently 
quadratic with deeply-nested scopes.

You don't really need a fully recursive walk, though.  The language 
specification for 'restrict' talks about the scope B that declares the 
restrict-qualified pointer; you just need to scan the current compound 
statement for variable declarations.

http://reviews.llvm.org/D9403

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to