<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylVV1v2yAU_TX4BSWysZ2PBz-kSTtVq9ZpldppLxUYkrBi4wLOkv76XYjz1aTSqknGxtx7zz3A4cI03xRL5xqL0gkiN_Aotar6C82ZVq6vzQKG3qCJbPllWF6nryieoXiCBnH3hF8u5rIWeKUlxyiLK2pfBH-mnCMyQul0hNdYpgSl14hMMCJ5QxGZ4osW5i1y5PtMOo-EyBij4dU2E_YGCqEzrDTl7zE-AA3pqJKLGsP4AYh9Foh9AFQFICBcUutO6WOn91iJhzpE2RBlhRKlO_EJkGckAuj56JswWtbSSeAF_SN8E_BhG85xbMCBpdy5W6eNOPczn1tTI1xQQaeS4eyiXJQqca8qmxbovdUrYchFtyMZpT5n-k5bXc5VpVf8leL-3fT7bfwce80BcdmAcLpZbqoqCQDbDiwKyq8SMBJoGTSImCYDeKV-ZOCHEoDJZydJPJTg6w50XVXx3twwAyryu8_2tn3uIzda8x2hY_sl17JqxOs_e6-16RInB34n3Z0rU6Lmq8aewoU1s_J0zS5PgXtBbQP4acBFat32nGfbBu_cvIzbpjkIGLR0udo8CWyXulUcM4HnWnFZLzD9QzfYLcXR_ODgCQlDBsOqQw2Dd60d5qIBBx-ja_xnKTqPDdbzACDrpnUWUzgOwPaml0S8SPk4HdOItm6pTfHj64OsdB21Rr2rngvI17J-qauulHafXmP0bzjl8CutbQUcv5s8HY6TaFnwZMDH43nGBpSkVPBsPqT5UKTZnI1YktNIUSaULUCyiBBGyxegDxl_jkCwBDQa_T8LWZCYwJOQZBRnSd5P6IDzLBfZiA3mNBvDyRMVlaof7ge4FyJTBEjWLiwYlbTOHozUWigMQgTSwNBJp0QBhBjcE48PoeI9AUsoBfe1sPfmF-y-xT0s1g5m57fOghi0cRimefsw83NLJ1d3199mj1EgXwTmfwFDpOdk>53791</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            combineVSelectWithAllOnesOrZeros - extend to support X86ISD::BLENDV
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          RKSimon
      </td>
    </tr>
</table>

<pre>
    https://llvm.godbolt.org/z/e4hG7cE3q
```
define void @masked_add(<8 x i32>* %pa, <8 x i32>* %pb, i8 %bitmask) {
  %a = load <8 x i32>, <8 x i32>* %pa, align 32
  %b = load <8 x i32>, <8 x i32>* %pb, align 32
  %m = bitcast i8 %bitmask to <8 x i1>
  %s = select <8 x i1> %m, <8 x i32> %b, <8 x i32> zeroinitializer
  %r = add <8 x i32> %s, %a
  store <8 x i32> %r, <8 x i32>* %pa, align 32
  ret void
}
```
llc -mcpu=znver2
```
masked_add: # @masked_add
  vmovdqa .LCPI0_0(%rip), %ymm1 # ymm1 = [1,2,4,8,16,32,64,128]
  vmovd %edx, %xmm0
  vpbroadcastb %xmm0, %ymm0
  vpand %ymm1, %ymm0, %ymm0
  vpcmpeqd %ymm1, %ymm0, %ymm0
  vpxor %xmm1, %xmm1, %xmm1
  vblendvps %ymm0, (%rsi), %ymm1, %ymm0
  vpaddd (%rdi), %ymm0, %ymm0
  vmovdqa %ymm0, (%rdi)
  vzeroupper
  retq
```
We should be folding away the vblendvps to either and/andnot depending on whether any of the inputs are 0/-1
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVV1v2yAU_TX4BSXyd-IHP6RJO1Wr1mmV2mkvFRiSsGLjAk6T_vpdiPPVpNIq2Qnm3nvOAR-uqWKbcmlta1AyQfENXFKu6uFCMaqkHSq9gKl3uHm6_DaqrpNXFM5QOEF52F_-kfG5aDheKcEwSsOamBfOngljKB6jZDrGayySGCXXKJ5gFGctQfEUX4xQFxFjN6bCOiQUFxiNrrZM2AUIlM6wVIR9xPgE1NMRKRYNhvkDEP0qEP0EqPZAILgixp7Kx1btsSIHdagyvspwySt7kuMhz0R40PPZd66VaIQVoAvGR_ja48NrOMcxHge2cpdurNL8PE9_bU81t94FvUtGs4t2kbLCg7pqO5D33qy4ji-mHdkocZzJB2_1nKtardgrwcO76c_b8Dl0ngPhogXj9Kvc1HXkAbYD2BSUXUUQjOFO4YaKaZTDT-JmcjcVAUw2OyFxUJyte9B1XYf7cEs1uMi9fbqP7bmP0kjDdoKO45dSq7rlr_-dvVa6J44O-k6Gu1QqecNWrTmF83tmxOmeXV4Cc4baFrDTgovS-tdzzrYt3qU5G3dtezAweOlyt3ni2CxVJxmmHM-VZKJZYPJGNtgu-dH64OBxAVMaw65DD4PfRlnMeAsJrkY1-G3J-4wNVnMPIJq2swYTOA6g9mYQBaxMWJEUJLDCSl5WqqbQ7h4f_MF9Agpw9H3Dzb3-A4sweID52gKHU2BgTUpb_Huc3z7MXJtNJld31z9mj0Gn5YfmuwCsjg6BoO_E_d-g1eovcMGjMKbjcHpvsmRURMGyLLJ5NRqzKOR5zPMwJ_OoCDOWF4QVOU2zQBLKpSnB8SiOKaleQBkwgiB4BosHoozDGK4ojsZhGmXDiOSMpRlPxzSfk7SAY8drIuTQfxzgoxDo0sui3cJAUApjzSFIjIGuwLmnBHzS2aXS5a_vD6JWTeBXUHr5_wDdBdE3">