Kenneth Zadeck wrote: >>>>> I have had some discussions with Honza and Diego about the type >>>>> consistency at the gimple level. They told me that Andrew was in the >>>>> process of making gimple properly type consistent.
I think that there is widespread consensus that GIMPLE should ideally be type-consistent, in the sense that (as you say) the only places where types change is via explicit type-casts (e.g., NOP_EXPRs). The same optimization that you want to perform at the LTO level (i.e., not writing out types for every nodes) is also one that would pay off in terms of memory savings at the TREE level. (In my opinion, it doesn't really matter if MODIFY_EXPR is treated as doing an implicit conversion; the important thing is that the set of places where implicit conversions are performed be both limited and documented. If we save tons of TREE nodes by saying that MODIFY_EXPR is defined to do an implicit conversion, as if the right-hand side had a NOP_EXPR to convert it to the type of the left-hand side, then that might be a perfectly valid memory optimization on TREE.) So, the question is one of timing: do we build LTO to work with the current not-type-consistent GIMPLE, or do we fix the compiler to generate type-consistent GIMPLE first and then go on to LTO? I think this is a question of priorities. It's relatively straightforward to fix the compiler to generate type-consistent GIMPLE: you write consistency-checking routines and then you just fix all the problems that arise, by inserting explicit type-conversions at the source of the offending inconsistency. However, while straightforward, that's probably person-months of effort. >From an engineering point of view, it would probably be best to fix GIMPLE first; that has other positive side-effects, and it would avoid doing LTO work that might have to be undone. However, from a project-management point of view, it might be best to go for proof-of-concept on LTO first, writing out the types for nodes explicitly. I would assume that this wouldn't be a lot of additional effort; i.e., while it will waste a lot of space, it won't waste a lot of programmer time. You could also strike a middle ground: write the consistency checker (Danny may have already done this) as a separate pass and put it on the LTO branch. Run it before writing out LTO information. If the input is inconsistent, abort; otherwise, write out LTO information. That lets you write out the more compact representation, but still avoid trying to fix all of GIMPLE right now. (You just have to fix whatever is required for proof-of-concept programs to work.) It does mean, though, that you're essentially committing to the type-safety work before we can make LTO part of mainline, which is probably adding several person-months to the overall project. Or else you have to assume that you may have to go back and write out the type information later, in order to get LTO into mainline. So, I guess my inclination would be to just write out the type information now, and thereby avoid the dependency on fixing GIMPLE. -- Mark Mitchell CodeSourcery [EMAIL PROTECTED] (650) 331-3385 x713