<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56779>56779</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DAG][X86] Failure to simplify FP_TO_SINT_SAT to i128 that is within i64 bounds
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
llvm:codegen
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
Noticed while fixing a constant fold of an opaque constant in ea7f14dad068b094d44648ca8bba3cd36b10d12a
```
define i64 @stest_f64i64(double %x) {
; CHECK-LABEL: stest_f64i64:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: pushq %rax
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: callq __fixdfti@PLT
; CHECK-NEXT: xorl %ecx, %ecx
; CHECK-NEXT: movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF
; CHECK-NEXT: cmpq %rsi, %rax
; CHECK-NEXT: movq %rdx, %rdi
; CHECK-NEXT: sbbq $0, %rdi
; CHECK-NEXT: cmovlq %rdx, %rcx
; CHECK-NEXT: cmovgeq %rsi, %rax
; CHECK-NEXT: movabsq $-9223372036854775808, %rdx # imm = 0x8000000000000000
; CHECK-NEXT: cmpq %rax, %rdx
; CHECK-NEXT: movq $-1, %rsi
; CHECK-NEXT: sbbq %rcx, %rsi
; CHECK-NEXT: cmovgeq %rdx, %rax
; CHECK-NEXT: popq %rcx
; CHECK-NEXT: .cfi_def_cfa_offset 8
; CHECK-NEXT: retq
entry:
%conv = fptosi double %x to i128
%0 = icmp slt i128 %conv, 9223372036854775807
%spec.store.select = select i1 %0, i128 %conv, i128 9223372036854775807
%1 = icmp sgt i128 %spec.store.select, -9223372036854775808
%spec.store.select7 = select i1 %1, i128 %spec.store.select, i128 -9223372036854775808
%conv6 = trunc i128 %spec.store.select7 to i64
ret i64 %conv6
}
```
This create opaque constant bounds that prevent min/max and then fp_to_sint_sat matching.
(No godbolt link yet as the commit has only just gone in so trunk codegen doesn't match).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVU1z4jgQ_TXmoopLlj85-EBC2N2aVHZqw2FuLsmSQRPbMpacgX-_LWEWQhgn63KB5H563f3UUjPFD_mzMrIUHP3aylqgSu5lu0EUlarVhrYGVarmSFWItkh1dDeIs0m2SNC0CiJOOU4yhucRj6IkykqaMUbDkocJCzAPCPXw0sOL8TfB4-umXFSyFUgmEfIirI3QpqiSCOYeybgaGITlkXjvkTny0vuRI7xHD38-Pny7e1rcPz554QK9WxkurnAWcXw8Elo-xnxsP45T0Zr-cM39_PhjPS7sBr3dWWBP9xMwv6xkARkVZUULVVVaGBQkEwtKWtc7VBQgPK-MBAW-P60n8HvV1y7eEgR5OI1-j2_UG2XaRh7NCQnDlOAwyeIoTeMMpyNFr6XTQTYN8sIlwvt09f6ZyqDpdiPJiW5SIojoiOenDHouJ_CaMRc-_hK6BPr6mn9SIbtiI_5vCidR7z6qmv0X6P5K1Qy_f76iKj2r9AVVo7vgvKefi-qk-Qr-UqSzrpMidarbfa7-rQOTTeB7YXZH8_HEng66Pdcx3ExvTuqqMwpq-uL2QEYhGZDsAo0dVILSSNfGWU8kNsFbx-W8WHei9LVRvfC1qEVpHNk4lIHjtyzXrG4-TR1cxLU5x_XBo6W7WX4TUaYfwwwuw7zpxBk_8WTzSxy56Ye2_D1h6nYCruhxLWzo8e4fOca9T5c3m8Xxd72VGpW9oEZ8aEpMDS3XyGypQV0v3qBMUCNbj6wauocuxsEkWqiQwqhCy9YUGpANNeUWOp__rlGR7FmhjeJMQX3Usn1FB4iWWnbrsWmkQVuYqrY-oJ-DNgC2raxFWjkdXgHFxQb8cSU0BJGOrqCZ-TORB0k8x0ES4mzG85DPwzmdGWlqkXvx_XLxhxcvYfAjS2CAVlTWQy-sflo2XS2rA1p9L9Z_Fy9_Pa-Ll8X6VOTH7EGjX9JAVk7foy6zoa_zrTGdtieHrODdAGZgPqQDk7p-O_3ddb366SpgJbUehIZBnKTpfLbNKWWYl1xEFJp9FmQkTQgmc2i-FFcBCWY1ZaLWNguPEEbLV9Fy8GgzIeR4fRDnK1yMCtnv8XImcyAiOCVZEMZBlPqkDEIWhzHjWNA4LKFDigaU8O1yX_WbWZ-7cNmw0WCspTb6bKRay00rnKCWnw5mq_r8n28vslHtzGWWu7T-BU2xiDE">