[LLVMdev] How to add an include file

John McCall rjmccall at apple.com
Wed Jul 8 00:16:43 PDT 2009

On Jul 7, 2009, at 11:14 PM, David Minor wrote:
> Adding includes is trivial even w/o llvm, but the real problem here  
> is manipulation of classes, if I understand you correctly adding an  
> inheritee wouldn't be possible.

The problem is that LLVM bitcode is not the right level of abstraction  
to approach this from.  LLVM bitcode doesn't know anything about  
classes;  classes are a higher-level language construct, and it's a  
front-end's responsibility to turn them into the lower-level types  
(with lower-level operations on them) that LLVM understands.  Once  
you've built an LLVM type, it's immutable, so your "leaf class A" type  
would be different from your "class A with base B" type; you can't  
just modify the type in place, and as Eli said, LLVM instructions  
aren't designed for that anyway.  And even if you cloned huge swathes  
of code, painstakingly replacing one type with the other and carefully  
updating member accesses, there's really no reason to think in general  
that the semantics of the result would match what you'd have gotten  
from declaring the proper class inheritance to begin with.

It sounds like what you really want is to hack a C++ front-end (like  
llvm-g++ or clang) to adjust its internal representation of class A  
before it's all lowered into bitcode.  Is there a reason this needs to  
be done as part of some later optimization pass?


More information about the llvm-dev mailing list