<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/117677>117677</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISC-V] Clang Miscompiles Segment RVV Intrinsics
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rvismith-project
</td>
</tr>
</table>
<pre>
Reduced test case:
```
#include <riscv_vector.h>
#define dataLen 12*8
int8_t a[dataLen]; int8_t b[dataLen];
int8_t c[dataLen]; int8_t d[dataLen];
int main(){
for (int i = 0; i < dataLen; ++i) { a[i] = -i; }
for (int i = 0; i < dataLen; ++i) { b[i] = i; }
for (int i = 0; i < dataLen; ++i) { c[i] = 0; d[i] = 0; }
int avl = dataLen;
int8_t* ptr_a = a; int8_t* ptr_b = b;
int8_t* ptr_c = c; int8_t* ptr_d = d;
for (size_t vl; avl > 0; avl -= vl * 8){
vl = __riscv_vsetvl_e8mf2(avl);
vint8mf2_t va = __riscv_vle8_v_i8mf2(ptr_a, vl);
__riscv_vse8_v_i8mf2(ptr_c, va, vl);
vint8mf2x8_t vb = __riscv_vlseg8e8_v_i8mf2x8(ptr_b, vl);
vint8mf2_t vd = __riscv_vget_v_i8mf2x8_i8mf2(vb, 0);
__riscv_vse8_v_i8mf2(ptr_d, vd, vl);
ptr_a += vl; ptr_c += vl; ptr_d += vl;
ptr_b += vl * 8;
}
for(int i=0; i<dataLen; ++i) { __builtin_printf("%d ", d[i]); } __builtin_printf("\n");
return 0;
}
```
Result:
```
$ clang -march=rv64gcv_zvfh -mabi=lp64d -Wno-psabi -static -O0 1.c -o a.out && qemu-riscv64 a.out
0 8 16 24 32 40 48 56 64 72 80 88 0 -8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$ clang -march=rv64gcv_zvfh -mabi=lp64d -Wno-psabi -static -O3 1.c -o a.out && qemu-riscv64 a.out
0 8 16 24 32 40 48 56 64 72 80 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
```
Clang version under test: ["17.0.6", "18-init", "18.1.8", "19-init", "19.1.4", "20-init"]
QEMU version: 9.1.0
```
$ clang --version
clang version 19.1.4 (https://github.com/llvm/llvm-project.git aadaa00de76ed0c4987b97450dd638f63a385bed)
Target: riscv64-unknown-unknown-elf
Thread model: posix
InstalledDir: /home/compiler/llvm/19.1.4/bin
$ qemu-riscv64 --version
qemu-riscv64 version 9.1.0
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVk2P2zYT_jX0ZSCBor7ogw-yHQMB3uBtN216FCiSstlSkktSapJfX5CS1vZmF2jRHFp4sYZm5pmPZx7SYtaqcy_lDuV7lB83bHSXwezMpGyn3CW6muFXyd2mGcSX3ZMUI5cCnLQOOLMSpRXCFSrw8ocrRFLVcz0KCSg9GGX5VE-Su8HEF5S-myOEbFUvQTDH_id7SAgiFUW4Ur2jtQOG8v3iQ_kRpXtYHM1Lxw3D38KIVzAzDDqmekQoIltUejNAOxhAhHqnApQeAYdMfpS1W29AZI_IXiGyBVTuQ78K5ceAiFSIKI__IGFzn_A75OP3-QJCfGNZK_jUbNLBccu4umjtEKng6kzNQgi7Ub06muBoXkfx4OTfosRccUUtg1r1VdYOJu0Bc1vv5n79Q-Qh3kgquF8jwDJAXS8KtNJNupa0awkilE3aR6fP0b6VriW-EnsEaknrqVYLMMyNyAFeJLir8zKch_BvQGvJz16jU_OiqJVnesv0mS65mldK3_cuHtOcpbuleG5qClnwX-1fhJrilcqLCMh-3oJfyrLhlybxYLqDNzfHssTFvaixHcyqdpQeZ62j9PC20uu6GZV2qq-vRvWuDcebIJL7FogfYlX-PIov9BYoP_QB8zyykW40fZCfv0RCiw93H66epB21e-1azIBr1p8h6pjhF5QezVRkZz7VX6f24q2NH1Ffi0xA9Es_RFfLGgWRdcwpDtH_MSQxh2gAFg-jA0QKRAr4XXZjFJZXZLMH4QoDhaQAkkFKIMOQUcgLKDIoCVAMlAKGyP_7939mWr8Dfen3pe-_8VnYe9ToIRA5SWPV0MPYC2nCLzpKK_BvAYQkZYzjYjkw_plGqlfu3hAnMb173r4M2MZJnN2eCX4OyP2x-fHdh5_XFnxdH47fPjPRGoor_tD9XMf_Ulycu1p_8MgJkdNZucvYxHzoEDlpPa1f6_tMfFYOGBOMYSxkWUiBebalZbMtsxwLUaS0LVKW0ryRwl8BuPqJmbMMJC16icb-t374o3_-lrr1cRcjmYBuEFL76Otg1WeEq_e9dUxrKY7KBKrJ6TJ0EpETH7qr0tLcWl3pOzWqX5h4UOo9IQ-OlZeVz8Nw_WLU-eIFT7m_JQnGaUQwyeDEGqO4hL3UmhkBrBfgLhLCbn6YeQIhJ6mHqzT2fjsbsUvFNt2yjdwlZUoKnGVZtrns0pJiTBLK2222bRu6zfN8K7OGNrxtaSM2audrJwkpcIlxlsVFSSTFvEwSzkvOGcqw7JjSsaciHsx5o6wd5S5JyqIsN5o1UtvdrNOghVlTG7ML-23Gs0UZ1so6e0vhlNPhFffp_cdD9Mm_-Myn4IOyC_sWPspzJ3sHT58-wfveGdVbxe1mNHr398SFyCn0bP0m57anHfkzAAD__0JZIWs">