More generally speaking: every way you can change a source program without changing the compiler output is a way it contains information that the machine code doesn’t. And compilers do a lot of non-injective transformations, that is, transformations which have same outputs for different inputs. Loop unrolling, replacing for with while (or vice versa), etc.
More generally speaking: every way you can change a source program without changing the compiler output is a way it contains information that the machine code doesn’t. And compilers do a lot of non-injective transformations, that is, transformations which have same outputs for different inputs. Loop unrolling, replacing
for
withwhile
(or vice versa), etc.