llvm-project/llvm/test/Transforms/LoopVectorize
Matthew Simpson 7808833e28 [LV] Build all scalar steps for non-uniform induction variables
When building the steps for scalar induction variables, we previously attempted
to determine if all the scalar users of the induction variable were uniform. If
they were, we would only emit the step corresponding to vector lane zero. This
optimization was too aggressive. We generally don't know the entire set of
induction variable users that will be scalar. We have
isScalarAfterVectorization, but this is only a conservative estimate of the
instructions that will be scalarized. Thus, an induction variable may have
scalar users that aren't already known to be scalar. To avoid emitting unused
steps, we can only check that the induction variable is uniform. This should
fix PR30542.

Reference: https://llvm.org/bugs/show_bug.cgi?id=30542
llvm-svn: 282863
2016-09-30 15:13:52 +00:00
..
AArch64 [LV] Move insertelement sequence after scalar definitions 2016-08-29 20:14:04 +00:00
ARM [ARM] AArch32 v8 NEON is still not IEEE-754 compliant 2016-04-18 12:06:47 +00:00
PowerPC [LV] Scalarize instructions marked scalar after vectorization 2016-09-26 17:08:37 +00:00
X86 [LV] Move insertelement sequence after scalar definitions 2016-08-29 20:14:04 +00:00
XCore [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
12-12-11-if-conv.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2012-10-20-infloop.ll
2012-10-22-isconsec.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
2016-07-27-loop-vec.ll Fix the assertion error in collectLoopUniforms caused by empty Worklist before expanding. 2016-07-27 23:53:58 +00:00
align.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
bsd_regex.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
bzip_reverse_loops.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
calloc.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
cast-induction.ll [LV] For some IVs, use vector phis instead of widening in the loop body 2016-06-01 17:16:46 +00:00
conditional-assignment.ll [PM] Port LoopVectorize to the new PM. 2016-07-09 22:56:50 +00:00
consec_no_gep.ll [Loop Vectorizer] Consecutive memory access - fixed and simplified 2016-09-18 13:56:08 +00:00
consecutive-ptr-uniforms.ll [LV] Process pointer IVs with PHINodes in collectLoopUniforms 2016-09-14 14:47:40 +00:00
control-flow.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
cpp-new-array.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
dbg.value.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
debugloc.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
diag-missing-instr-debug-loc.ll [LV] When reporting about a specific instruction without debug location use loop's 2016-09-21 03:14:20 +00:00
diag-with-hotness-info-2.ll [OptDiag,LV] Add hotness attribute to analysis remarks 2016-07-20 21:44:26 +00:00
diag-with-hotness-info.ll [LV] Add hotness attribute to missed-optimization remarks 2016-07-20 04:03:43 +00:00
duplicated-metadata.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
ee-crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
exact.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
flags.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
float-induction.ll [Loop Vectorizer] Handling loops FP induction variables. 2016-07-24 07:24:54 +00:00
float-reduction.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
funcall.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
gcc-examples.ll [LV] For some IVs, use vector phis instead of widening in the loop body 2016-06-01 17:16:46 +00:00
gep_with_bitcast.ll [LV] Don't widen trivial induction variables 2016-07-06 14:26:59 +00:00
global_alias.ll [LV] Scalarize instructions marked scalar after vectorization 2016-09-26 17:08:37 +00:00
hints-trans.ll [LoopVectorize] Keep hints from original loop on the vector loop 2016-04-29 01:27:40 +00:00
hoist-loads.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
i8-induction.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
if-conv-crash.ll
if-conversion-edgemasks.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
if-conversion-nest.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
if-conversion-reduction.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
if-conversion.ll [InstCombine] canonicalize* LE/GE vector integer comparisons to LT/GT (PR26701, PR26819) 2016-05-13 15:10:46 +00:00
if-pred-non-void.ll [LoopVectorizer] Predicate instructions in blocks with several incoming edges 2016-08-30 20:22:21 +00:00
if-pred-not-when-safe.ll [Loop Vectorizer] Support predication of div/rem 2016-08-24 11:37:57 +00:00
if-pred-stores.ll [LoopVectorizer] Predicate instructions in blocks with several incoming edges 2016-08-30 20:22:21 +00:00
incorrect-dom-info.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
increment.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
induction-step.ll [LoopVectorize] Handling induction variable with non-constant step. 2016-05-10 07:33:35 +00:00
induction.ll [LV] Build all scalar steps for non-uniform induction variables 2016-09-30 15:13:52 +00:00
induction_plus.ll [LV] Scalarize instructions marked scalar after vectorization 2016-09-26 17:08:37 +00:00
infiniteloop.ll
interleaved-accesses-pred-stores.ll [ValueTracking] Teach computeKnownBits about [su]min/max 2016-08-06 08:16:00 +00:00
interleaved-accesses.ll [LV] Ensure reverse interleaved group GEPs remain uniform 2016-09-02 16:19:22 +00:00
intrinsic.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
iv_outside_user.ll [LV] Remove wrong assumption about LCSSA 2016-07-12 21:24:06 +00:00
lcssa-crash.ll
lifetime.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
loop-form.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
loop-vect-memdep.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
memdep.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
metadata-unroll.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
metadata-width.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
metadata.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
miniters.ll The patch replace the overflow check in loop vectorization with the minimum loop iterations check. 2015-08-25 16:43:47 +00:00
minmax_reduction.ll [LoopUtils,LV] Propagate fast-math flags on generated FCmp instructions 2015-09-21 19:41:19 +00:00
multi-use-reduction-bug.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
multiple-address-spaces.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
multiple-strides-vectorization.ll Quick fix for the test from rL272014 "[LAA] Improve non-wrapping pointer 2016-06-07 15:52:35 +00:00
no_array_bounds.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
no_idiv_reduction.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
no_int_induction.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
no_outside_user.ll Recommit [LV] Enable vectorization of loops where the IV has an external use 2016-06-15 00:35:26 +00:00
no_switch.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
noalias-md-licm.ll [LoopVectorize] Annotate versioned loop with noalias metadata 2016-03-17 20:32:37 +00:00
noalias-md.ll [LoopVectorize] Annotate versioned loop with noalias metadata 2016-03-17 20:32:37 +00:00
nofloat.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
non-const-n.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
nontemporal.ll [LoopVectorize] Propagate 'nontemporal' attribute into vectorized instructions. 2015-08-20 22:27:38 +00:00
nsw-crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
opt.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
optsize.ll fix minsize detection: minsize attribute implies optimizing for size 2015-08-11 15:56:31 +00:00
phi-hang.ll [Verifier] Reject PHIs using defs from own block. 2016-03-26 23:32:57 +00:00
pr25281.ll [PR25281] Remove AAResultsWrapper from preserved analyses of loop vectorizer. 2016-04-29 03:31:25 +00:00
pr28541.ll [LoopVectorize] Detect loops in the innermost loop before creating InnerLoopVectorizer 2016-08-12 22:47:13 +00:00
ptr-induction.ll Reverted patch 273864 2016-06-29 10:01:06 +00:00
ptr_loops.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
read-only.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
reduction.ll [LV] Don't bail to MiddleBlock if a runtime check fails, bail to ScalarPH instead 2015-09-02 10:15:39 +00:00
reverse_induction.ll [LV] Don't emit unused scalars for uniform instructions 2016-09-21 16:50:24 +00:00
reverse_iter.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
runtime-check-address-space.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
runtime-check-readonly-address-space.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
runtime-check-readonly.ll [Loop Vectorizer] Fixed memory confilict checks. 2016-08-28 08:53:53 +00:00
runtime-check.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
runtime-limit.ll Fix test introduced in r246187 that failed on some systems. 2015-08-27 20:43:29 +00:00
safegep.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
same-base-access.ll [SCEV][LAA] Re-commit r260085 and r260086, this time with a fix for the memory 2016-02-08 17:02:45 +00:00
scalar-select.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
scalar_after_vectorization.ll [LV] Scalarize instructions marked scalar after vectorization 2016-09-26 17:08:37 +00:00
scev-exitlim-crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
simple-unroll.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
small-loop.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
start-non-zero.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
store-shuffle-bug.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
struct_access.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
tbaa-nodep.ll [Loop Vectorizer] Fixed memory confilict checks. 2016-08-28 08:53:53 +00:00
undef-inst-bug.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
unroll.ll [X86] Disable loop unrolling in loop vectorization pass when VF is 1. 2015-05-06 17:12:25 +00:00
unroll_novec.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
unsafe-dep-remark.ll [LV] Hint at the new loop distribution pragma in optimization remark 2016-05-09 23:03:44 +00:00
unsized-pointee-crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
value-ptr-bug.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
vect.omp.persistence.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
vect.stats.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
vectorize-once.ll Introduce runtime unrolling disable matadata and use it to mark the scalar loop from vectorization. 2015-03-09 06:14:18 +00:00
version-mem-access.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
write-only.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
zero-sized-pointee-crash.ll [LoopVectorize] Don't crash on zero-sized types in isInductionPHI 2015-06-05 10:52:40 +00:00