When left-shifting the incoming VL parameter, it may cause overflow
when the vl >= 0x80000000, resulting in the wrong VL length setting.
For example this code and the output:
#include <riscv_vector.h>
vint64m1_t
test (vint64m1_t a, int64_t b)
{
return vslide1up_vx_i64m1(a, b, 0x80000000);
}
/* assembly output:
test:
vsetivli zero, 0, e32, m1, ta, mu
vslide1up.vx v9, v8, a1
vslide1up.vx v8, v9, a0
ret
*/The bug was caused by this commit.
Unspected -> Unexpected