<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139641>139641</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed Optimization: -(x & c1) >> shamt | -(x & c1) —> x & c1 ? -1 : 0 when 2^shamt > c1 and shamt ≤ bitwidth(x)/2
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Cancelll
</td>
</tr>
</table>
<pre>
```llvm
define i64 @src(i32 %arg0) {
%1 = sub i32 0, %arg0
%2 = and i32 %1, 63
%3 = zext nneg i32 %2 to i64
%4 = sub nsw i64 0, %3
%5 = lshr i64 %4, 8
%6 = or i64 %5, %4
ret i64 %6
}
define i64 @tgt(i32 %arg0) {
%1 = and i32 %arg0, 63
%2 = icmp ne i32 %1, 0
%3 = sext i1 %2 to i64
ret i64 %3
}
```
Alive2: [https://alive2.llvm.org/ce/z/yLQgJp](https://alive2.llvm.org/ce/z/LqeBrj)
Example: [https://godbolt.org/z/hEKWGoeq3](https://godbolt.org/z/7KxvbWbq3)
Found this pattern in function bn_rshift_fixed_top in openssl/crypto/bn/sn_shift.c
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMlEtvozwUhn_NYWMlMseYy4IFacInfe1oNKsuIy4GXDmGYpOk_fUjk5Bm2i4qRbHk9zkXv8emMEa2WogU-Ab41ism2_Vj-lDoSiilvLKv31II6eWn1PEANKtFI7UgMgwIBNSMFWAsGRJAXowtBUwIRBugGXFbPgG2JWYqiWMo4MMNvBI4E4WuyTWL76CQLTqb9XdxtkRr0S4UEtu7JhYsuBXS5jR3txS7ZeIzokw3XrpHHjgkXvRw1vubyq8JLjVGYRchBJpBtHX_n_2wrf2BH3envTD3B74YIqvDQFzeO1Pov54Y54n0v7hx1yn76HQZI9AsU_IoEFhGgG86awcDLAPMAfNiltZu1ut-bAHzSgDm74D529Of9v8B-BYw_nHQ06vYjC-ACdBsdy4OgxLf1m37uuyVvYa7yG73-PxfL17ZdxW_4tHj-Vg-l6_sUgtolveTrontpCFDYa0YNZGaNJOurOw1KfV-NJ1s7L6RZ1HvbT84vR-ENka5M4xvg-0B81ID5kbvZ3pdeXXK6oQlhSdSPwoimvhhmHhdKso4bjBsBG14xf2G85AGLGFVnARNVXFPpkiRU-4jMj_AZB3RMKwL7keR3wQxBhBQcSikulnpSWMmkfosCQPfU0UplJlfK6IWJzKrgOge75i6oFU5tQYCqqSx5iONlVaJ9Jc0RtTk92DlQb4XzgY3jBVgfCaAIan8-bqyHbAdMV1xsASih6_ADiGmkAQOWwQCLCcrt2SEklMnNEHgu2sWtnOIu_fXDZcigSwgpbQnWdvO1XCzwxy9aVTpp4FL203luuoPgPn8Jbosq2HsX0RlAfPZDAOYX906pvg3AAD__6NWXEg">