[LLVMdev] A newbie question about the class hierarchy

Reid Spencer reid at x10sys.com
Fri Apr 14 07:02:59 PDT 2006

Hi Nai,

The hierarchy is like this:

GlobalVariable : GlobalValue: Constant: User: Value

So, GlobalVariable is a Constant indirectly through GlobalValue. This
change was made sometime after LLVM 1.5 and reflects the fact that all
GlobalValue's are, essentially, a constant address.  Only after
derefercing with getelementptr is something obtained that is
(poentially) variable. Note that "Function" is a GlobalValue as well,
but you can't dereference it or modify what it points to.  So, the
notion of a GlobalVariable being constant makes sense if you look at it
as a constant memory address.  This hierarchy reduced a bunch of time-
consuming checks in LLVM passes, etc. 

As for the documentation, I'll take a look. If its erroneous, it'll get
fixed with the 1.7 release.

Thanks for pointing it out.


On Fri, 2006-04-14 at 18:19 +0800, Nai Xia wrote:
> Hi,
> I apologize if it is a rather stupid question, I am a newbie to LLVM.
> I notice a inconsistency between the current llvm1.6 doc and its source code.
> The doc states that the superclasses of GlobalVariable are GlobalValue, User, Value,
> however in the source code GlobalVariable has Constant as its super.
> I am just curious that why "variable" should be a subclass of "constant"? 
> Regards,
> Nai
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20060414/ef1ab79f/attachment.sig>

More information about the llvm-dev mailing list