[LLVMdev] Adding fields in a already built type? (2)
baldrick at free.fr
Wed Jun 16 01:41:32 PDT 2010
> The reason is that our code generator generates a struct (progressively adding fields) and generates code that access this struct (that is : the fields that are already added). If we cannot create the struct progressively, then we have to define a pass to build the complete struct, then define a second pass to generate the code. If we can simply create the struct progressively at LLVM level, then it make our code simpler.
to access struct fields you don't necessarily need the struct type. For
example, rather than passing around a pointer to your struct type, you can
use an i8*. Suppose you add a new integer (i32) field to your struct, offset N
bytes from the start and want to generate code to load it. Then you can use a
GEP (or ptrtoint, add, inttoptr combination) to offset the pointer by N bytes,
and then load an i32 from this pointer. So I'm suggesting that you can generate
*code* progressively as fields are added without ever explicitly defining the
struct type. Once you have generated all fields, you can then replace all
these i8* with a (bitcast of) the final "struct type"*, and the optimizers
should then clean everything up.
More information about the llvm-dev