diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2020-05-06 20:42:46 +0200 |
---|---|---|
committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2020-05-06 21:15:58 +0200 |
commit | 947f78ac27f4ea52a443ba9d5983cfe3eaf51148 (patch) | |
tree | 5573f9b01ed659b5cfbf96676c042080f5489744 /flang/lib/Semantics/mod-file.cpp | |
parent | f21c704553a8af7012eaf1ab777e2aa1a55cc86d (diff) | |
download | llvm-947f78ac27f4ea52a443ba9d5983cfe3eaf51148.zip llvm-947f78ac27f4ea52a443ba9d5983cfe3eaf51148.tar.gz llvm-947f78ac27f4ea52a443ba9d5983cfe3eaf51148.tar.bz2 |
[SystemZ] Fix/optimize vec_load_len and related intrinsics
When using vec_load/store_len_r with an immediate length operand
of 16 or larger, LLVM will currently emit an VLRL/VSTRL instruction
with that immediate. This creates a valid encoding (which should be
supported by the assembler), but always traps at runtime. This patch
fixes this by not creating VLRL/VSTRL in those cases.
This would result in loading the length into a register and
calling VLRLR/VSTRLR instead. However, these operations with
a length of 15 or larger are in fact simply equivalent to a
full vector load or store. And in fact the same holds true for
vec_load/store_len as well.
Therefore, add a DAGCombine rule to replace those operations with
plain vector loads or stores if the length is known at compile
time and equal or larger to 15.
Diffstat (limited to 'flang/lib/Semantics/mod-file.cpp')
0 files changed, 0 insertions, 0 deletions