<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/59867>59867</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SLPVectorizer] Unprofitable vectorization of i8 icmp eqs
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
llvm:SLPVectorizer
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nikic
</td>
</tr>
</table>
<pre>
https://llvm.godbolt.org/z/hdnbn1EGq
```llvm
; RUN: opt -S -passes=slp-vectorizer < %s
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 i1 @test(ptr %s1, ptr %s2) {
%v1.1 = load i8, ptr %s1, align 1
%v2.1 = load i8, ptr %s2, align 1
%c1 = icmp eq i8 %v1.1, %v2.1
%s1.2 = getelementptr inbounds i8, ptr %s1, i64 1
%v1.2 = load i8, ptr %s1.2, align 1
%s2.2 = getelementptr inbounds i8, ptr %s2, i64 1
%v2.2 = load i8, ptr %s2.2, align 1
%c2 = icmp eq i8 %v1.2, %v2.2
%res = select i1 %c1, i1 %c2, i1 false
ret i1 %res
}
```
Results in:
```llvm
define i1 @test(ptr %s1, ptr %s2) {
%1 = load <2 x i8>, ptr %s1, align 1
%2 = load <2 x i8>, ptr %s2, align 1
%3 = icmp eq <2 x i8> %1, %2
%4 = extractelement <2 x i1> %3, i32 0
%5 = extractelement <2 x i1> %3, i32 1
%res = select i1 %4, i1 %5, i1 false
ret i1 %res
}
```
This doesn't look like a profitable vectorization to me. Resulting codegen looks as follows:
```
test: # @test
movzx eax, byte ptr [rdi]
movzx ecx, byte ptr [rdi + 1]
xor al, byte ptr [rsi]
xor cl, byte ptr [rsi + 1]
or cl, al
sete al
ret
test2: # @test2
movzx eax, word ptr [rdi]
movd xmm0, eax
movzx eax, word ptr [rsi]
movd xmm1, eax
pcmpeqb xmm1, xmm0
punpcklbw xmm0, xmm1 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
pshuflw xmm0, xmm0, 96 # xmm0 = xmm0[0,0,2,1,4,5,6,7]
pshufd xmm0, xmm0, 80 # xmm0 = xmm0[0,0,1,1]
movmskpd eax, xmm0
cmp al, 3
sete al
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVs2O4ygXfRqyQY7MxX9ZZJGfzrf5NBp1T49mN8I2cZhgcBtcle6nH0HsqlBxprrUVmKDzz0cOFwwzBjRKM7XKN2idL9ggz3pfq3EWVSLUtff1ydrO4PoBsEBwUHKp3bZ6LrU0i513yA4_EBwONWqVOTT_76heI_iDcri68-Fj6_oFn_--huiG6w7i6MvOOqYMdwgujeyi554ZXUvfvAeI7rDCFJzJVrWN9zimlkm2Xc9WIzoHiMAHrWIbnjUQR4juqHgb65KwqorZYm_RWIqHAtHIlBEqnCFbOJkSfSFQIEAAn3bi07ySftSZH9nSTSos9LPKpJCDZeoUcML63qv-VEojgXBKIktNxZB0dnej44g2OGpAghWGOXbKw27d09kSbyc1KzGorgN91wmRaMwuaXAYwrMU6orQVRth_k3LIpJ2oWPTd6EG7IET2i45ZK3XFknIFSpB1WbuW6KLAk7OTUxN67lTDd97z8iC7Oy8FgW5mS9OzDvDry6AzfhPTc-3nDJK-un3Tnsu3Mtw1g-Mmn4xOz5FNvzMelRvn-zkq7Vz9wM0hoslFuRj9bar6TdTQIhugN8cV7RTz-RffA-84HNNHD5lux7NJp963TiGfxie1ZNGfFCJCORerMp4PiGmX6ISd6b3eR1ctNfnNs_TsLgWnOjEOQWS63PWIozxwx3vT4Ky0rJ8bRPMiu0wlbjli_xNS2EanCla95w5dkGM4OPWkr9bO7TZdzdXHZQt8joS7KMXb9erX76ccEYc3Zx4yu_W36dznTb1wKl-wfh1Vw4RrDF5I500b1_MnnHMfcSU3Q1F_1AYaSMHCZD1HDLR_3gfc_tq0vwxib4T5-edV-_41PtB9O2sYt3tJ9ub8aUm_ZI2F5XtR3_Vr4gXjHgdoPqqrMsnyeDxz45Bg4uN3yH-nXgw9Jt7PoCO9_8bc1hJMBIgEGAQYDRAKMBlgRYEmBpgKUBlgVYFmB5gOWv7nbmNBzl860l_rnK8N01bw7s3N9tfM59t124fSJDsMvvJtGr1fhOrYg_pkb8fyZFWnPu6qk-ZtZ9Prh9-LoU6QfXyZvNZVGvab2iK7bga5LlNE4IzZLFaZ3ndZZnacGAFqyqa1iRMonT_EgIkCyFhVhDDDQmcQYkgSRZ8hWBOCtTvkpWwFYlSmLeMiGX_kCq-2YhjBn4Ol0VWb6QrOTS-DMtQMmqM1c1opu_iswd0GCHAPzXkm6-_P_3P19Ong5M94t-7cCoHBqDklgKY82rjBVW-tNyyEz3-Kt6uE3rozs7jB84sxh6-eZY3Qh7GsplpdvxjD0-oq7X__DKIjj48RkEBz_EfwMAAP__wmkicA">