<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">