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

    <tr>
        <th>Summary</th>
        <td>
            [Inst Combine] Redundant type extension when performing lshr
        </td>
    </tr>

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

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

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

<pre>
    The following OpenCL tests:
cat lshr.cl
```
uchar* lshr(uchar in, uchar* out) {
    for (int i=0; i<8; i++)
        out[i] = ((in >> i) & 1);
    return out;
}
```
Compiled with:
`clang lshr.cl -march=x86-64 -Xclang -finclude-default-header -Os -S -emit-llvm -o -`
generates the following IR:
```
define dso_local i8* @lshr(i8 zeroext %in, i8* returned %out) local_unnamed_addr #0 {
entry:
  %conv = zext i8 %in to i32
  %broadcast.splatinsert = insertelement <8 x i32> poison, i32 %conv, i32 0
  %broadcast.splat = shufflevector <8 x i32> %broadcast.splatinsert, <8 x i32> poison, <8 x i32> zeroinitializer
  %0 = lshr <8 x i32> %broadcast.splat, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %1 = trunc <8 x i32> %0 to <8 x i8>
  %2 = and <8 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
  %3 = bitcast i8* %out to <8 x i8>*
  store <8 x i8> %2, <8 x i8>* %3, align 1, !tbaa !4
  ret i8* %out
}
```
The zext seems redundant, as we right shift by constants.
godbolt: https://godbolt.org/z/Pfa5nW8a6
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydVcFu4zYQ_Rr5MpAhUZYlH3xI4hZYoEAWuwu0t4ASRxZbijRIKk7y9TukJMdumhaoQENDDufN4zxq3Bjxuv_RI3RGKXOW-giPJ9QPv4FH511S3CXZIcnuWu5Bud6uWzUtJNtsHnE6tj23CbuLmxJWxzlInbAHuPjM6BO2g6S6n4KAns5YoP1Se5BJcciS4j4YD_VksPs4du8B4QlA5b1MygNQTIiPEDT5hUYIoyxsC3mILK6yWfSj1TF-WU6qwz-e6MEMJ6lQwFn6_lIHcreKU5XmYkA6cNuS__BSb9PtBtI_Jn_aSd2qUWAqsOOj8mmPXKCF9NFB-h1SHKRPlXoeIDWQXtIeUaPlVHzwN6p8-XbN4Zoo4UuNIJx5UqblCmQdip1sslkLWcMbWoMvnopSTppMe6Zy0BlpfRYnQjyNWvMBxRMXIshTZO-iofb29cIFQmhr9HMU4i3koHQxDXgDsmBX-xpruGi582t3UtxL7dD6GDiZqHAgeAjyw0sMJjVPRjozkS7Ykm6ZZp_DR2DXj12n8BlbHy7aDfBnjAL2ZxRu10NZpZZeciXJvuKSxexBgP9MOsNOp5mPlS8GW4xiMTaLUS7GdjGqcP_fOeSRg7ejbj-SyII8y2p9G8hiINfiZkOEXMjWM8X_877JVcRcjfShIMvVjbfxA0F2uXOOxMQP5Ni1QHNETBHWSaGjnkgkLPcN5-G9WRDpS7hJ_u-9ITTMeNcd4uAoWIxacB2l5A7OCFYee3L3svPQvAJdWedpg1vPX7kRjVHUhO6g9_4U-yz7lcbsWBt7pNkb_b52vNS_13y7EvtC7IodX3npFe6pA34hVKBG1VADCM3w20IE_OsJgRiidtJoOPeo4YSWuu0g5-61Gq3a_y07tbqxWbdmoEnoTfMrPVnzJ31CNJXOjejIKDf5Zrfq9yXv6pyXVZXnVcVFUbW7oi7yqhNNVZc1WyneoHKBbsKYxjNECLKJ8UruWcZYVmQsLzfbzWZdNqzatrt8V4piW9cdtTEcuFTrwCOUZWX3kVIzHl3ocZL-pt6d3DnSGWN1Aj4ffW_s_nFAK_8yOVvF5PtI_ifLHPyR">