[PATCH] D50665: [LV][LAA] Vectorize loop invariant values stored into loop invariant address
Anna Thomas via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 23 08:36:15 PDT 2018
anna marked 3 inline comments as done.
anna added inline comments.
================
Comment at: lib/Analysis/LoopAccessAnalysis.cpp:1871
+ return false;
+ return TheLoop->hasLoopInvariantOperands(cast<Instruction>(StoreVal));
+ };
----------------
Ayal wrote:
> anna wrote:
> > Ayal wrote:
> > > Again, something LICM may have missed?
> > yes, LICM misses this as well - see added test case in `inv_val_store_to_inv_address_conditional_inv`.
> Ahh, but a phi of invariant values is invariant iff the compares that decide which predecessor will reach the phi, are also invariant. In `inv_val_store_to_inv_address_conditional_inv` this holds because there `%cmp` determines which predecessor it'll be, and `%cmp` is invariant. In general Divergence Analysis is designed to provide this answer, as in D50433's `isUniform()`.
yes, that's right. Note that this patch handles phis of invariant values based on either an invariant condition or a variant condition (see `inv_val_store_to_inv_address_conditional_diff_values_ic` where the phi result is based on a varying condition).
The improved codegen and cost model handling is for predicated stores, where the block containing the invariant store is to be predicated. Today, we just handle this as a "predicated store" cost and generate the code gen accordingly.
Repository:
rL LLVM
https://reviews.llvm.org/D50665
More information about the llvm-commits
mailing list