Reapply 184685 after the SetVector iteration order fix.
authorArnold Schwaighofer <aschwaighofer@apple.com>
Mon, 24 Jun 2013 12:09:15 +0000 (12:09 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Mon, 24 Jun 2013 12:09:15 +0000 (12:09 +0000)
commitb252c11cccfac80351d854400dd83d4f07c87d12
treef9200cccd453782524d6181932b7407803f26fd0
parent91472fa4fc220df5a4c7525e86cabce24f5d5e1d
Reapply 184685 after the SetVector iteration order fix.

This should hopefully have fixed the stage2/stage3 miscompare on the dragonegg
testers.

"LoopVectorize: Use the dependence test utility class

We now no longer need alias analysis - the cases that alias analysis would
handle are now handled as accesses with a large dependence distance.

We can now vectorize loops with simple constant dependence distances.

  for (i = 8; i < 256; ++i) {
    a[i] = a[i+4] * a[i+8];
  }

  for (i = 8; i < 256; ++i) {
    a[i] = a[i-4] * a[i-8];
  }

We would be able to vectorize about 200 more loops (in many cases the cost model
instructs us no to) in the test suite now. Results on x86-64 are a wash.

I have seen one degradation in ammp. Interestingly, the function in which we
now vectorize a loop is never executed so we probably see some instruction
cache effects. There is a 2% improvement in h264ref. There is one or the other
TSCV loop kernel that speeds up.

radar://13681598"

llvm-svn: 184724
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/test/Transforms/LoopVectorize/12-12-11-if-conv.ll
llvm/test/Transforms/LoopVectorize/memdep.ll [new file with mode: 0644]
llvm/test/Transforms/LoopVectorize/runtime-check.ll