diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86AvoidTrailingCall.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86AvoidTrailingCall.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/llvm/lib/Target/X86/X86AvoidTrailingCall.cpp b/llvm/lib/Target/X86/X86AvoidTrailingCall.cpp index 2ecf493..ebd4284 100644 --- a/llvm/lib/Target/X86/X86AvoidTrailingCall.cpp +++ b/llvm/lib/Target/X86/X86AvoidTrailingCall.cpp @@ -37,6 +37,8 @@ #include "X86Subtarget.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/IR/Analysis.h" +#include "llvm/IR/PassManager.h" #define AVOIDCALL_DESC "X86 avoid trailing call pass" #define AVOIDCALL_NAME "x86-avoid-trailing-call" @@ -46,9 +48,9 @@ using namespace llvm; namespace { -class X86AvoidTrailingCallPass : public MachineFunctionPass { +class X86AvoidTrailingCallLegacyPass : public MachineFunctionPass { public: - X86AvoidTrailingCallPass() : MachineFunctionPass(ID) {} + X86AvoidTrailingCallLegacyPass() : MachineFunctionPass(ID) {} bool runOnMachineFunction(MachineFunction &MF) override; @@ -59,13 +61,14 @@ private: }; } // end anonymous namespace -char X86AvoidTrailingCallPass::ID = 0; +char X86AvoidTrailingCallLegacyPass::ID = 0; -FunctionPass *llvm::createX86AvoidTrailingCallPass() { - return new X86AvoidTrailingCallPass(); +FunctionPass *llvm::createX86AvoidTrailingCallLegacyPass() { + return new X86AvoidTrailingCallLegacyPass(); } -INITIALIZE_PASS(X86AvoidTrailingCallPass, AVOIDCALL_NAME, AVOIDCALL_DESC, false, false) +INITIALIZE_PASS(X86AvoidTrailingCallLegacyPass, AVOIDCALL_NAME, AVOIDCALL_DESC, + false, false) // A real instruction is a non-meta, non-pseudo instruction. Some pseudos // expand to nothing, and some expand to code. This logic conservatively assumes @@ -79,7 +82,7 @@ static bool isCallInstruction(const MachineInstr &MI) { return MI.isCall() && !MI.isReturn(); } -bool X86AvoidTrailingCallPass::runOnMachineFunction(MachineFunction &MF) { +bool UpdatedOnX86AvoidTrailingCallPass(MachineFunction &MF) { const X86Subtarget &STI = MF.getSubtarget<X86Subtarget>(); const X86InstrInfo &TII = *STI.getInstrInfo(); assert(STI.isTargetWin64() && "pass only runs on Win64"); @@ -134,3 +137,19 @@ bool X86AvoidTrailingCallPass::runOnMachineFunction(MachineFunction &MF) { return Changed; } + +bool X86AvoidTrailingCallLegacyPass::runOnMachineFunction(MachineFunction &MF) { + return UpdatedOnX86AvoidTrailingCallPass(MF); +} + +PreservedAnalyses +X86AvoidTrailingCallPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + bool Changed = UpdatedOnX86AvoidTrailingCallPass(MF); + if (!Changed) + return PreservedAnalyses::all(); + + PreservedAnalyses PA = PreservedAnalyses::none(); + PA.preserveSet<CFGAnalyses>(); + return PA; +} |
