<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55693>55693</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SLPVectorizer] Add reduction of integer not vectorized
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nikic
</td>
</tr>
</table>
<pre>
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define i16 @test(ptr %x) {
start:
%_51 = load i64, ptr %x, align 8
%_4.i.i.i.sroa.4.16.extract.trunc = trunc i64 %_51 to i16
%0 = and i16 %_4.i.i.i.sroa.4.16.extract.trunc, 255
%1 = trunc i64 %_51 to i16
%2 = lshr i16 %1, 8
%_6.0.i.i.i.i.i.i.i.i.i.1 = add nuw nsw i16 %0, %2
%_4.i.i.i.sroa.4.18.extract.shift = lshr i64 %_51, 16
%_4.i.i.i.sroa.4.18.extract.trunc = trunc i64 %_4.i.i.i.sroa.4.18.extract.shift to i16
%3 = and i16 %_4.i.i.i.sroa.4.18.extract.trunc, 255
%_6.0.i.i.i.i.i.i.i.i.i.2 = add nuw nsw i16 %_6.0.i.i.i.i.i.i.i.i.i.1, %3
%_4.i.i.i.sroa.4.19.extract.shift = lshr i64 %_51, 24
%_4.i.i.i.sroa.4.19.extract.trunc = trunc i64 %_4.i.i.i.sroa.4.19.extract.shift to i16
%4 = and i16 %_4.i.i.i.sroa.4.19.extract.trunc, 255
%_6.0.i.i.i.i.i.i.i.i.i.3 = add nuw nsw i16 %_6.0.i.i.i.i.i.i.i.i.i.2, %4
%_4.i.i.i.sroa.4.20.extract.shift = lshr i64 %_51, 32
%_4.i.i.i.sroa.4.20.extract.trunc = trunc i64 %_4.i.i.i.sroa.4.20.extract.shift to i16
%5 = and i16 %_4.i.i.i.sroa.4.20.extract.trunc, 255
%_6.0.i.i.i.i.i.i.i.i.i.4 = add nuw nsw i16 %_6.0.i.i.i.i.i.i.i.i.i.3, %5
%_4.i.i.i.sroa.4.21.extract.shift = lshr i64 %_51, 40
%_4.i.i.i.sroa.4.21.extract.trunc = trunc i64 %_4.i.i.i.sroa.4.21.extract.shift to i16
%6 = and i16 %_4.i.i.i.sroa.4.21.extract.trunc, 255
%_6.0.i.i.i.i.i.i.i.i.i.5 = add nuw nsw i16 %_6.0.i.i.i.i.i.i.i.i.i.4, %6
%_4.i.i.i.sroa.4.22.extract.shift = lshr i64 %_51, 48
%_4.i.i.i.sroa.4.22.extract.trunc = trunc i64 %_4.i.i.i.sroa.4.22.extract.shift to i16
%7 = and i16 %_4.i.i.i.sroa.4.22.extract.trunc, 255
%_6.0.i.i.i.i.i.i.i.i.i.6 = add nuw nsw i16 %_6.0.i.i.i.i.i.i.i.i.i.5, %7
%_4.i.i.i.sroa.4.23.extract.shift = lshr i64 %_51, 56
%_4.i.i.i.sroa.4.23.extract.trunc = trunc i64 %_4.i.i.i.sroa.4.23.extract.shift to i16
%_6.0.i.i.i.i.i.i.i.i.i.7 = add nuw nsw i16 %_6.0.i.i.i.i.i.i.i.i.i.6, %_4.i.i.i.sroa.4.23.extract.trunc
ret i16 %_6.0.i.i.i.i.i.i.i.i.i.7
}
```
This could converted into a `zext <8 x i8> to <8 x i16>` followed by `vector.reduce.add`, but currently isn't. (I expect this to be profitable based on `psadbw`, but I'm not particularly familiar with this.)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydlk-P2jwQxj9NuFhEiZ2_hxy2SytV6uGVWvVaObEBt8ZGtrOw_fTvOCTbLIgkLEHBxp7nmfnFgqk1e62CLOrf0SaInhw1O-4Qo45K-qpbhwKyQQHGfH0IyBNfH3EewYDg7uan8fupH2VJd1uLYbAtfFCMi7Uq_CAbYmDtO3wNBuhdAs6Io-SD-bnIfsHOVv1R-qTWUqj2vN6pFpYuUaiPZnwrFEcizlCQRI5bF-Di6AyIpOcAlyjIP_VbLTg5yOBNAKe_0rhzlJoy5HPHz-hf8DOiUuwUKsYRSSi6yxpNwySMs5CfnaGNC51pVdPJXUagN3g47TMcyUTdPqrYJfN5XZ8NTtORRLzQCl8qtHszeMVe7F1RWRj19uPr4kAZQ6o9IWVPg0DkBbz0FJjirQC7F1s3yuItWS_zLtcJkXt052xveJBZ9MUc-ju88D1e9_j2GMkUgXIZRpwsE1mK8dr2BmMyi7H8IEbyIEbcY5wigKNlGMnUkR6JLMR4Y3uDMZ3DeG26GGPyIEbSY0ynCMTLMCbRMpGlGK9tbzBmsxjjD2JMH8SY9BinftYwXohx6p9nJLIU47XtBSMameSzHPEHOWYPckx7jvkUArKM4_TDIA9zvLa9OY53asofZJD1DOZSHpwN9FHTij3NIN_0T_2qG_yxFxY1upUM7uqFG8fhKCgokCLY9BdsoYbnAp2RgL7usy99mPse7zNsQlstpT5BYP3qg15447QJDWdtw0Oo3rtBYTX0mk1rDFdOviJhVYBzF0LyxVfEz0eIQs6nAxY1R0ejt8LRGnrEmloQ18qLHy1l9Wmk-BVUDkhph47Q7ommldSA_JYehBTUoJNw-043hO7wUvSKVYSVpKQrJ5zkVZB--v7tv59d2uIvN0G6QU_w0LoKnABjvfVQ-I6bzull2MpWrZHV3rmj9Y0m_gLvHRi2ddjoA0ykfBk-1lDRbwiEqbC25RYGaZqVZLWvWMzisiAFg1cO3XKR51mR5IQXDNdlwleS1lxanyl0xIrDQfISvjtONytR4QjjKIVOL4pikoUsqeuMk3TLo7ossxg6ZX6gQoY-j1Cb3cpUXUp1u7OwKIV19t8itRbaYN6B8fq0dXttKiX-iGbVGVdd4v8DuZOBdA">