https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70322
--- Comment #5 from Ilya Enkovich <ienkovich at gcc dot gnu.org> --- STV is a scalar to vector converter. It doesn't combine two instructions into a single ANDN, it searches for existing ANDN patterns and converts them into vector mode. Combine is responsible for producing ANDN out of two instructions. With proper one_cmpl pattern combine should be able to handle it. TARGET_BMI is required for scalar version. Vector version doesn't require BMI but if instruction is not converted into a vector one then we split it into BMI instructions. I had ANDN support for non-BMI targets in my plans. But you can't just remove TARGET_BMI from existing pattern. Additional split is needed as mentioned in [1]. BTW I expect ANDN support for non-BMI targets should improve 462.libquantum performance on Silvermont. It should be used to test a fix. [1] https://gcc.gnu.org/ml/gcc-patches/2016-01/msg01229.html