The constraint of SIMD is that all ALUs have to share the same instruction stream. This slide presents an example where the instructions for different iterations can be different due to branching.
However, it must be noted that the statement "all ALUs have to share the same instructions stream" still holds TRUE! In case of branching (like in if..else), some of the ALUs/SIMD lanes are masked away/predicated out, making those SIMD units inactive. It doesn't mean that different SIMD lanes are executing different instructions at the same time.