[LLVMdev] Unique shape and types
    Nicolas Geoffray 
    nicolas.geoffray at lip6.fr
       
    Wed Jun 20 09:26:36 PDT 2007
    
    
  
Hi all,
In its implementation of types, LLVM only has one instance of a given 
shape, mostly for type equality (and I suppose projects like pool 
allocation requires it).
However, this leads to a somehow misleading bytecode representation. For 
example, consider the C++ program compiled with llvm-g++:
class AAA {
  int b;
};
class FFF {
  int a;
};
extern int foo(AAA * aaa);
extern int bar(FFF * aaa);
This gets compiled to
%struct.AAA = type { i32 }
%struct.FFF = type { i32 }
declare i32 @foo(AAA*)(%struct.AAA*)
declare i32 @bar(FFF*)(%struct.AAA*)
This is misleading because the bytecode tells us the argument type of 
bar is AAA. I suppose the name "@bar(FFF*)" helps the programmer finding 
that bar takes actually a FFF struct pointer.
Is this a non-issue for LLVM? Are types just considered as layouts?
The issue I'm facing is object inheritance and how to find from a LLVM 
type what types it inherits. Currently this can't be implemented in LLVM 
and I need to implement a higher representation for types.
Best,
Nicolas
    
    
More information about the llvm-dev
mailing list