llvm/lib/Transforms
Chandler Carruth f5837aacd4 Rework the rewriting of loads and stores for vector and integer allocas
to properly handle the combinations of these with split integer loads
and stores. This essentially replaces Evan's r168227 by refactoring the
code in a different way, and trynig to mirror that refactoring in both
the load and store sides of the rewriting.

Generally speaking there was some really problematic duplicated code
here that led to poorly founded assumptions and then subtle bugs. Now
much of the code actually flows through and follows a more consistent
style and logical path. There is still a tiny bit of duplication on the
store side of things, but it is much less bad.

This also changes the logic to never re-use a load or store instruction
as that was simply too error prone in practice.

I've added a few tests (one a reduction of the one in Evan's original
patch, which happened to be the same as the report in PR14349). I'm
going to look at adding a few more tests for things I found and fixed in
passing (such as the volatile tests in the vectorizable predicate).

This patch has survived bootstrap, and modulo one bugfix survived
Duncan's test suite, but let me know if anything else explodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168346 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-20 01:12:50 +00:00
..
Hello Since the Hello pass is built as a loadable dynamic library, don't try to convert it to new-style registration yet. 2010-10-07 00:31:16 +00:00
InstCombine Don't try to calculate the alignment of an unsigned type. Fixes PR14371! 2012-11-18 05:39:39 +00:00
Instrumentation Plug a memory leak in the GCOV profiling emitter, which never released the edge table memory. 2012-11-17 13:49:37 +00:00
IPO Clean up handling of always-inline functions in the inliner. 2012-11-19 07:04:35 +00:00
Scalar Rework the rewriting of loads and stores for vector and integer allocas 2012-11-20 01:12:50 +00:00
Utils SimplifyCFG: Don't assume non-null ScalarTargetTransformInfo. 2012-11-16 18:22:08 +00:00
Vectorize LoopVectorizer: Add initial support for pointer induction variables (for example: *dst++ = *src++). 2012-11-17 00:27:03 +00:00
CMakeLists.txt Add a basic-block autovectorization pass. 2012-02-01 03:51:43 +00:00
LLVMBuild.txt Add a basic-block autovectorization pass. 2012-02-01 03:51:43 +00:00
Makefile Add a basic-block autovectorization pass. 2012-02-01 03:51:43 +00:00