I have noticed many times whilst disassembling executables that often the compiler will produce jumps to other unconditional jumps, rather than simply jumping to the final destination. For example:
Notice instead of jmp 0x100001634
it would have written jmp 0x100001681
and skipped the two other jumps in between. Is there a particular reason for not doing so?