forked from OSchip/llvm-project
d6e0679c4e
Before this patch, OpTree did not consider forwarding an operand tree consisting of only single LoadInst as useful. The motivation was that, like an access to a read-only variable, it would just replace one MemoryAccess by another. However, in contrast to read-only accesses, this would replace a scalar access by an array access, which is something worth doing. In addition, leaving scalar MemoryAccess is problematic in that VirtualUse prioritizes inter-Stmt use over intra-Stmt. It was possible that the same LLVM value has a MemoryAccess for accessing the remote Stmt's LoadInst as well as having the same LoadInst in its own instruction list (due to being forwarded from another operand tree). With this patch we ensure that if a LoadInst is forwarded is any operand tree, also the operand tree containing just the LoadInst is forwarded as well, which effectively removes the scalar MemoryAccess such that only the array access remains, not both. Thanks Michael for the detailed explanation. Reviewers: Meinersbur, bellu, singam-sanjay, gareevroman Subscribers: hfinkel, pollydev, llvm-commits Tags: #polly Differential Revision: https://reviews.llvm.org/D37424 llvm-svn: 312456 |
||
---|---|---|
.. | ||
forward_from_region.ll | ||
forward_hoisted.ll | ||
forward_instruction.ll | ||
forward_into_region.ll | ||
forward_into_region_redundant_use.ll | ||
forward_load.ll | ||
forward_load_differentarray.ll | ||
forward_load_double_write.ll | ||
forward_load_fromloop.ll | ||
forward_load_indirect.ll | ||
forward_load_tripleuse.ll | ||
forward_load_unrelatedunusual.ll | ||
forward_readonly.ll | ||
forward_synthesizable_definloop.ll | ||
forward_synthesizable_indvar.ll | ||
forward_synthesizable_useinloop.ll | ||
forward_transitive.ll | ||
noforward_from_region.ll | ||
noforward_load_conditional.ll | ||
noforward_load_writebetween.ll | ||
noforward_partial.ll | ||
noforward_phi.ll | ||
noforward_sideffects.ll | ||
noforward_synthesizable_unknownit.ll |