https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108185
--- Comment #5 from JuzheZhong <juzhe.zhong at rivai dot ai> --- Revise the testcase, it has a bug here: void foo5_3 (int32_t * restrict in, int32_t * restrict out, size_t n, int cond) { vint8m1_t v = *(vint8m1_t*)in; *(vint8m1_t*)out = v; vbool8_t v3 = *(vbool8_t*)in; *(vbool8_t*)(out + 200) = v3; vbool16_t v4 = *(vbool16_t *)in; *(vbool16_t *)(out + 300) = v4; } The second vlm.v for vbool16_t is missing which is incorrect codegen. Confirm for vbool8/16/32/64 all have the same issue. -fdump-tree-optimized can observe that: They are all tied and consider as same in GIMPLE IR.