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

    <tr>
        <th>Summary</th>
        <td>
            ICE... SystemZISel?  LICM load hoisting?
        </td>
    </tr>

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

    <tr>
      <th>Assignees</th>
      <td>
            uweigand,
            djtodoro
      </td>
    </tr>

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

<pre>
    I got a test case that resulted in

`fatal error: error in backend: Cannot select: t61: i64 = Constant<8237692794279528316>`

I did a bisect and found that the first bad commit was 2cdc6f2ca62e "Reland "[LICM] Hoist LOAD without sinking the STORE"". I find that it helps to revert that commit on HEAD as well... 

I see in the reduced test case:

```
 %and = and i64 %and12, %conv3       |   %2 = load i64, ptr @e, align 8, !tb
                                      >   %and = and i64 %2, %conv3
  store i64 %and, ptr @e, align 8, !t     store i64 %and, ptr @e, align 8, !t
```
This is inside a loop and it's not for me trivial to see that the hoisting of the load of @e is safe...

In SystemZ isel, it seems that we get an 'and' with two constants, which we can't quite handle.

 i64 = and Constant:i64<1064831134304125>, OpaqueConstant:i64<1064831134304126>

tryRISBGZero(Node) is called, which calls SelectCode(N) which then fails. N is then a 'i64 = Constant<1064831134304124>'

Not sure if SystemZISel should be able to handle this type of node or if something earlier has just gone wrong...

[testcase.tar.gz](https://github.com/llvm/llvm-project/files/8597333/testcase.tar.gz)

```
clang -march=z13 -O1 crash0.i -o a.out -w

clang -march=z13 -O2 crash0.i -o a.out -w
fatal error: error in backend: Cannot select: t48: i64 = Constant<1064831134304124>

llc  -O2 -o out.s crash0.ll
LLVM ERROR: Cannot select: t48: i64 = Constant<1064831134304124>
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVUtv2zgQ_jXyZRBBomzLPviQOsnWizRZOEUPvVHUSGJKiy5JxUh__c5QTuIE2Xa7WEOW-JqZb14fK1s_rjbQ2gASAvoASnqE0MkADv1gAtag-yS7SLLz43ueNTJIA-icdUlxPg7oFFRSfcO-5rW17HtS6tGgCrwQ5jl_9HwKSXEBa9v7IHvaWi9EUc6XolxO6T8TiyKfJ8UlmTm1uoFa14Sx0p4UguxraOxA7wg1dAiNdgS_kjUou9vpAAfpQahazRuh5FwgJEJs0bAojZLZh-vN-lMyu4CPVpPk9e35BRx06OxAuHX_TfdtVHz3-XZ7yRJCpLAhO09WyUaHZu8hWArWA7owrh_t2x4-XpJOgnFAY9I0hdceeUSOGttwWA-KQv2cAorVm6AfnzglB2bRD4okf2NU41JOMNc8VrZ_KGD8JeWa32ImooSxMorwyX1wkEwz5LE0uu1hMSrIQ3W09a9-lLHRxDuwXkF6UuqDdXgC_BdgopHflHk3dJ877YGf3usaqaKMtfsRbUhE6YHLtqF63lEbOP2gqdIpv5yr51LruGC4PGwT5zGgNGYcrNvLBindr7Ldw92jD7j7SgfQMETN7YE7P-o9ILTIhU3Qy-hbGasRwsFSRY3d4lnu0GnV8XklezoV4PugA4EiIYOvjD53G7v30nHnnPtinWfzKTVbXkyLbJqLGTcdqb_dy-8D_up0bNETU8E9bjd3H_74is4mYnFja8rIkoOhpDFYvwDnuYe7SAzreGxxw0fHXQpnD43Uxqdww-JxQXJQ3qGON6Cm0YXyFNcNk9DAVdM8JWBDtsFTm5saKqqAyiBneIwf2WOjj3vkhPaED5jbGvB2h7RHSUfpjEZHAh7uB-rX1vYIB2f79k3SiWO4obmf0yBd2v4guiF_uxD2njtcXNHTUpaHKiXWoIkxD0-fs72z98ye4qrRBin3V4vZsiyKgkZv9YrlT-hCEem1cLaTTnUUwR95AWe3OSgnfZelGs4syJRp7-xwquVdMfETsf90L0wX_3AvvJfcE3TGKIh4CAaBSP0TMGPGA9fXXz7B5XZ7u_3fDL8O66ReFfWyWMpJ0MHgarO-ZJI_KbOkuALga2akiCfeoOXJ4Mzqt-tAez_EQpjNRDaddCupmmWt8pmqMiFQzVSpSplXVT1VMssKNTGyQuNXVIl0ffV4gKgi3n8XE70SJJaRm_k8z_N5Wi-bZb4op1lZZDhfLJnQdtSMKeNIrWsnbhUhVUPradOQP_5lU3pPBIx4NDccULeRyo43gKjvg60tM0S0Lwe6bd3qT9v_5b3tJxHbKvr2NxVfiW0">