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