[LLVMdev] C-to-PTX compilation issues

nkavv at physics.auth.gr nkavv at physics.auth.gr
Sat Feb 9 03:45:13 PST 2013


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






More information about the llvm-dev mailing list