yaxunl marked 12 inline comments as done.
yaxunl added inline comments.

================
Comment at: include/clang/Basic/TargetInfo.h:969
+  /// LangAS::Default.
+  virtual unsigned getGlobalAddressSpace() const { return LangAS::Default; }
+
----------------
rjmccall wrote:
> I'm not sure this really needs to exist.
Removed.


================
Comment at: lib/CodeGen/CGBlocks.cpp:1144
+                 ? CGM.getNSConcreteGlobalBlock()
+                 : CGM.getNullPointer(CGM.VoidPtrPtrTy,
+                                      QualType(CGM.getContext().VoidPtrTy)));
----------------
rjmccall wrote:
> You used VoidPtrTy above.
They are different fields with different types.


================
Comment at: lib/CodeGen/CodeGenModule.cpp:2549
+           AddrSpace == LangAS::opencl_local ||
+           AddrSpace >= LangAS::FirstTargetAddressSpace);
+    return AddrSpace;
----------------
rjmccall wrote:
> This does not seem like a very useful assertion.
This checks global variable has valid address space. If a global variable 
having private or generic address space is passed to backend, it may cause 
issues difficult to debug. This assertion helps to detect the issue early.


================
Comment at: lib/CodeGen/CodeGenModule.cpp:2554
+  if (K == LanguageExpected)
+    return D ? D->getType().getAddressSpace() : LangAS::Default;
+
----------------
rjmccall wrote:
> I would expect this to be the general rule for all language modes.  Why is 
> OpenCL an exception?
> 
> It looks to me like GetGlobalVarAddressSpace is only ever called with a 
> possibly-null D by GetOrCreateLLVMGlobal, which is only called with a null D 
> by CreateRuntimeVariable.  I expect that every call to CreateRuntimeVariable 
> will probably need to be audited if it's going to suddenly start returning 
> pointers that aren't in the default address space, and we'll probably end up 
> needing some very different behavior at that point.  So for now, let's just 
> move the LanguageExpected case out to the one call site that uses it.
> 
> I do like the simplification of just taking the declaration instead of taking 
> that and an address space.
For OpenCL, TargetFavored and LanguageExpected are the same, i.e. global. For 
C++, TargetFavored is globa, but LanguageExpected is Default.

Done.


================
Comment at: lib/CodeGen/CodeGenModule.cpp:2578
+  }
+  return getTarget().getGlobalAddressSpace();
 }
----------------
rjmccall wrote:
> Okay, I think I see what you're trying to do here: when you compile normal 
> (i.e. non-OpenCL) code for your target, you want to implicitly change where 
> global variables are allocated by default, then translate the pointer into 
> LangAS::Default.  It's essentially the global-variable equivalent of what 
> we're already doing with stack pointers.
> 
> The right way to do this is to make a hook on the TargetCodeGenInfo like 
> getASTAllocaAddressSpace() which allows the target to override the address 
> space for a global on a case-by-case basis.  You can then do whatever 
> target-specific logic you need there, and you won't need to introduce 
> getGlobalAddressSpace() on TargetInfo.  The default implementation, of 
> course, will just return D->getType().getAddressSpace().
Done.

I am wondering if I should just move the whole function to 
TargetCodeGenInfo::getGlobalVarAddressSpace, which seems cleaner.


================
Comment at: lib/CodeGen/TargetInfo.cpp:7418
+  if (M.getLangOpts().OpenCL)
+    appendOpenCLVersionMD(M);
 }
----------------
rjmccall wrote:
> You have a couple things in this patch that just touch your target and are 
> basically unrelated to the rest of your logic.  Please split those into a 
> separate patch.
Done.


https://reviews.llvm.org/D33842



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

Reply via email to