<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/104596>104596</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISCV][clang] Failed to vectorize a[i] + b[CONSTANT] when a and b both in global struct
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Fros1er
</td>
</tr>
</table>
<pre>
``` c
#define LEN 32000
struct GlobalData {
float a[LEN];
float b[LEN];
} global_data;
int s122(int n1) {
for (int i = n1; i < LEN; i++) {
global_data.a[i] += global_data.b[0];
}
}
```
`clang -Ofast -march=rv64gcv`:
``` asm
s122:
lui a2, 8
addiw a1, a2, -769
blt a1, a0, .LBB0_3
slli a1, a0, 2
.Lpcrel_hi0:
auipc a3, %pcrel_hi(global_data)
addi a4, a3, %pcrel_lo(.Lpcrel_hi0)
add a1, a1, a4
addiw a3, a0, 1
lui a0, 31
add a0, a0, a4
addiw a2, a2, -768
.LBB0_2:
flw fa5, 1024(a0)
flw fa4, 0(a1)
mv a4, a3
fadd.s fa5, fa4, fa5
fsw fa5, 0(a1)
addi a1, a1, 4
addiw a3, a3, 1
bne a4, a2, .LBB0_2
.LBB0_3:
li a0, 0
ret
```
RVV code will generate if we change:
- `global_data.a[i] += global_data.b[0];` to `global_data.a[i] += global_data.b[i];`
- take a and b out of struct, make them global
- `int i = n1` to `int i = 0`
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVd-PozYQ_mvMyyjIHkMgDzxclktVabUn3Z32dWXAgFsHVtgkav_6yoYQ2NxWaqNoDMw3M998_iWMUU0nZUbiI4nzQIy27YfsNPSGySEo-uqvjOzp9IeS0JzQLwR5JWvVSXj--gIcKaWzw1tjh7G08JvuC6FzYQWQ5Di5AABq3QsLgsTH568vJM4JvzknT_HoIUkOjU_3Vgkr7t-9VZ0FwxAJpu6xYwQPH0r2A8xeBYTnDsOP_vnJ9eBfCB79_0Os-61qh464InEODsw3vEJHnW5aIkm-tDA_3NRcXkstugZ232phLOzOYihbwvPhso-a8uKA_MuHUBDmPGvt-r75QY_K8xVI8AnSbROiqtTVjcw5J8gu2R-2qELbCT2hqLPh8_FI3_gWaLRWH4E4QcLn93KQ-q1Vd-4Li1G9l27kLoBgfIMSTNdTjIdH9n6MfLlttO4JpuuqS7SoqnU7k40-EYbfO2FbyCKsd3L2kGDlne1nRXCjfnpTzCmMD2rV-jqNIvasKEYEU0Ef5LkDvT7UodgD6nyZydxE3OYQVRWapdicyr3N29NsyHxSY5moleL_Ljj_heBFJ9dM8b4Mca0Yf1BsWpS3uZg3GQzS_nr3efv99RXKvpJwVVpDIzs5CCtB1XCVULaia-RSZwdkT__PebCnYPv_GqyW4Ft1K_6UIEB0FRTQjxb6GqYD1_V7dl7byvOcacV5c_gtZO5fnShBlfHqwA8ikBlLkKcsTRMWtFlSHzjDtIj2krEqriWnZSk5RjEXRVVioDKkGNGU7VnEI85CUSSC10nJEEuGSUQiKs9C6VDryznshyZQxowyYzSKD_tAi0Jq428hRH8gEkR3IQ2ZC9gVY2NIRLUy1txTWGW1v7q-__7j6dVpFR-n4DiHk1BaVq7PiyxtP6i_Jaz19hfN07eXHz-_vPx0366t7BZpi962oLpZx1niYBx01lr7btx6wBPBU6NsOxZh2Z8Jnhyxedi9D_0f0s3KyTdqCJ7mXi8Z_hMAAP__BITxbg">