Add a major missing piece to the new SROA pass: aggressive splitting of
authorChandler Carruth <chandlerc@gmail.com>
Tue, 18 Sep 2012 12:57:43 +0000 (12:57 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 18 Sep 2012 12:57:43 +0000 (12:57 +0000)
commitc370acdf9698b7eee11f3d8e3732f1d72cd25943
treecd0f4618d7ce0baa21d1f1980c818aba52cfcde6
parentd7cc8b839cba201b552698646b624da7a79ede8e
Add a major missing piece to the new SROA pass: aggressive splitting of
FCAs. This is essential in order to promote allocas that are used in
struct returns by frontends like Clang. The FCA load would block the
rest of the pass from firing, resulting is significant regressions with
the bullet benchmark in the nightly test suite.

Thanks to Duncan for repeated discussions about how best to do this, and
to both him and Benjamin for review.

This appears to have blocked many places where the pass tries to fire,
and so I'm expect somewhat different results with this fix added.

As with the last big patch, I'm including a change to enable the SROA by
default *temporarily*. Ben is going to remove this as soon as the LNT
bots pick up the patch. I'm just trying to get a round of LNT numbers
from the stable machines in the lab.

NOTE: Four clang tests are expected to fail in the brief window where
this is enabled. Sorry for the noise!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164119 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/IPO/PassManagerBuilder.cpp
lib/Transforms/Scalar/SROA.cpp
test/Transforms/SROA/fca.ll [new file with mode: 0644]