Disable the inlining of non-direct recursions (where A->B->A).

Swift SVN r17101
This commit is contained in:
Nadav Rotem
2014-04-30 18:45:13 +00:00
parent 47628dbfb6
commit e406e43060
8 changed files with 142 additions and 15 deletions

View File

@@ -108,6 +108,7 @@ namespace swift {
class CallGraphAnalysis : public SILAnalysis {
SILModule *M;
std::vector<SILFunction *> BottomUpFunctionOrder;
llvm::DenseSet<SILFunction*> RecursiveCallers;
public:
virtual ~CallGraphAnalysis() {}
@@ -121,6 +122,9 @@ namespace swift {
/// \brief return a bottom-up function order.
const std::vector<SILFunction*> &bottomUpCallGraphOrder();
/// \brief return a set of recursive caller functions.
const llvm::DenseSet<SILFunction*> &recursiveCallers();
virtual void invalidate(InvalidationKind K) {
if (K >= InvalidationKind::CallGraph)
BottomUpFunctionOrder.clear();