Reverting this to see if this is causing the failures of the clang-with-thin-lto-ubuntu bot. [IPSCCP] Use PredicateInfo to propagate facts from cmp instructions. This patch updates IPSCCP to use PredicateInfo to propagate facts to true branches predicated by EQ and to false branches predicated by NE. As a follow up, we should be able to extend it to also propagate additional facts about nonnull. Reviewers: davide, mssimpso, dberlin, efriedma Reviewed By: davide, dberlin Differential Revision: https://reviews.llvm.org/D45330 llvm-svn: 333323
59 lines
1.8 KiB
C++
59 lines
1.8 KiB
C++
#include "llvm/Transforms/IPO/SCCP.h"
|
|
#include "llvm/Analysis/TargetLibraryInfo.h"
|
|
#include "llvm/Transforms/IPO.h"
|
|
#include "llvm/Transforms/Scalar/SCCP.h"
|
|
|
|
using namespace llvm;
|
|
|
|
PreservedAnalyses IPSCCPPass::run(Module &M, ModuleAnalysisManager &AM) {
|
|
const DataLayout &DL = M.getDataLayout();
|
|
auto &TLI = AM.getResult<TargetLibraryAnalysis>(M);
|
|
if (!runIPSCCP(M, DL, &TLI))
|
|
return PreservedAnalyses::all();
|
|
return PreservedAnalyses::none();
|
|
}
|
|
|
|
namespace {
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
/// IPSCCP Class - This class implements interprocedural Sparse Conditional
|
|
/// Constant Propagation.
|
|
///
|
|
class IPSCCPLegacyPass : public ModulePass {
|
|
public:
|
|
static char ID;
|
|
|
|
IPSCCPLegacyPass() : ModulePass(ID) {
|
|
initializeIPSCCPLegacyPassPass(*PassRegistry::getPassRegistry());
|
|
}
|
|
|
|
bool runOnModule(Module &M) override {
|
|
if (skipModule(M))
|
|
return false;
|
|
const DataLayout &DL = M.getDataLayout();
|
|
const TargetLibraryInfo *TLI =
|
|
&getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
|
return runIPSCCP(M, DL, TLI);
|
|
}
|
|
|
|
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
|
AU.addRequired<TargetLibraryInfoWrapperPass>();
|
|
}
|
|
};
|
|
|
|
} // end anonymous namespace
|
|
|
|
char IPSCCPLegacyPass::ID = 0;
|
|
|
|
INITIALIZE_PASS_BEGIN(IPSCCPLegacyPass, "ipsccp",
|
|
"Interprocedural Sparse Conditional Constant Propagation",
|
|
false, false)
|
|
INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
|
|
INITIALIZE_PASS_END(IPSCCPLegacyPass, "ipsccp",
|
|
"Interprocedural Sparse Conditional Constant Propagation",
|
|
false, false)
|
|
|
|
// createIPSCCPPass - This is the public interface to this file.
|
|
ModulePass *llvm::createIPSCCPPass() { return new IPSCCPLegacyPass(); }
|