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