<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">