From f3f8fc6a204a353edf3c7f80b5612689d58d0edc Mon Sep 17 00:00:00 2001 From: Michael Kuperstein Date: Fri, 24 Jun 2016 20:13:42 +0000 Subject: [PATCH] [PM] Port PreISelIntrinsicLowering to the new PM git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273713 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../llvm/CodeGen/PreISelIntrinsicLowering.h | 26 ++++++++++++++++ include/llvm/InitializePasses.h | 2 +- lib/CodeGen/CodeGen.cpp | 2 +- lib/CodeGen/PreISelIntrinsicLowering.cpp | 31 ++++++++++++------- lib/Passes/PassBuilder.cpp | 1 + lib/Passes/PassRegistry.def | 1 + .../PreISelIntrinsicLowering/load-relative.ll | 1 + tools/opt/opt.cpp | 2 +- 8 files changed, 52 insertions(+), 14 deletions(-) create mode 100644 include/llvm/CodeGen/PreISelIntrinsicLowering.h diff --git a/include/llvm/CodeGen/PreISelIntrinsicLowering.h b/include/llvm/CodeGen/PreISelIntrinsicLowering.h new file mode 100644 index 000000000000..765ca085244a --- /dev/null +++ b/include/llvm/CodeGen/PreISelIntrinsicLowering.h @@ -0,0 +1,26 @@ +//===--- PreISelIntrinsicLowering.h - Pre-ISel intrinsic lowering pass ----===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This pass implements IR lowering for the llvm.load.relative intrinsic. +// +//===----------------------------------------------------------------------===// +#ifndef LLVM_CODEGEN_PREISELINTRINSICLOWERING_H +#define LLVM_CODEGEN_PREISELINTRINSICLOWERING_H + +#include "llvm/IR/PassManager.h" + +namespace llvm { + +struct PreISelIntrinsicLoweringPass + : PassInfoMixin { + PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); +}; +} + +#endif // LLVM_CODEGEN_PREISELINTRINSICLOWERING_H diff --git a/include/llvm/InitializePasses.h b/include/llvm/InitializePasses.h index fe4b9bd9ce9b..5d34f40c7501 100644 --- a/include/llvm/InitializePasses.h +++ b/include/llvm/InitializePasses.h @@ -261,7 +261,7 @@ void initializePostMachineSchedulerPass(PassRegistry&); void initializePostOrderFunctionAttrsLegacyPassPass(PassRegistry&); void initializePostRAHazardRecognizerPass(PassRegistry&); void initializePostRASchedulerPass(PassRegistry&); -void initializePreISelIntrinsicLoweringPass(PassRegistry&); +void initializePreISelIntrinsicLoweringLegacyPassPass(PassRegistry&); void initializePrintBasicBlockPassPass(PassRegistry&); void initializePrintFunctionPassWrapperPass(PassRegistry&); void initializePrintModulePassWrapperPass(PassRegistry&); diff --git a/lib/CodeGen/CodeGen.cpp b/lib/CodeGen/CodeGen.cpp index dc19013be942..bea1bbe0dac6 100644 --- a/lib/CodeGen/CodeGen.cpp +++ b/lib/CodeGen/CodeGen.cpp @@ -65,7 +65,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializePostMachineSchedulerPass(Registry); initializePostRAHazardRecognizerPass(Registry); initializePostRASchedulerPass(Registry); - initializePreISelIntrinsicLoweringPass(Registry); + initializePreISelIntrinsicLoweringLegacyPassPass(Registry); initializeProcessImplicitDefsPass(Registry); initializeRegisterCoalescerPass(Registry); initializeRenameIndependentSubregsPass(Registry); diff --git a/lib/CodeGen/PreISelIntrinsicLowering.cpp b/lib/CodeGen/PreISelIntrinsicLowering.cpp index a1ff231412d8..fbc2bc64f425 100644 --- a/lib/CodeGen/PreISelIntrinsicLowering.cpp +++ b/lib/CodeGen/PreISelIntrinsicLowering.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/CodeGen/PreISelIntrinsicLowering.h" #include "llvm/CodeGen/Passes.h" #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" @@ -63,23 +64,31 @@ bool lowerIntrinsics(Module &M) { return Changed; } -class PreISelIntrinsicLowering : public ModulePass { +class PreISelIntrinsicLoweringLegacyPass : public ModulePass { public: static char ID; - PreISelIntrinsicLowering() : ModulePass(ID) {} + PreISelIntrinsicLoweringLegacyPass() : ModulePass(ID) {} - bool runOnModule(Module &M) { - return lowerIntrinsics(M); - } + bool runOnModule(Module &M) { return lowerIntrinsics(M); } }; -char PreISelIntrinsicLowering::ID; - +char PreISelIntrinsicLoweringLegacyPass::ID; } -INITIALIZE_PASS(PreISelIntrinsicLowering, "pre-isel-intrinsic-lowering", - "Pre-ISel Intrinsic Lowering", false, false) +INITIALIZE_PASS(PreISelIntrinsicLoweringLegacyPass, + "pre-isel-intrinsic-lowering", "Pre-ISel Intrinsic Lowering", + false, false) + +namespace llvm { +ModulePass *createPreISelIntrinsicLoweringPass() { + return new PreISelIntrinsicLoweringLegacyPass; +} -ModulePass *llvm::createPreISelIntrinsicLoweringPass() { - return new PreISelIntrinsicLowering; +PreservedAnalyses PreISelIntrinsicLoweringPass::run(Module &M, + ModuleAnalysisManager &AM) { + if (!lowerIntrinsics(M)) + return PreservedAnalyses::all(); + else + return PreservedAnalyses::none(); } +} // End llvm namespace diff --git a/lib/Passes/PassBuilder.cpp b/lib/Passes/PassBuilder.cpp index 5a5b49af2f47..c372b5a378a1 100644 --- a/lib/Passes/PassBuilder.cpp +++ b/lib/Passes/PassBuilder.cpp @@ -44,6 +44,7 @@ #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/Analysis/TargetTransformInfo.h" #include "llvm/Analysis/TypeBasedAliasAnalysis.h" +#include "llvm/CodeGen/PreISelIntrinsicLowering.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/IRPrintingPasses.h" #include "llvm/IR/PassManager.h" diff --git a/lib/Passes/PassRegistry.def b/lib/Passes/PassRegistry.def index 18b50ddcc202..c1e1e59ae827 100644 --- a/lib/Passes/PassRegistry.def +++ b/lib/Passes/PassRegistry.def @@ -53,6 +53,7 @@ MODULE_PASS("no-op-module", NoOpModulePass()) MODULE_PASS("pgo-icall-prom", PGOIndirectCallPromotion()) MODULE_PASS("pgo-instr-gen", PGOInstrumentationGen()) MODULE_PASS("pgo-instr-use", PGOInstrumentationUse()) +MODULE_PASS("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass()) MODULE_PASS("print-profile-summary", ProfileSummaryPrinterPass(dbgs())) MODULE_PASS("print-callgraph", CallGraphPrinterPass(dbgs())) MODULE_PASS("print", PrintModulePass(dbgs())) diff --git a/test/Transforms/PreISelIntrinsicLowering/load-relative.ll b/test/Transforms/PreISelIntrinsicLowering/load-relative.ll index 56bedd9b101f..43cb0cc5a1d7 100644 --- a/test/Transforms/PreISelIntrinsicLowering/load-relative.ll +++ b/test/Transforms/PreISelIntrinsicLowering/load-relative.ll @@ -1,4 +1,5 @@ ; RUN: opt -pre-isel-intrinsic-lowering -S -o - %s | FileCheck %s +; RUN: opt -passes='pre-isel-intrinsic-lowering' -S -o - %s | FileCheck %s ; CHECK: define i8* @foo32(i8* [[P:%.*]], i32 [[O:%.*]]) define i8* @foo32(i8* %p, i32 %o) { diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index def3f42f2d3b..889cbb965ef9 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -361,7 +361,7 @@ int main(int argc, char **argv) { initializeDwarfEHPreparePass(Registry); initializeSafeStackPass(Registry); initializeSjLjEHPreparePass(Registry); - initializePreISelIntrinsicLoweringPass(Registry); + initializePreISelIntrinsicLoweringLegacyPassPass(Registry); initializeGlobalMergePass(Registry); initializeInterleavedAccessPass(Registry);