aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Semantics/mod-file.cpp
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2020-05-06 20:42:46 +0200
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2020-05-06 21:15:58 +0200
commit947f78ac27f4ea52a443ba9d5983cfe3eaf51148 (patch)
tree5573f9b01ed659b5cfbf96676c042080f5489744 /flang/lib/Semantics/mod-file.cpp
parentf21c704553a8af7012eaf1ab777e2aa1a55cc86d (diff)
downloadllvm-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