[cfe-dev] "generic" address space

Mon P Wang wangmp at apple.com
Mon Jul 14 22:21:29 PDT 2008


In the llvm, I'm adding support for address spaces for builtin  
functions that take pointers.  For
example, the front end will generate slightly different code if the  
incoming pointer to the intrinsic function comes from different  
address spaces, e.g.,
   @llvm.atomic.load.add.i32.p0i32      // returns i32, i32 ptr to  
default address space
   @llvm.atomic.load.add.i32.p11i32   // return  i32, i32 ptr to  
address space 11

To generate this in Clang, I didn't want to require the user to have  
to specify what specific address spaces a builtin can take, especially  
if the intrinsic is supported on the address space for a particular  
machine.  So, I added the concept to ASQualType the concept of a  
"generic" address space that can be used in the parameter type of a  
function prototype.   This concept is used when we checking to see if  
an argument and a parameter type are compatible.  An argument of type  
pointer to an address space to a Type T1 is compatible with a  
parameter of type pointer to a generic space to a Type T1.  When we  
get to code generation, we take the type of the argument account to  
generate the different intrinsic names.

I'm also going to change clang to generate an error if the compiler  
needs to do an implicit cast between to pointers pointing at different  
address spaces.  Typically, this operation doesn't make sense.  Note  
that users can still do explicit cast between address spaces.

If you have any comments or suggestions, please let me know.

-- Mon Ping

More information about the cfe-dev mailing list