Ok, here are my comments and suggestions about the LLVM instruction set.
We should discuss some now, but can discuss many of them later, when we
revisit synchronization, type inference, and other issues.
(We have discussed some of the comments already.)


o  We should consider eliminating the type annotation in cases where it is
   essentially obvious from the instruction type, e.g., in br, it is obvious
   that the first arg. should be a bool and the other args should be labels:

	br bool <cond>, label <iftrue>, label <iffalse>

   I think your point was that making all types explicit improves clarity
   and readability.  I agree to some extent, but it also comes at the cost
   of verbosity.  And when the types are obvious from people's experience
   (e.g., in the br instruction), it doesn't seem to help as much.


o  On reflection, I really like your idea of having the two different switch
   types (even though they encode implementation techniques rather than
   semantics).  It should simplify building the CFG and my guess is it could
   enable some significant optimizations, though we should think about which.


o  In the lookup-indirect form of the switch, is there a reason not to make
   the val-type uint?  Most HLL switch statements (including Java and C++)
   require that anyway.  And it would also make the val-type uniform 
   in the two forms of the switch.

   I did see the switch-on-bool examples and, while cute, we can just use
   the branch instructions in that particular case.


o  I agree with your comment that we don't need 'neg'.


o  There's a trade-off with the cast instruction:
   +  it avoids having to define all the upcasts and downcasts that are
      valid for the operands of each instruction  (you probably have thought
      of other benefits also)
   -  it could make the bytecode significantly larger because there could
      be a lot of cast operations


o  Making the second arg. to 'shl' a ubyte seems good enough to me.
   255 positions seems adequate for several generations of machines
   and is more compact than uint.


o  I still have some major concerns about including malloc and free in the
   language (either as builtin functions or instructions).  LLVM must be
   able to represent code from many different languages.  Languages such as
   C, C++ Java and Fortran 90 would not be able to use our malloc anyway
   because each of them will want to provide a library implementation of it.

   This gets even worse when code from different languages is linked
   into a single executable (which is fairly common in large apps).
   Having a single malloc would just not suffice, and instead would simply
   complicate the picture further because it adds an extra variant in
   addition to the one each language provides.

   Instead, providing a default library version of malloc and free
   (and perhaps a malloc_gc with garbage collection instead of free)
   would make a good implementation available to anyone who wants it.

   I don't recall all your arguments in favor so let's discuss this again,
   and soon.


o  'alloca' on the other hand sounds like a good idea, and the
   implementation seems fairly language-independent so it doesn't have the
   problems with malloc listed above.


o  About indirect call:
   Your option #2 sounded good to me.  I'm not sure I understand your
   concern about an explicit 'icall' instruction?


o  A pair of important synchronization instr'ns to think about:
     load-linked
     store-conditional


o  Other classes of instructions that are valuable for pipeline performance:
     conditional-move		 
     predicated instructions


o  I believe tail calls are relatively easy to identify; do you know why
   .NET has a tailcall instruction?


o  I agree that we need a static data space.  Otherwise, emulating global
   data gets unnecessarily complex.


o  About explicit parallelism:

   We once talked about adding a symbolic thread-id field to each
   instruction.  (It could be optional so single-threaded codes are
   not penalized.)  This could map well to multi-threaded architectures
   while providing easy ILP for single-threaded onces.  But it is probably
   too radical an idea to include in a base version of LLVM.  Instead, it
   could a great topic for a separate study.

   What is the semantics of the IA64 stop bit?




o  And finally, another thought about the syntax for arrays :-)

   Although this syntax:
	  array <dimension-list> of <type>
   is verbose, it will be used only in the human-readable assembly code so
   size should not matter.  I think we should consider it because I find it
   to be the clearest syntax.  It could even make arrays of function
   pointers somewhat readable.

