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

    <tr>
        <th>Summary</th>
        <td>
            [SLPVectorizer] Miscompilation
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            miscompilation,
            llvm:SLPVectorizer
      </td>
    </tr>

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

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

<pre>
    Reproducer: https://alive2.llvm.org/ce/z/KF8JBo
This issue was originally reported on LoongArch.

```
; bin/opt -passes=slp-vectorizer test.ll -S
target triple = "x86_64-unknown-linux-gnu"

define i1 @src() {
entry:
 %h.promoted118.i.fr = freeze i32 1
  %invariant.op.i51 = add i32 %h.promoted118.i.fr, 0
  %conv25.i = xor i32 0, 0
  %add.i.i = add i32 %conv25.i, %h.promoted118.i.fr
  %sext.i.mask = and i32 %add.i.i, 0
 %cmp27.i = icmp eq i32 %sext.i.mask, 1
  %0 = or i1 %cmp27.i, false
 %conv25.i.1 = add i32 0, 0
  %add.i.i.1 = add i32 %conv25.i.1, %h.promoted118.i.fr
  %sext.i.1.mask = and i32 %add.i.i.1, 1
  %cmp27.i.1 = icmp eq i32 %sext.i.1.mask, 0
  %conv25.1.i.1 = xor i32 0, 0
  %add.i.1.i.1 = add i32 %conv25.1.i.1, %h.promoted118.i.fr
  %sext.1.i.1.mask = and i32 %add.i.1.i.1, 1
  %cmp27.1.i.1 = icmp eq i32 %sext.1.i.1.mask, 0
 %add.i.2.reass.i.1 = add i32 %invariant.op.i51, %conv25.i.1
 %sext.2.i.1.mask = and i32 %add.i.2.reass.i.1, 1
  %cmp27.2.i.1 = icmp eq i32 %sext.2.i.1.mask, 0
  %1 = or i1 %cmp27.1.i.1, %cmp27.2.i.1
  %2 = or i1 %cmp27.i.1, %1
  %3 = or i1 %0, %2
  ret i1 %3
}
```
```

----------------------------------------
define i1 @src() {
entry:
  %h.promoted118.i.fr = freeze i32 1
  %invariant.op.i51 = add i32 %h.promoted118.i.fr, 0
  %conv25.i = xor i32 0, 0
  %add.i.i = add i32 %conv25.i, %h.promoted118.i.fr
  %sext.i.mask = and i32 %add.i.i, 0
 %cmp27.i = icmp eq i32 %sext.i.mask, 1
  %#0 = or i1 %cmp27.i, 0
 %conv25.i.1 = add i32 0, 0
  %add.i.i.1 = add i32 %conv25.i.1, %h.promoted118.i.fr
  %sext.i.1.mask = and i32 %add.i.i.1, 1
  %cmp27.i.1 = icmp eq i32 %sext.i.1.mask, 0
  %conv25.1.i.1 = xor i32 0, 0
  %add.i.1.i.1 = add i32 %conv25.1.i.1, %h.promoted118.i.fr
  %sext.1.i.1.mask = and i32 %add.i.1.i.1, 1
  %cmp27.1.i.1 = icmp eq i32 %sext.1.i.1.mask, 0
 %add.i.2.reass.i.1 = add i32 %invariant.op.i51, %conv25.i.1
 %sext.2.i.1.mask = and i32 %add.i.2.reass.i.1, 1
  %cmp27.2.i.1 = icmp eq i32 %sext.2.i.1.mask, 0
  %#1 = or i1 %cmp27.1.i.1, %cmp27.2.i.1
  %#2 = or i1 %cmp27.i.1, %#1
  %#3 = or i1 %#0, %#2
  ret i1 %#3
}
=>
define i1 @src() {
entry:
  %h.promoted118.i.fr = freeze i32 1
  %#0 = insertelement <4 x i32> { 0, 0, poison, 0 }, i32 %h.promoted118.i.fr, i32 2
  %#1 = xor <4 x i32> { 0, 0, 0, 0 }, %#0
  %#2 = add <4 x i32> { 0, 0, 0, 0 }, %#0
  %#3 = shufflevector <4 x i32> %#1, <4 x i32> %#2, 0, 1, 6, 7
  %#6 = shufflevector <4 x i32> %#0, <4 x i32> %#3, 0, 7
  %#7 = shufflevector <2 x i32> %#6, <2 x i32> poison, 0, 0, 1, 0
  %#8 = add <4 x i32> %#3, %#7
  %#9 = and <4 x i32> %#8, { 0, 1, 1, 1 }
  %#10 = icmp eq <4 x i32> %#9, { 1, 0, 0, 0 }
  %#11 = reduce_or <4 x i1> %#10
  %op.rdx = or i1 %#11, 0
  ret i1 %op.rdx
}
Transformation doesn't verify!

ERROR: Value mismatch

Example:

Source:
i32 %h.promoted118.i.fr = #x00000001 (1)
i32 %invariant.op.i51 = #x00000001 (1)
i32 %conv25.i = #x00000000 (0)
i32 %add.i.i = #x00000001 (1)
i32 %sext.i.mask = #x00000000 (0)
i1 %cmp27.i = #x0 (0)
i1 %#0 = #x0 (0)
i32 %conv25.i.1 = #x00000000 (0)
i32 %add.i.i.1 = #x00000001 (1)
i32 %sext.i.1.mask = #x00000001 (1)
i1 %cmp27.i.1 = #x0 (0)
i32 %conv25.1.i.1 = #x00000000 (0)
i32 %add.i.1.i.1 = #x00000001 (1)
i32 %sext.1.i.1.mask = #x00000001 (1)
i1 %cmp27.1.i.1 = #x0 (0)
i32 %add.i.2.reass.i.1 = #x00000001 (1)
i32 %sext.2.i.1.mask = #x00000001 (1)
i1 %cmp27.2.i.1 = #x0 (0)
i1 %#1 = #x0 (0)
i1 %#2 = #x0 (0)
i1 %#3 = #x0 (0)

Target:
i32 %h.promoted118.i.fr = #x00000001 (1)
<4 x i32> %#0 = < #x00000000 (0), #x00000000 (0), #x00000001 (1), #x00000000 (0) >
<4 x i32> %#1 = < #x00000000 (0), #x00000000 (0), #x00000001 (1), #x00000000 (0) >
<4 x i32> %#2 = < #x00000000 (0), #x00000000 (0), #x00000001 (1), #x00000000 (0) >
<4 x i32> %#3 = < #x00000000 (0), #x00000000 (0), #x00000001 (1), #x00000000 (0) >
<2 x i32> %#6 = < #x00000000 (0), #x00000000 (0) >
<4 x i32> %#7 = < #x00000000 (0), #x00000000 (0), #x00000000 (0), #x00000000 (0) >
<4 x i32> %#8 = < #x00000000 (0), #x00000000 (0), #x00000001 (1), #x00000000 (0) >
<4 x i32> %#9 = < #x00000000 (0), #x00000000 (0), #x00000001 (1), #x00000000 (0) >
<4 x i1> %#10 = < #x0 (0), #x1 (1), #x0 (0), #x1 (1) >
i1 %#11 = #x1 (1)
i1 %op.rdx = #x1 (1)
Source value: #x0 (0)
Target value: #x1 (1)

Summary:
 0 correct transformations
  1 incorrect transformations
  0 failed-to-prove transformations
  0 Alive2 errors
```
llvm version: d80bdf7261e7d785b98f827eeed950b2147f70e6

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWUFz4joS_jXiosIltTA2Bw5OGA67s7VbydRcp4QtQDu25ScJhuTXv5JtjG2MQ2bee7kMRZFAf_3112qpaRtujNzlQiyR_4D81YQf7F7pZWLj0-vLj8lGJS_LJ1FolRxioRGL8N7awiAWIVgjWPNUHgV4aXrMPKV3CNaxQLB-RbD-9zr814NCJPqylwZLYw4C_-AGKy13Mudp-oK1KJS2IsEqx5-VyneRjvceIpF7zkn9JBFiD3gjcwRrVVg8LbgxwiC2MmkxPYrYKi1fhcZWGOulKZ4-IxJZrnfCYqtlkQqM2AojgFM4_zafTQ_591z9yKepzA-n6S4_IIAqaiK2MhdYUoxmxOgYQYhggVHwgEgkcqtfXOokwgj8vVdolSkrEkpDT3pbXYbZaiFeBZYMMHVIB5X5kWvJc-upwpM-LYE8SUrUIBWCR0zO7rHKj-B7snQ7KV26kQ6EJ4kna0SL-OzpsMNxan8jTtaTXsbN94ojbzhq6iaco80KCOpoMs4KLP44o1tEzqNZAlKCnXbaYnCQLU-NOBPXer3uEg3m6l0t48X73nzpWMYVTZNBLbkOO5w2bRLvF482nmMFpCNp0fsTo2-kRm8kR0fTo9cJNozgacGNGZLf3_x1Cq1iVURlDHhDeSvOgH4Y1Q_DBaJDO7O92C3usw8M7ubGo8GxLo7UdijtWtj6c-a6T7Dqt732_ySa3vl4Txv73cfe28cQsNutjPxuY7_b2Ae1MQTsZzoZAvZGM3PELXSvpbnzcAH2G5vDX3obWyH26W9sT83ZlLkR2opUZCK3GLHHGT45KGKfXJTznoVHXChpVF6-xU4lPI73MmeEqyV3Z2EsCukEOK9avwJus_0KS1UZsz9st6mo5uI-X11N5z5ggCZKCZm7l6AVYH5nAHIrAGsCtGmDYVroe89r2pahVb6u9va6hLdW96KpFtJyWjQHd8gpLJ3O1aGXF1xt9WZ7kM4xHqJanKnoUKFbVNVW08Jdin1rrTxtVbZJWxWeTk5XR5W2FudySitwc06_aJ6brdIZt1LlOFHC5AgCi49Cy-0LAloNJJ-env775K4Jv_L0IHAmTcZtvK-NJ54VqagOMiLRszrouH5784TV12nsRKqHUxdSBIuL0-AIMu7SGTtaUOKgpANtjx_jpP1B4xYv7c8ZJfAK0bSuK3N_Jrg_i2vs7TzoYCYdPL2eHsbF0nfJHUTfEkzfLZm-JXp4ALhDC7xbC9zWQjvfKzfNMG5mg2Z3tMu7Ir9wCgfbfeXAHofrDHd9fglyA4-r2WHwC-2jBcBHC2D_sIDr7-afEjCSUfBXZPQrAsKPruniIwR0homugH6Ea-qbiDpIawxpesx1j2yNLn1ANUTgo5s33ODR73BVe-vaO92LRM-HLOPNBQbBsdJaxBbbztBjygmJYpmP2QnecpmKZGrVtNDqKG6govIuORZaK216N3bS9Ji5wcpIlTvJSUg2yTaAORVBEoT-ZhFuQwiEEMnCJxugs2AbEDFHJJokS5Ys2IJPxJIGbD6b-YywyX45D8WMU8oI9zdANiEHHvshicWcxyEPg4lcAgGfULKgge8T5lEB89kmjjcb8BfEZ2hGRMZl2tzZn5Q38JcUgMFskvKNSE35owFAJk2sskKmZc4I3FUEAnCeiEXPn__3tblF74z-aqKXzjjdHHYGzUgqjTWXQFbatPw9ouvpr_B_OoEmB50uu79G7KTdHzZerDIE6zJ-9ccV5_8itgjWZRoGwbrO5LiEPwMAAP__7mREZw">