diff options
author | Craig Topper <craig.topper@sifive.com> | 2021-08-12 09:39:55 -0700 |
---|---|---|
committer | Craig Topper <craig.topper@sifive.com> | 2021-08-12 10:05:27 -0700 |
commit | 79fbddbea0c6940587acf5353af4557ee9524bbe (patch) | |
tree | 96d466509d6398e02768150fa027e038d8901576 /libcxx | |
parent | f66ba5fcef19ff03532d993ac4af1362a89b833f (diff) | |
download | llvm-79fbddbea0c6940587acf5353af4557ee9524bbe.tar.gz |
[RISCV] Teach vsetvli insertion pass that it doesn't need to insert vsetvli for unit-stride or strided loads/stores in some cases.
For unit-stride and strided load/stores we set the SEW operand of
the pseudo instruction equal the EEW in the opcode. The LMUL
of the pseudo instruction is the LMUL we want.
These instructions calculate EMUL=(EEW/SEW) * LMUL. We can use
this to avoid changing vtype if the SEW/LMUL of the previous
vtype matches the EEW/EMUL ratio we need for the instruction.
Due to how the global analysis works, we can only do this
optimization when the previous vsetvli was produced in the block
containing the store. We need to know in the first phase if the
vsetvli will be inserted so we can propagate information to
the successors in the second phase correctly. This means we can't
depend on predecessors.
Reviewed By: rogfer01
Differential Revision: https://reviews.llvm.org/D106601
Diffstat (limited to 'libcxx')
0 files changed, 0 insertions, 0 deletions