Date: Tue, 13 Feb 2001 13:29:52 -0600 (CST) | |
From: Chris Lattner <sabre@nondot.org> | |
To: Vikram S. Adve <vadve@cs.uiuc.edu> | |
Subject: LLVM Concerns... | |
I've updated the documentation to include load store and allocation | |
instructions (please take a look and let me know if I'm on the right | |
track): | |
file:/home/vadve/lattner/llvm/docs/LangRef.html#memoryops | |
I have a couple of concerns I would like to bring up: | |
1. Reference types | |
Right now, I've spec'd out the language to have a pointer type, which | |
works fine for lots of stuff... except that Java really has | |
references: constrained pointers that cannot be manipulated: added and | |
subtracted, moved, etc... Do we want to have a type like this? It | |
could be very nice for analysis (pointer always points to the start of | |
an object, etc...) and more closely matches Java semantics. The | |
pointer type would be kept for C++ like semantics. Through analysis, | |
C++ pointers could be promoted to references in the LLVM | |
representation. | |
2. Our "implicit" memory references in assembly language: | |
After thinking about it, this model has two problems: | |
A. If you do pointer analysis and realize that two stores are | |
independent and can share the same memory source object, there is | |
no way to represent this in either the bytecode or assembly. | |
B. When parsing assembly/bytecode, we effectively have to do a full | |
SSA generation/PHI node insertion pass to build the dependencies | |
when we don't want the "pinned" representation. This is not | |
cool. | |
I'm tempted to make memory references explicit in both the assembly and | |
bytecode to get around this... what do you think? | |
-Chris | |