In general, expressions in GIMPLE consist of an operation and the
appropriate number of simple operands; these operands must either be a
GIMPLE rvalue (is_gimple_val), i.e. a constant or a register
variable.  More complex operands are factored out into temporaries, so
that
a = b + c + d
becomes
     T1 = b + c;
     a = T1 + d;
 The same rule holds for arguments to a GIMPLE_CALL.
 
The target of an assignment is usually a variable, but can also be a
MEM_REF or a compound lvalue as described below.