[LLVMdev] Assignment instruction.

Misha Brukman brukman at uiuc.edu
Thu Jun 17 10:20:02 PDT 2004


On Thu, Jun 17, 2004 at 05:09:30PM +0200, Tobias Nurmiranta wrote:
> A small thing I miss in the intermediate representation is a simple
> assignment instruction, like:
> 
>   %x = uint 3
> or:
>   %x = uint %y
> 
> It would simplify the implementation of frontends, I think.

Neither of these is necessary, and adding new instructions means every
transformation has to handle these (extra cases, extra complexity, etc.)

In the first case, "x = 3", you can simply constant-propagate the 3 and
use it everywhere you would use the x.  If you are programming an LLVM
pass, create a Value* that is the "uint 3" and use it.  If you are
writing LLVM assembly by hand, use "x = add uint 3, 0" and you have the
same effect, without an extra special case for future transformations.

As for "x = y", same as above: since we are using SSA, y cannot be
assigned a new value, ever, so you can just use y anywhere below where
you would otherwise use x, and the assignment isn't even necessary.

Basically, the point is to have an orthogonal instruction set where
little (or no) functionality is duplicated across the instructions,
because that cuts down on the number of cases a transformation has to
deal with.

-- 
Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu




More information about the llvm-dev mailing list