Loops over operands

Hi all,

there are about 800 calls to getNumOperands() in lib/. Of course one
has to leave out those to MachineInstruction, but nevertheless...

A very substantial amount of those calls are in loop contexts, like:

     for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i, ++GTI) {
       ConstantInt *CI = dyn_cast<ConstantInt>(CE->getOperand(i));
       ...
     }

Usually the induction variable "i" is not even used, apart from being
the argument to getOperand.

Now, unless we have a "Sufficiently Smart Compiler (TM)" I doubt that
this gets compiled to efficient code. I suggest that loops get rewritten
to iterator-style:

     for (op_iterator i = CE->op_begin() + 1, e = CE->op_end(); i != e; ++i, ++GTI) {
       ConstantInt *CI = dyn_cast<ConstantInt>(*i);
       ...
     }

This style potentially saves us multiplications by 12 (24 on 64-bit systems).

Any comments? Can I go ahead and make changes in lib/Analysis ?

Cheers,

  Gabor