<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/131587>131587</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [x86-64 BMI1] Missed `blsi`emit when `& x` can be unnecessarily factored out of `(x & -x)`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    This code: ([Zig Godbolt](https://zig.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:zig,selection:(endColumn:1,endLineNumber:11,positionColumn:1,positionLineNumber:11,selectionStartColumn:1,selectionStartLineNumber:11,startColumn:1,startLineNumber:11),source:'export+fn+z(b:+bool,+x:+u64)+u64+%7B%0A++++const+y+%3D+x+%26+-%25x%3B+//+blsi%0A++++return+if+(b)+y+else+x%3B%0A%7D%0A%0Aexport+fn+z2(b:+bool,+x:+u64)+u64+%7B%0A++++const+y+%3D+blsi(x)%3B%0A++++return+if+(b)+y+else+x%3B%0A%7D%0A%0Afn+blsi(a:+u64)+u64+%7B%0A++++return+asm+(%22blsi+%25%5Ba%5D,+%25%5Bret%5D%22%0A++++++++:+%5Bret%5D+%22%3Dr%22+(-%3E+u64),%0A++++++++:+%5Ba%5D+%22r%22+(a),%0A++++)%3B%0A%7D'),l:'5',n:'0',o:'Zig+source+%231',t:'0')),k:50,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:ztrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:2,lang:zig,libs:!(),options:'-O+ReleaseFast+-target+x86_64-linux+-mcpu%3Dznver5',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+zig+trunk+(Editor+%231)',t:'0')),header:(),k:50,l:'4',m:100,n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)) ([LLVM Godbolt](https://llvm.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,selection:(endColumn:1,endLineNumber:21,positionColumn:1,positionLineNumber:21,selectionStartColumn:1,selectionStartLineNumber:21,startColumn:1,startLineNumber:21),source:'define+dso_local+i64+@z(i1+zeroext+%250,+i64+%251)+local_unnamed_addr+%7B%0AEntry:%0A++%252+%3D+sub+i64+0,+%251%0A++%253+%3D+select+i1+%250,+i64+%252,+i64+-1%0A++%25.+%3D+and+i64+%253,+%251%0A++ret+i64+%25.%0A%7D%0A%0Adefine+dso_local+i64+@z2(i1+zeroext+%250,+i64+%251)+local_unnamed_addr+%7B%0AEntry:%0A++%252+%3D+tail+call+i64+asm+%22blsi+$%7B1%7D,+$%7B0%7D%22,+%22%3Dr,r,~%7Bdirflag%7D,~%7Bfpsr%7D,~%7Bflags%7D%22(i64+%251)+%232%0A++%25.+%3D+select+i1+%250,+i64+%252,+i64+%251%0A++ret+i64+%25.%0A%7D%0A%0Adefine+dso_local+i64+@blsi(i64+%250)+local_unnamed_addr+%7B%0AEntry:%0A++%251+%3D+tail+call+i64+asm+%22blsi+$%7B1%7D,+$%7B0%7D%22,+%22%3Dr,r,~%7Bdirflag%7D,~%7Bfpsr%7D,~%7Bflags%7D%22(i64+%250)+%232%0A++ret+i64+%251%0A%7D%0A'),l:'5',n:'0',o:'LLVM+IR+source+%231',t:'0')),k:48.76712328767123,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:irclangtrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,libs:!(),options:'-O3+-march%3Dznver5',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+clang+(trunk)+(Editor+%231)',t:'0')),k:51.23287671232877,l:'4',m:100,n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4))

```zig
export fn z(b: bool, x: u64) u64 {
    const y = x & -%x; // blsi
    return if (b) y else x;
}
```

Gives:

```asm
        mov     rcx, rsi
 neg     rcx
        test    edi, edi
        mov     rax, -1
 cmovne  rax, rcx
        and     rax, rsi
```

It should be:

```asm
 blsi    rax, rsi
        test    edi, edi
        cmove   rax, rsi
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWEuP2zgS_jX0hbAhUdbr4INlpwcBks1iZjeHuTQoqWxzQpEGSTl2H_a3L0jKtuRH0u7dYGaANNSWVKz6WCzWS6Ras7UAmKG4QPFyRFuzkWr2mXJWU_VlVMr6MPvXhmlcyRpQNMeIZCgufmdr_IusS8kNipeIZBtjthpFc0SeEHl6YevJ2g5PuHGUaO3GQitNsvsvGxTN7UzvamakQmTB3Gi2YhwEbcC9pSEiKSKLlRTmt4pySw2nHeHfGv6592yBZ_vDDiOy4FTYuV7YGpGFBg6VYVJ4fBD1QvK2ER0viPoDE_CPtilBWZolbqVmVmTAeSRes5-m-M1QZQZCw6EbotcSNxlzOyJbVXWGgf1WKoNIsRKIFC-IZKUbKEopOSILRApvm6JNpk7cPxSIxKn9CebupbsqKbRFO3iOaOnk3TNJECnG9iHe2yEv8eSuouSaXYEpMK2yarGVI2SlV8CCA9fgsR2Sk4zT5fEpmF8sjPyIlXmts72TPuvxf1qBU7ybgj6g6WlSqhs_qzU68UhuJ2JE4rig9nfpLXGmKjAdPSbkCntwRX5oIFQc5aKl6h6tBnbfo3e9FSxeC00HwH1Mehcov7Jp6nm5d_rYh7kYBL30b7_bYC-6EPGzRl32MH3-3CN-QdE8Ds7Q029A-xeb84IbaIvbma3ZMg69vHaiRPMXo1rxxWYxxg0on0w7Lz9OXTJB1WGQBD3pU_kHVGYwUMmmAWE-CX4YYNRQtusF5VwP2GtoqFhzGPIyZfPUDvSADHuoWjNMxkwY4AMuzkpF1WHhC8eZbhRrBqI7UKXUsPQaMLG-tOWK07X-zODrpy2It5YAclkCOCt1b4fsRHJrk3K32PEnRIpfgQPV8ERduhgbqtY2Oop9ljwn0zFnorUZcdxU29bFyYvYgepcUu5AKVbD5TSPFp_Has_bS89rK89F4QlfHY42d7uI7HzdBv6x1J-CM78fnxugtVPhZMo7EWsdLAyCt8VubzHkuwnglvAOlPa769Nj3nVNHz58_vittonzXfOX7Zusco_7LnnMecnbvZe81n3JjcaphhUTtkLUWj5zWVFuy7wvy9PANlIstM4LSsLeHEts4MstO5ZvEnvowiE8t8Kavn6mda0G9f2dMF0W7xW7mMSk143otjxBB72yHl4KRX0hZx4rF97XkfQp4yu8SQ-PinooG93RxLUMfcbJrR7oO1Ymf4KZDWVWiYrysy7HTqvfZk0dbNgtaNGjBcdFEnI2zqlnWtj__zjGmilbyI4QnrjaanVBscWuj5ldL9ylSvKtnXvcE37InnYNbw8k-J-2Lvz7bl1wZ-uuzBxemfn1_a6tMIgU7399tOudZpM0SUMSkczf_5wmmKnKlpufrfAPbYWvq_r3e-HIdblUVZufbe4r2lznxr7B7Zw5f7zddc1tODkHJcnS9K_e66Jgbq8k8Jft94_nN3gl8PFQCncHN9i6J_YHCfaGUVqgYI4xxu6QBh8wipZ4jxFJ8BiReI-iAvt-Gbsc75n9OQlmK9wdzOADBq7B4ltAlC77anktfznG81BnW0U8qv1r5M7dVbW3-io_pYD1iXrmNaCNvUPNLK-93QCiDmgc2rGqkTsBJ-IQjoq6L-GnvljDe4P1Rra8xiXcXYo11BXQq5S2-sFdFUb1LKrzKKcjmIXplJAgytN8tJnleU4orMokDkqSplGdV3FGappUpMzyKB-xGQlIHERhGuQRifPJNII0j1YVjZM0p3mNpgE0lPGJ-yqSaj1iWrcwC6MwztIRpyVw7c6tCRHwFbtRRAiKlyM1s0Ljsl1rNA0400afYQwz3B1477NknExx8fF9iOIl_si0hhqjxHctSQANM_jrBoSlWffboyTAFRW4BNwKARVoTRXjB7yilZEKaixbg-XKC2Sd07oTxSQYtYrPhh98a2Y2bTmpZNN9_XW38VZJV8XIk1uWRuSpW_duRv4bAAD__2CoVmE">