Anastasia added inline comments.

================
Comment at: lib/AST/ASTContext.cpp:3121
@@ +3120,3 @@
+QualType ASTContext::getPipeType(QualType T) const {
+  // Unique pointers, to guarantee there is only one pointer of a particular
+  // structure.
----------------
Could we update the comment here or otherwise I think it's best to be removed!

================
Comment at: lib/CodeGen/CGOpenCLRuntime.cpp:108
@@ +107,3 @@
+    PipeTy = llvm::PointerType::get(llvm::StructType::create(
+      CGM.getLLVMContext(), "opencl.pipe_t"), PipeAddrSpc);
+  }
----------------
pxli168 wrote:
> pekka.jaaskelainen wrote:
> > pxli168 wrote:
> > > pekka.jaaskelainen wrote:
> > > > I'm not sure if touching the built-in fingerprints for this is a good 
> > > > idea. It might lead to problems and confusion. Cannot one pass pipes as 
> > > > arguments to user functions too? Are the fingerprints of those 
> > > > functions then modified accordingly? It might become messy.
> > > > 
> > > > Because the packet size is known at host side, the pipes can be 
> > > > implemented as structs which holds the packet size as one of the member 
> > > > variables. The problem with this approach is how to exploit wider 
> > > > reads/writes instead of a scalar read/write loop + unpack/pack in case 
> > > > of vector datatypes. 
> > > > 
> > > > If the size is known only at runtime, one cannot easily generate vector 
> > > > reads/writes even if the element is a vector datatype and it would be 
> > > > efficient to keep the packet in a vector register as long as possible. 
> > > > For helping this I'd add a metadata which can be utilized at compile 
> > > > time to make reading/writing from the pipe faster.  But in a way that 
> > > > is already an optimization, not a requirement, to make pipes work.
> > > > 
> > > > The reading itself is platform dependent as the pipe can be even a 
> > > > hardware FIFO accessed using special instructions.
> > > This is what I'm worry about, I don't think we need to give much 
> > > information about an opaque type in OpenCL.
> > > 
> > > Actually we can get the element type from the metadata, and I think we 
> > > can leave the optimization to the backend and let platform to choose 
> > > which way to use for read/write pipe.
> > > 
> > > And I think the built-in function support for the pipe in OpenCL-C is not 
> > > necessary in the clang, what do you think? Though it can do some check in 
> > > Sema check, they can also be done in some llvm pass in backend. If the 
> > > built-in is really needed, I will send another patch based on this 
> > > included built-in support for pipe.
> > > 
> > > Thank you.
> > As far as I've understood, no there's no need to add built-in function 
> > awareness to the frontend for this case. Sema checking/diagnostics is 
> > needed to ensure pipes are used only as function arguments, not local 
> > variables, for example. Is this patch missing it?
> I think there are a lot of Sema checking about OpenCL2.0 are missing, the 
> pipe could not be a local variable is just one, there are also some check are 
> missing for reserve_id_t in my tests these days. 
> My plan is to use a patch to cover all these missing Sema check for OpenCL. 
> That would be a hard work with the OpenCL Specification and would take a lot 
> of time and may delay this patch, so could you accept this patch first and 
> let me to finish the missing Sema check later to make sure cover more missing 
> part.
I am Ok with not adding everything in one commit. We can revisit/modify things 
later on.

================
Comment at: test/SemaOpenCL/invalid-pipes-cl2.0.cl:3
@@ +2,3 @@
+
+void test(read_only pipe int *p){// expected-error {{pipes packet types cannot 
be of reference type}}
+}
----------------
I can see more than one diagnostic being added in this patch, but the test 
covers only one.


http://reviews.llvm.org/D15603



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

Reply via email to