Teach the new SROA to handle cases where an alloca that has already been
authorChandler Carruth <chandlerc@gmail.com>
Tue, 2 Oct 2012 22:46:45 +0000 (22:46 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 2 Oct 2012 22:46:45 +0000 (22:46 +0000)
commitb09f0a3c75f3c5aa2ba309ddcb4e21d60053b130
tree551521010643a56abbe27967eb7499589f367fcb
parent0f40a3e795ee1afb61f4db2a4cea573acf5386d4
Teach the new SROA to handle cases where an alloca that has already been
scheduled for processing on the worklist eventually gets deleted while
we are processing another alloca, fixing the original test case in
PR13990.

To facilitate this, add a remove_if helper to the SetVector abstraction.
It's not easy to use the standard abstractions for this because of the
specifics of SetVectors types and implementation.

Finally, a nice small test case is included. Thanks to Benjamin for the
fantastic reduced test case here! All I had to do was delete some empty
basic blocks!

llvm-svn: 165065
llvm/include/llvm/ADT/SetVector.h
llvm/lib/Transforms/Scalar/SROA.cpp
llvm/test/Transforms/SROA/basictest.ll