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

    <tr>
        <th>Summary</th>
        <td>
            [X86] Illegal type for i4->v4i1 bitcast
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            bug,
            backend:X86
      </td>
    </tr>

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

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

<pre>
    The following reproducer crashes when compiling with `llc repro.ll -mcpu=cascadelake`:

```
define <3 x i1> @repro(i1 %cond) local_unnamed_addr {
  %select = select i1 %cond, <3 x i1> <i1 true, i1 true, i1 true>, <3 x i1> zeroinitializer
  ret <3 x i1> %select
}
```

Error:
```
LegalizeDAG.cpp:979: void (anonymous namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDNode *): Assertion `(TLI.getTypeAction(*DAG.getContext(), Op.getValueType()) == TargetLowering::TypeLegal || Op.getOpcode() == ISD::TargetConstant || Op.getOpcode() == ISD::Register) && "Unexpected illegal type!"' failed.
```

This is what I can see:
```
t63: ch = CopyToReg t0, Register:v4i1 %25, t284, -:67:11 @[ -:2:3 ]       
          t230: i8 = setcc t13, Constant:i64<10>, setgt:ch, -:67:11 @[ -:2:3 ]
        t281: i4 = select t230, Constant:i4<7>, Constant:i4<0>, -:67:11 @[ -:2:3 ] 
      t282: v4i1 = bitcast t281, -:67:11 @[ -:2:3 ] 
```

If I change the IR to use `<4 x i1>` instead of `<3 x i1>` it seems to work:

```
define <4 x i1> @repro(i1 %cond) local_unnamed_addr {
  %select = select i1 %cond, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> zeroinitializer
  ret <4 x i1> %select
}
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VUtv4zYQ_jXjyyCGROp58EFrJQsDiwbIukVvC5ocS2xoURCpPPbXF6StbpKmbdpDDUOPeXzzcV4SzuluINpA_gnydiVm39tpo6Q4CGNodbDqebPvCY_WGPuohw4nGierZkkTykm4nhw-9jSgtKdRm2DxqH2PUCTGyLP12hi8OslxBt5K4aRQZMQ9QZEAbyBpIVmuRXL5x1dFRz0QAt9yfEKdAr9GyJKICazSKQLLpR0UsBqNlcJ8m4dBnEh9E0pNCOWnMxAGQ0eGpEfgLV4eXwJs34ThW52in2YKqnce-fWffL7TZPWgvRZGf6dpCT2Rf4O9cLkcumzfPf35ej1NdvqRptcmX6iLsdrm81qOI_CmLmvgDT5YrRBYJQY7PJ_s7DCkxY1CErBgAbz5GjloO7TN5wXorFnebkdglTEPp4tD-5NVhMCaMwY2ztEUEEK1gVX7L7t1R37_PFITkYFVwJrAriO_tYOnJx9ldUje7RjEvwgzU3BZFHUoUajSXkwd-S_2kSY9dGcOwTDSQyi3UC4gt6O06oKwuO--thefiLO1g_Ni8P_C8Y467TxNUccKYAUCYz8P9DSS9KRQGxO5-Eg_BcaAlXgU2pBa_01R9712qMPgCI87lGJAR_RXVfYFD9mWfezdrR2f9_aOOvRJyOIfJHnzkJ07muVB4VmVhfsV8KYogTdpGqYH8k9RxIA3HCFv8fxb2nX5ecbDeKKuLiPjpUSf8gC55BJ4o4sM-DZNLgPhyHdBLPuPhH4d07MqjRGzl0MaebyJGUKWl4hv5QuTfzz2y-CeVSzOTcwgb_GgvRTOnzl9HO3dau-Ooca9GDpC3xPu7tBbnB3FseHbbNkMUCSoB-dJKLTHi5a_0vrQKCcXAB7tdP_R_Zn9P_sz-_j-fG-VZh9cpdl_W6UrteGq5rVY0SYtypqVWZolq35TZWWW1XXJyiRXaX4QUuZZViaKs4OUSqz0hiWMJ5wlSZowlqwrmeT1UfGCjoqrtIYsoZPQZh225dpO3Uo7N9OmSHOWrYw4kHHxG8vYYe7intiGZyHvaVDAm1-rIkjzdjVtAsbVYe4cZInRzrsfqF57Ez_WwT5vcfdiAeHRTqizK-DXsY0vLbyaJ7PpvR9daBZ2A-ym076fD2tpT8Bu4n4_367Gyf4WksluIn0H7Cae4PcAAAD__8oKRLo">