Files
swift-mirror/include/swift/OptimizeARC/Passes.h
Jordan Rose fb21a2da84 Move LLVM passes into a library, and use opt to test them instead of swift.
These don't really have anything to do with Swift, and there's no reason to
include this capability in the new driver.

Swift SVN r13181
2014-01-30 23:42:38 +00:00

69 lines
2.1 KiB
C++

//===--- Passes.h - LLVM optimizer passes for Swift -------------*- 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
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_OPTIMIZEARC_PASSES_H
#define SWIFT_OPTIMIZEARC_PASSES_H
#include "swift/OptimizeARC/PassesFwd.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Pass.h"
namespace swift {
class SwiftAliasAnalysis : public llvm::ImmutablePass, public llvm::AliasAnalysis {
public:
static char ID; // Class identification, replacement for typeinfo
SwiftAliasAnalysis() : ImmutablePass(ID) {}
private:
virtual void initializePass() override {
InitializeAliasAnalysis(this);
}
virtual void *getAdjustedAnalysisPointer(const void *PI) override {
if (PI == &AliasAnalysis::ID)
return static_cast<AliasAnalysis *>(this);
return this;
}
void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
AU.setPreservesAll();
AliasAnalysis::getAnalysisUsage(AU);
}
virtual ModRefResult getModRefInfo(llvm::ImmutableCallSite CS,
const Location &Loc) override;
};
class SwiftARCOpt : public llvm::FunctionPass {
virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override;
virtual bool runOnFunction(llvm::Function &F) override;
public:
static char ID;
SwiftARCOpt();
};
class SwiftARCExpandPass : public llvm::FunctionPass {
virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
AU.setPreservesCFG();
}
virtual bool runOnFunction(llvm::Function &F) override;
public:
static char ID;
SwiftARCExpandPass() : llvm::FunctionPass(ID) {}
};
} // end namespace swift
#endif