1  /* { dg-do compile } */
       2  /* { dg-options "-march=cannonlake -O2" } */
       3  /* { dg-final { scan-assembler-not {(?n)vmovdq} } } */
       4  /* There should be no load + vpcmp, just vpcmp with memory operand.  */
       5  
       6  #include<immintrin.h>
       7  __mmask16
       8  foo (__m256i* n, __m256i mch256)
       9  {
      10    __m256i data1 = _mm256_loadu_si256(n);
      11    __m256i data2 = _mm256_loadu_si256(n+1);
      12    __mmask16 mask1 = _mm256_cmpeq_epu16_mask(data1, mch256);
      13    __mmask16 mask2 = _mm256_cmpeq_epu16_mask(data2, mch256);
      14    return mask1 + mask2;
      15  }
      16  
      17  __mmask16
      18  foo1 (__m256i* n, __m256i mch256)
      19  {
      20    __m256i data1 = _mm256_loadu_si256(n);
      21    __m256i data2 = _mm256_loadu_si256(n+1);
      22    __mmask16 mask1 = _mm256_cmpeq_epu16_mask(mch256, data1);
      23    __mmask16 mask2 = _mm256_cmpeq_epu16_mask(mch256, data2);
      24    return mask1 + mask2;
      25  }