Looking through the IR documentation, I have been unable to establish if the size of a pointer value is knowable to an LLVM optimization pass. For an IR->IR optimization pass, is the pass allowed to assume anything about the size of a pointer value? Or is making such an assumption explicitly disallowed?
Once target specific information gets introduced, I'm assuming that the size of a pointer value becomes known. Is this true?
The context of my question is that I'm working on a project where being able to categorically disallow certain types of optimizations would be quite helpful. For example, we'd like to be able to "prove" that no LLVM pass we run can store a non-pointer value into a pointer typed field in an object. (If the relative sizes aren't known, this is trivial.)
Just to note, I'm not asking about implementation; I'm only asking about intended semantics. If the current implementation violates the intended semantics slightly, we're happy to contribute patches.