|  | SUMMARY | 
|  | ------- | 
|  |  | 
|  | We met to discuss the LLVM instruction format and bytecode representation: | 
|  |  | 
|  | ISSUES RESOLVED | 
|  | --------------- | 
|  |  | 
|  | 1. We decided that we shall use a flat namespace to represent our | 
|  | variables in SSA form, as opposed to having a two dimensional namespace | 
|  | of the original variable and the SSA instance subscript. | 
|  |  | 
|  | ARGUMENT AGAINST: | 
|  | * A two dimensional namespace would be valuable when doing alias | 
|  | analysis because the extra information can help limit the scope of | 
|  | analysis. | 
|  |  | 
|  | ARGUMENT FOR: | 
|  | * Including this information would require that all users of the LLVM | 
|  | bytecode would have to parse and handle it.  This would slow down the | 
|  | common case and inflate the instruction representation with another | 
|  | infinite variable space. | 
|  |  | 
|  | REASONING: | 
|  | * It was decided that because original variable sources could be | 
|  | reconstructed from SSA form in linear time, that it would be an | 
|  | unjustified expense for the common case to include the extra | 
|  | information for one optimization.  Alias analysis itself is typically | 
|  | greater than linear in asymptotic complexity, so this extra analaysis | 
|  | would not affect the runtime of the optimization in a significant | 
|  | way.  Additionally, this would be an unlikely optimization to do at | 
|  | runtime. | 
|  |  | 
|  |  | 
|  | IDEAS TO CONSIDER | 
|  | ----------------- | 
|  |  | 
|  | 1. Including dominator information in the LLVM bytecode | 
|  | representation.  This is one example of an analysis result that may be | 
|  | packaged with the bytecodes themselves.  As a conceptual implementation | 
|  | idea, we could include an immediate dominator number for each basic block | 
|  | in the LLVM bytecode program.  Basic blocks could be numbered according | 
|  | to the order of occurrence in the bytecode representation. | 
|  |  | 
|  | 2. Including loop header and body information.  This would facilitate | 
|  | detection of intervals and natural loops. | 
|  |  | 
|  | UNRESOLVED ISSUES | 
|  | ----------------- | 
|  |  | 
|  | 1. Will oSUIF provide enough of an infrastructure to support the research | 
|  | that we will be doing?  We know that it has less than stellar | 
|  | performance, but hope that this will be of little importance for our | 
|  | static compiler.  This could affect us if we decided to do some IP | 
|  | research.  Also we do not yet understand the level of exception support | 
|  | currently implemented. | 
|  |  | 
|  | 2. Should we consider the requirements of a direct hardware implementation | 
|  | of the LLVM when we design it?  If so, several design issues should | 
|  | have their priorities shifted.  The other option is to focus on a | 
|  | software layer interpreting the LLVM in all cases. | 
|  |  | 
|  | 3. Should we use some form of packetized format to improve forward | 
|  | compatibility?  For example, we could design the system to encode a | 
|  | packet type and length field before analysis information, to allow a | 
|  | runtime to skip information that it didn't understand in a bytecode | 
|  | stream.  The obvious benefit would be for compatibility, the drawback | 
|  | is that it would tend to splinter that 'standard' LLVM definition. | 
|  |  | 
|  | 4. Should we use fixed length instructions or variable length | 
|  | instructions?  Fetching variable length instructions is expensive (for | 
|  | either hardware or software based LLVM runtimes), but we have several | 
|  | 'infinite' spaces that instructions operate in (SSA register numbers, | 
|  | type spaces, or packet length [if packets were implemented]).  Several | 
|  | options were mentioned including: | 
|  | A. Using 16 or 32 bit numbers, which would be 'big enough' | 
|  | B. A scheme similar to how UTF-8 works, to encode infinite numbers | 
|  | while keeping small number small. | 
|  | C. Use something similar to Huffman encoding, so that the most common | 
|  | numbers are the smallest. | 
|  |  | 
|  | -Chris | 
|  |  |