Say I have code that could benefit from AVX2, but I know a majority of my user base will have hardware that does not support this feature. When I compile, do modern compilers automatically create branches in the binary to use other instruction sets? For instance, I compile it with AVX2 support, does it create parallel paths? So the compiled version says this block of code can be executed if AVX2 is present, else if AVX is present do this, else do this. And then depending on which hardware is running it it picks the most efficient executuion path through the binary. The the binary is 4 times larger than if it was optimized for just AVX2, but it its also compatible across more instructionsets/hardware.