<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/89988>89988</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SLPVectorizer][RISC-V] rv64gcv miscompile with `slp-vectorizer` pass
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
patrick-rivos
</td>
</tr>
</table>
<pre>
Testcase:
```c
int d = 16;
unsigned a = 3;
short e[18], f[18];
unsigned short *g = e;
int main() {
for (long h = 0; h < 8; ++h) {
e[h] = -1;
f[h] = -2;
}
for (short h = 1; h; h += 5)
for (int i = 0; i < d; i += 4)
a = ({
int j = 40 ? g[i] <= (unsigned)(1 ? f[i] : 0) : 0;
a < j ? 0 : j;
});
__builtin_printf("%u\n", a);
}
```
Commands:
```bash
> /scratch/tc-testing/tc-apr-23/build-rv64gcv/build-llvm-linux/bin/clang -fno-strict-aliasing -march=rv64gcv -flto -O3 red.c -o red.out
> /scratch/tc-testing/tc-apr-23/build-rv64gcv/bin/qemu-riscv64 red.out
0
> /scratch/tc-testing/tc-apr-23/build-rv64gcv/build-llvm-linux/bin/clang -fno-strict-aliasing red.c -o red.out
> /scratch/tc-testing/tc-apr-23/build-rv64gcv/bin/qemu-riscv64 red.out
1
```
Reduced LLVM IR:
```llvm ir
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"
@.str = constant [4 x i8] c"%u\0A\00"
define i32 @main(ptr %a, ptr %f, i16 %0) #0 {
for.cond6.preheader.us.preheader:
%1 = load i16, ptr %f, align 2
%conv.us = zext i16 %1 to i32
%conv13.us = sext i16 %0 to i32
%cmp14.us.not = icmp ule i32 %conv.us, %conv13.us
%conv.us.1 = zext i16 0 to i32
%conv13.us.1 = sext i16 0 to i32
%cmp14.us.1 = icmp ule i32 %conv.us.1, %conv13.us.1
%.not5.not7.not10.not13 = and i1 %cmp14.us.not, %cmp14.us.1
%conv.us.2 = zext i16 0 to i32
%conv13.us.2 = sext i16 0 to i32
%cmp14.us.2 = icmp ule i32 %conv.us.2, %conv13.us.2
%conv.us.3 = zext i16 0 to i32
%conv13.us.3 = sext i16 0 to i32
%cmp14.us.3 = icmp ule i32 %conv.us.3, %conv13.us.3
%2 = and i1 %.not5.not7.not10.not13, %cmp14.us.3
%narrow = and i1 %2, %cmp14.us.2
%cond.us.3 = zext i1 %narrow to i32
%call = tail call i32 (ptr, ...) @printf(ptr @.str, i32 %cond.us.3)
ret i32 0
}
declare i32 @printf(ptr, ...)
attributes #0 = { "target-features"="+64bit,+a,+v" }
```
Commands:
```
/scratch/tc-testing/tc-apr-23/build-rv64gcv/build-llvm-linux/bin/clang $1 -o baseline.out
/scratch/tc-testing/tc-apr-23/build-rv64gcv/build-llvm-linux/bin/opt -passes=slp-vectorizer $1 > opt.bc
/scratch/tc-testing/tc-apr-23/build-rv64gcv/build-llvm-linux/bin/clang opt.bc -o opt.out
/scratch/tc-testing/tc-apr-23/build-rv64gcv/bin/qemu-riscv64 opt.out
0
/scratch/tc-testing/tc-apr-23/build-rv64gcv/bin/qemu-riscv64 baseline.out
1
```
Found via fuzzer
@alexey-bataev
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEV82O2zYQfhr6Qkjgj2RLBx_sdQ0ESNEiKXINKImSuKFIlaS8m336gpQsy3ZgpE3TLhY0f2a--WY4HFLMWtEozrcg3YP0sGKDa7XZ9swZUX6JjDhpuyp09XX7B7euZJYDugPoANAOrNH4X45joRysIKAHiNeA7sfJQQX8CrKwQucF22rjIAfpHmcgPQDyBOt5cKc9SgOyawIMnyW80Y4JBUgGSA7BZpqHtTYQkExq1cA2KCFA96H7BDPfBWQPyL69VoMwcGpBeghKEZ5N-bX6ao0s1sDmcG15pDyaxsH0ZJ_s_VQKSL7AHXW8N-JCVgSy1dQd9ZKL3hhS7_mSvv_zOM9hNUEQ0CNsQLoXI--nSekcW49HMhzE6ovYDqIQmdCZ3WSB0XMQRmHx-So-YxxIvpj8_LkYhHRCfe6NUK4OO0UASQeQPqnQfYJsqTOHcs6waRjaJ911TFX2Pg8LZttpiv4CATna0jBXtoAcXRk5bp1QzThgvYkIBeTouVWROa2TpjzNYylPXSSFGl79lM-uYymZamBUKx1ZfzZcxKRgVvjJjpmyBfQwwcColk7D6DcKDa_iEkY6dPTgfphe4PIn74bICFue1sk1Mvo__P-vncQPsuMDr4aSV_D9-0-_wncf7pPEuwaFGWcdMw13sGKOSfZVD246UYRHHaA7HvWA7tZJaCIxdzDJAN1hkkWKknHuIx7TegnrjOglP0NOrkSD-qL0ixrDGzVqmNWmNkGxdSaolVpZx5SDIN0n8BUKXx1heTk_aOcbdANR8VooDgUlECRoKo-9xyQp88dt6te-L_Da98fTTii6FMNam7jUqlrHveEtZxU38WAvgzm40APgwFhqVnnIWytMikZBspAvtTrFgw1ab_zVnYlg6LSnfiOK6VnYLoTRtbCX7XqceJpKj7spyq6Hg5zCMdv1pJbQ98xifM0NPSA2ydpHsmdi-BGtGN8Si_ECxHsVmo1vMAotDYBM-cDfhuCMNhv_hp_koZ9XXMj3u0keuknu3PxGbsT0b-wA_X5q9CE1ekeNLkDITbC_vSO3YV8iKGaMfrmBIbcaN05Wd-FYQN17yqQMso4JCcNodNJXAW8pjuNw3hM0X8rhtI61J5SFOSjVFJT5uWK4C8vo9rqeik8pmZmrzxL_YnmpwJwzohgct1P98fVy499nZCykUc2ZGwy3vszRQ6h--3VSCJ_dgOzZ-HMChMB_-naYhj_jzgQkwf52LJjlUii-uCJ_hlHdOxj1zFpuAT1Y2UcnXjptxBs3Ixd_M-vexUX5E70eDXi_fe_fcfn-XXCF_WObeA9-v2GPXh5HPagKngSD9fD2xs3Nnc4kf-Vfo4I5xk-rakurnOZsxbd4g2mekyzBq3bL1xuKSsYoSXmapyzlWc1pUqR0wzY5zldiSxBJUEISgtGG4HhD87LIqjovWEVZhkCCeMeEjP3OxNo0K2HtwLdZnmfZSrKCSxs-9ghR_AWGRX-i0sPKbMNuFkNjQYKksM5eUJxwMnwlfnz_-6c5ofzHWrr_8O7jU_TJP03OL-BO2FJ3vZAcvgjXQrBG15kI1gj6JF0NRm5b5_pwJskRkGMjXDsUcak7QI7e_vQT9UY_89IBcgysLSDH4NVfAQAA__-zkiw6">