3737#include " X86Subtarget.h"
3838#include " llvm/CodeGen/MachineFunctionPass.h"
3939#include " llvm/CodeGen/MachineInstrBuilder.h"
40+ #include " llvm/IR/Analysis.h"
41+ #include " llvm/IR/PassManager.h"
4042
4143#define AVOIDCALL_DESC " X86 avoid trailing call pass"
4244#define AVOIDCALL_NAME " x86-avoid-trailing-call"
4648using namespace llvm ;
4749
4850namespace {
49- class X86AvoidTrailingCallPass : public MachineFunctionPass {
51+ class X86AvoidTrailingCallLegacyPass : public MachineFunctionPass {
5052public:
51- X86AvoidTrailingCallPass () : MachineFunctionPass(ID) {}
53+ X86AvoidTrailingCallLegacyPass () : MachineFunctionPass(ID) {}
5254
5355 bool runOnMachineFunction (MachineFunction &MF) override ;
5456
@@ -59,13 +61,14 @@ class X86AvoidTrailingCallPass : public MachineFunctionPass {
5961};
6062} // end anonymous namespace
6163
62- char X86AvoidTrailingCallPass ::ID = 0 ;
64+ char X86AvoidTrailingCallLegacyPass ::ID = 0 ;
6365
64- FunctionPass *llvm::createX86AvoidTrailingCallPass () {
65- return new X86AvoidTrailingCallPass ();
66+ FunctionPass *llvm::createX86AvoidTrailingCallLegacyPass () {
67+ return new X86AvoidTrailingCallLegacyPass ();
6668}
6769
68- INITIALIZE_PASS (X86AvoidTrailingCallPass, AVOIDCALL_NAME, AVOIDCALL_DESC, false , false )
70+ INITIALIZE_PASS (X86AvoidTrailingCallLegacyPass, AVOIDCALL_NAME, AVOIDCALL_DESC,
71+ false , false )
6972
7073// A real instruction is a non-meta, non-pseudo instruction. Some pseudos
7174// expand to nothing, and some expand to code. This logic conservatively assumes
@@ -79,7 +82,7 @@ static bool isCallInstruction(const MachineInstr &MI) {
7982 return MI.isCall () && !MI.isReturn ();
8083}
8184
82- bool X86AvoidTrailingCallPass::runOnMachineFunction (MachineFunction &MF) {
85+ bool UpdatedOnX86AvoidTrailingCallPass (MachineFunction &MF) {
8386 const X86Subtarget &STI = MF.getSubtarget <X86Subtarget>();
8487 const X86InstrInfo &TII = *STI.getInstrInfo ();
8588 assert (STI.isTargetWin64 () && " pass only runs on Win64" );
@@ -134,3 +137,19 @@ bool X86AvoidTrailingCallPass::runOnMachineFunction(MachineFunction &MF) {
134137
135138 return Changed;
136139}
140+
141+ bool X86AvoidTrailingCallLegacyPass::runOnMachineFunction (MachineFunction &MF) {
142+ return UpdatedOnX86AvoidTrailingCallPass (MF);
143+ }
144+
145+ PreservedAnalyses
146+ X86AvoidTrailingCallPass::run (MachineFunction &MF,
147+ MachineFunctionAnalysisManager &MFAM) {
148+ bool Changed = UpdatedOnX86AvoidTrailingCallPass (MF);
149+ if (!Changed)
150+ return PreservedAnalyses::all ();
151+
152+ PreservedAnalyses PA = PreservedAnalyses::none ();
153+ PA.preserveSet <CFGAnalyses>();
154+ return PA;
155+ }
0 commit comments