[LLVMdev] C-to-PTX compilation issues
nkavv at physics.auth.gr
nkavv at physics.auth.gr
Sat Feb 9 06:03:06 PST 2013
Thanks Justin for your prompt response.
> The following change would work:
>
> // start here
> __attribute__((address_space(3)))
> static unsigned char b[3]={0x10,0x30,0x55};
>
> int arrtest (int x, int y) {
> b[0] = (255 - b[x]) + b[y]; // now it works!
> // b[0] = (255 - b[0]) + b[1]; // works
> b[1] = x - y;
> b[2] = x * y;
> return b[0];
> }
> // end here
Thanks, I will attempt to use this principle to my other small codes.
> If you compile LLVM in debug mode, you would have seen a failure about an
> unknown address space. I just committed a change in r174808 that emits a
> user-visible error for address space issues.
Indeed, I compiled LLVM in Release mode, so for this reason execution
of llc appears to be hanging. I guess a Debug mode is always handy.
> I understand that there is a lack of documentation on the proper use of
> this back-end, and this is something I am working on rectifying. GPU
> targets place additional restrictions and conventions on compilers, and
> they often require some level of custom handling. In this case, you need
> to be careful how you use address spaces. You're not really doing anything
> wrong, clang was just never taught how to handle this case for NVPTX.
Best regards,
Nikolaos Kavvadias
>
>> Hi all,
>>
>> i'm trying to compile some small ANSI C benchmarks to PTX assembly. For
>> this purpose, I'm using the NVPTX backend, introduced in the LLVM 3.2
>> release.
>>
>> It appears that certain LLVM constructs cannot be compiled to PTX. The
>> problems mostly deal with handling of arrays. I also don't get any debug
>> info when these problems.
>>
>> I use "llc" for compiling regular .ll files to PTX using the "nvptx"
>> backend. The llc options are as follows (omitting these options also
>> present the same problems):
>>
>> -nacdrvtest -asm-verbose -stats -print-before-all -print-after-all
>> -time-passes
>>
>> 1. Only programs that make no use of arrays appear to always be processed
>> correctly by llc (nvptx target). Some programs using arrays, make llc
>> "hang" (runs endlessly).
>>
>> 2. One small C function exposing this behavior is as follows:
>>
>> // start here
>> int arrtest (int x, int y) {
>> unsigned char b[3]={0x10,0x30,0x55};
>> b[0] = (255 - b[x]) + b[y]; // doesn't work!
>> // b[0] = (255 - b[0]) + b[1]; // works
>> b[1] = x - y;
>> b[2] = x * y;
>> return b[0];
>> }
>> // end here
>>
>> 3. A change that makes this function compilable (also visible in the
>> comments)
>>
>> Change:
>> b[0] = (255 - b[x]) + b[y];
>> to:
>> b[0] = (255 - b[0]) + b[1];
>>
>> Similarly, even the use of a single variable indexing (e.g. b[x]) doesn't
>> work.
>>
>> Please note that if variable indexing is not used, then PTX assembly is
>> generated. The problems seems related to the support/handling of variable
>> indexing.
>>
>> However, the same code is always processed by other target backends (x86,
>> mips).
>>
>> Is this behavior expected by the NVPTX backend?
>>
>> I understand that PTX is primarily targeted by OpenCL, however I would
>> expect that the backend would issue some warnings on unimplemented features
>> and not just run endlessly with no messages whatsoever.
>>
>> Best regards
>> Nikolaos Kavvadias
>>
>>
>>
>> ______________________________**_________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/**mailman/listinfo/llvmdev<http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>>
>
>
>
> --
>
> Thanks,
>
> Justin Holewinski
>
More information about the llvm-dev
mailing list