mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This follows the model of dominance info and allows me to create reachability methods on SILBasicBlock without creating dependencies from swiftSIL to swiftSILAnalysis. Swift SVN r21866
35 lines
1.2 KiB
C++
35 lines
1.2 KiB
C++
//===-------------- LoopAnalysis.cpp - SIL Loop Analysis -*- C++ -*--------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See http://swift.org/LICENSE.txt for license information
|
|
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "swift/SIL/Dominance.h"
|
|
#include "swift/SILAnalysis/DominanceAnalysis.h"
|
|
#include "swift/SILAnalysis/LoopAnalysis.h"
|
|
#include "swift/SILPasses/PassManager.h"
|
|
#include "llvm/Support/Debug.h"
|
|
|
|
using namespace swift;
|
|
|
|
SILLoopInfo *SILLoopAnalysis::getLoopInfo(SILFunction *F) {
|
|
if (!LoopInfos.count(F)) {
|
|
DominanceAnalysis *DA = PM->getAnalysis<DominanceAnalysis>();
|
|
assert(DA != nullptr && "Expect a valid dominance analysis");
|
|
DominanceInfo *DT = DA->getDomInfo(F);
|
|
assert(DT != nullptr && "Expect a valid dominance information");
|
|
LoopInfos[F] = new SILLoopInfo(F, DT);
|
|
}
|
|
return LoopInfos[F];
|
|
}
|
|
|
|
SILAnalysis *swift::createLoopInfoAnalysis(SILModule *M, SILPassManager *PM) {
|
|
return new SILLoopAnalysis(M, PM);
|
|
}
|