James,
Thanks for the suggestion for how to make this case easier to handle. I'll
bring this up to the entire working group in our next meeting.
Micah
From: [email protected] [mailto:[email protected]] On Behalf Of James
Molloy
Sent: Friday, September 28, 2012 9:46 AM
To: Villmow, Micah
Cc: Carlos Sánchez de La Lama; Pekka Jääskeläinen; Ouriel, Boaz;
[email protected]; [email protected]; [email protected]
Subject: Re: [pocl-devel] [cfe-dev] [LLVMdev] SPIR provisional specification is
now available in the Khronos website
Micah,
You're saying it works for you, but Clang doesn't currently anywhere near the
range of horrible constantexpr constructs it is possible to create. You can
"get by" at the moment with just handling ConstantGEPs, because of the way
Clang works.
But SPIR isn't restricted to Clang, and the problem is that it is *possible*
(although not probable, or nice, but that is irrelevant for corner conditions)
to get valid SPIR that it is *very* difficult to get into a shape that you can
code generate for CPUs.
Even the SAFECode snippet that Pekka noted doesn't even handle the case of
ConstantShuffleVectors, for example.
You can easily simplify this problem with a restriction in SPIR: disallow
ConstantExpr casts - no ptrtoint constant expression. Because GlobalVariables
have pointer type, if you disallow converting their type to non-pointer type in
a constantexpr, the number of constantexpr subclasses you have to deal with is
drastically reduced (to essentially just BitCast and GEP).
That would be a simple, reasonable restriction that would stop potentially
maliciously horrible test cases causing all CPU SPIR clients to write upwards
of a hundred lines of conversion code.
Cheers,
James
On 28 September 2012 16:48, Villmow, Micah
<[email protected]<mailto:[email protected]>> wrote:
Carlos,
AMD's OpenCL implementation(both CPU and GPU) has worked for years with the
way SPIR represents locals. If there is problems with the representation then
it is an implementation issue. One of the issues with using extra kernel
arguments is that it requires extra validation and complexity at the runtime
level that is not needed if it is handled internally by the compiler. That
being said, both ways of doing it are equally valid, but the choice of which
way to do it is a implementation decision. I don't think it would be that
difficult to lower global variables to function arguments given SPIR
representation.
Micah
> -----Original Message-----
> From: Carlos Sánchez de La Lama
> [mailto:[email protected]<mailto:[email protected]>]
> Sent: Friday, September 28, 2012 12:34 AM
> To: James Molloy
> Cc: Pekka Jääskeläinen; Ouriel, Boaz;
> [email protected]<mailto:[email protected]>;
> Villmow, Micah; [email protected]<mailto:[email protected]>;
> [email protected]<mailto:[email protected]>
> Subject: Re: [pocl-devel] [cfe-dev] [LLVMdev] SPIR provisional
> specification is now available in the Khronos website
>
> Hi guys,
>
> > So it is valid SPIR, as the specification stands, to manipulate
> > __local variables as Constants in a way that is extremely difficult to
> > undo. That is, in order to transform SPIR to code that can run on a
> > CPU, the GlobalVariable (which is a subclass of Constant) must be
> > replaced with a dynamically calculated Value (which is not a subclass
> of constant).
>
> What about translating automatic locals to function scope pointers?
> This will make handling of automatic locals and local pointer arguments
> similar, which is desirable as they are just a way to describe the same
> thing (I understand automatic locals as just a simpler way to use local
> buffers than local arguments).
>
> In fact, pocl converts automatic locals to implicit "extra" kernel
> arguments and manages both cases the same way.
>
> Carlos
------------------------------------------------------------------------------
Got visibility?
Most devs has no idea what their production app looks like.
Find out how fast your code is with AppDynamics Lite.
http://ad.doubleclick.net/clk;262219671;13503038;y?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
_______________________________________________
pocl-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pocl-devel