mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
91525f438c
This reverts r319889. Unfortunately, wrapping flags are not a part of SCEV's identity (they do not participate in computing a hash value or in equality comparisons) and in fact they could be assigned after the fact w/o rebuilding a SCEV. Grep for const_cast's to see quite a few of examples, apparently all for AddRec's at the moment. So, if 2 expressions get built in 2 slightly different ways: one with flags set in the beginning, the other with the flags attached later on, we may end up with 2 expressions which are exactly the same but have their operands swapped in one of the commutative N-ary expressions, and at least one of them will have "sorted by complexity" invariant broken. 2 identical SCEV's won't compare equal by pointer comparison as they are supposed to. A real-world reproducer is added as a regression test: the issue described causes 2 identical SCEV expressions to have different order of operands and therefore compare not equal, which in its turn prevents LoadStoreVectorizer from vectorizing a pair of consecutive loads. On a larger example (the source of the test attached, which is a bugpoint) I have seen even weirder behavior: adding a constant to an existing SCEV changes the order of the existing terms, for instance, getAddExpr(1, ((A * B) + (C * D))) returns (1 + (C * D) + (A * B)). Differential Revision: https://reviews.llvm.org/D40645 llvm-svn: 340777 |
||
---|---|---|
.. | ||
AArch64 | ||
AMDGPU | ||
ARM | ||
Hexagon | ||
PowerPC | ||
SystemZ | ||
X86 | ||
XCore | ||
12-12-11-if-conv.ll | ||
2012-10-20-infloop.ll | ||
2012-10-22-isconsec.ll | ||
2016-07-27-loop-vec.ll | ||
align.ll | ||
bsd_regex.ll | ||
bzip_reverse_loops.ll | ||
calloc.ll | ||
cast-induction.ll | ||
conditional-assignment.ll | ||
consec_no_gep.ll | ||
consecutive-ptr-uniforms.ll | ||
control-flow.ll | ||
cpp-new-array.ll | ||
dbg.value.ll | ||
dead_instructions.ll | ||
debugloc.ll | ||
diag-missing-instr-debug-loc.ll | ||
diag-with-hotness-info-2.ll | ||
diag-with-hotness-info.ll | ||
discriminator.ll | ||
ee-crash.ll | ||
exact.ll | ||
explicit_outer_detection.ll | ||
explicit_outer_nonuniform_inner.ll | ||
explicit_outer_uniform_diverg_branch.ll | ||
fcmp-vectorize.ll | ||
first-order-recurrence.ll | ||
flags.ll | ||
float-induction.ll | ||
float-reduction.ll | ||
funcall.ll | ||
gcc-examples.ll | ||
gep_with_bitcast.ll | ||
global_alias.ll | ||
hints-trans.ll | ||
hoist-loads.ll | ||
i8-induction.ll | ||
icmp-uniforms.ll | ||
if-conv-crash.ll | ||
if-conversion-edgemasks.ll | ||
if-conversion-nest.ll | ||
if-conversion-reduction.ll | ||
if-conversion.ll | ||
if-pred-non-void.ll | ||
if-pred-not-when-safe.ll | ||
if-pred-stores.ll | ||
incorrect-dom-info.ll | ||
increment.ll | ||
induction_plus.ll | ||
induction-step.ll | ||
induction.ll | ||
infiniteloop.ll | ||
int_sideeffect.ll | ||
interleaved-accesses-1.ll | ||
interleaved-accesses-2.ll | ||
interleaved-accesses-3.ll | ||
interleaved-accesses-alias.ll | ||
interleaved-accesses-pred-stores.ll | ||
interleaved-accesses.ll | ||
interleaved-acess-with-remarks.ll | ||
intrinsic.ll | ||
iv_outside_user.ll | ||
lcssa-crash.ll | ||
legal_preheader_check.ll | ||
lifetime.ll | ||
loop-form.ll | ||
loop-scalars.ll | ||
loop-vect-memdep.ll | ||
memdep.ll | ||
metadata-unroll.ll | ||
metadata-width.ll | ||
metadata.ll | ||
miniters.ll | ||
minmax_reduction.ll | ||
multi-use-reduction-bug.ll | ||
multiple-address-spaces.ll | ||
multiple-strides-vectorization.ll | ||
no_array_bounds.ll | ||
no_idiv_reduction.ll | ||
no_int_induction.ll | ||
no_outside_user.ll | ||
no_switch.ll | ||
noalias-md-licm.ll | ||
noalias-md.ll | ||
nofloat.ll | ||
non-const-n.ll | ||
nontemporal.ll | ||
nsw-crash.ll | ||
opt.ll | ||
optsize.ll | ||
partial-lcssa.ll | ||
phi-cost.ll | ||
phi-hang.ll | ||
pr25281.ll | ||
pr28541.ll | ||
pr30654-phiscev-sext-trunc.ll | ||
pr31098.ll | ||
pr31190.ll | ||
pr32859.ll | ||
pr33706.ll | ||
pr34681.ll | ||
pr35743.ll | ||
pr35773.ll | ||
pr36311.ll | ||
pr36983.ll | ||
pr37248.ll | ||
preserve-dbg-loc-and-loop-metadata.ll | ||
ptr_loops.ll | ||
ptr-induction.ll | ||
read-only.ll | ||
reduction-small-size.ll | ||
reduction.ll | ||
reverse_induction.ll | ||
reverse_iter.ll | ||
runtime-check-address-space.ll | ||
runtime-check-readonly-address-space.ll | ||
runtime-check-readonly.ll | ||
runtime-check.ll | ||
runtime-limit.ll | ||
safegep.ll | ||
same-base-access.ll | ||
scalar_after_vectorization.ll | ||
scalar-select.ll | ||
scev-exitlim-crash.ll | ||
simple-unroll.ll | ||
skip-iterations.ll | ||
small-loop.ll | ||
start-non-zero.ll | ||
store-shuffle-bug.ll | ||
struct_access.ll | ||
tbaa-nodep.ll | ||
tripcount.ll | ||
undef-inst-bug.ll | ||
unroll_novec.ll | ||
unroll-novec-memcheck-metadata.ll | ||
unroll.ll | ||
unsafe-dep-remark.ll | ||
unsized-pointee-crash.ll | ||
value-ptr-bug.ll | ||
vect-phiscev-sext-trunc.ll | ||
vect.omp.persistence.ll | ||
vect.stats.ll | ||
vector-geps.ll | ||
vectorize-once.ll | ||
version-mem-access.ll | ||
vplan_hcfg_stress_test.ll | ||
write-only.ll | ||
zero-sized-pointee-crash.ll |