llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-x86 Author: Akshat Oke (optimisan) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/129857.diff 8 Files Affected: - (added) llvm/include/llvm/CodeGen/FEntryInserter.h (+25) - (modified) llvm/include/llvm/InitializePasses.h (+1-1) - (modified) llvm/include/llvm/Passes/CodeGenPassBuilder.h (+1) - (modified) llvm/include/llvm/Passes/MachinePassRegistry.def (+1-1) - (modified) llvm/lib/CodeGen/CodeGen.cpp (+1-1) - (modified) llvm/lib/CodeGen/FEntryInserter.cpp (+24-9) - (modified) llvm/lib/Passes/PassBuilder.cpp (+1) - (added) llvm/test/CodeGen/X86/fentry.mir (+18) ``````````diff diff --git a/llvm/include/llvm/CodeGen/FEntryInserter.h b/llvm/include/llvm/CodeGen/FEntryInserter.h new file mode 100644 index 0000000000000..4a82975cad879 --- /dev/null +++ b/llvm/include/llvm/CodeGen/FEntryInserter.h @@ -0,0 +1,25 @@ +//===- llvm/CodeGen/FEntryInserter.h ----------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_FENTRYINSERTER_H +#define LLVM_CODEGEN_FENTRYINSERTER_H + +#include "llvm/CodeGen/MachinePassManager.h" + +namespace llvm { + +class FEntryInserterPass : public PassInfoMixin<FEntryInserterPass> { +public: + PreservedAnalyses run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM); + static bool isRequired() { return true; } +}; + +} // namespace llvm + +#endif // LLVM_CODEGEN_FENTRYINSERTER_H diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index 62566492d0b87..6c5def57d9f05 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -112,7 +112,7 @@ void initializeExpandPostRALegacyPass(PassRegistry &); void initializeExpandReductionsPass(PassRegistry &); void initializeExpandVariadicsPass(PassRegistry &); void initializeExternalAAWrapperPassPass(PassRegistry &); -void initializeFEntryInserterPass(PassRegistry &); +void initializeFEntryInserterLegacyPass(PassRegistry &); void initializeFinalizeISelPass(PassRegistry &); void initializeFinalizeMachineBundlesPass(PassRegistry &); void initializeFixIrreduciblePass(PassRegistry &); diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h index 1dfbb6c7eec2e..35d9b124bd859 100644 --- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h +++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h @@ -33,6 +33,7 @@ #include "llvm/CodeGen/ExpandMemCmp.h" #include "llvm/CodeGen/ExpandPostRAPseudos.h" #include "llvm/CodeGen/ExpandReductions.h" +#include "llvm/CodeGen/FEntryInserter.h" #include "llvm/CodeGen/FinalizeISel.h" #include "llvm/CodeGen/FixupStatepointCallerSaved.h" #include "llvm/CodeGen/GCMetadata.h" diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def index 505dce9098254..416e5506dfd0d 100644 --- a/llvm/include/llvm/Passes/MachinePassRegistry.def +++ b/llvm/include/llvm/Passes/MachinePassRegistry.def @@ -142,6 +142,7 @@ MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass()) MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass()) MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass()) MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass()) +MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass()) MACHINE_FUNCTION_PASS("finalize-isel", FinalizeISelPass()) MACHINE_FUNCTION_PASS("fixup-statepoint-caller-saved", FixupStatepointCallerSavedPass()) MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass()) @@ -259,7 +260,6 @@ DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass) DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter", CFIInstrInserterPass) DUMMY_MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass) DUMMY_MACHINE_FUNCTION_PASS("dot-machine-cfg", MachineCFGPrinter) -DUMMY_MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass) DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderNewPass) DUMMY_MACHINE_FUNCTION_PASS("funclet-layout", FuncletLayoutPass) DUMMY_MACHINE_FUNCTION_PASS("gc-empty-basic-blocks", GCEmptyBasicBlocksPass) diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp index 8f9d9ff92d366..4a69e06d84a9a 100644 --- a/llvm/lib/CodeGen/CodeGen.cpp +++ b/llvm/lib/CodeGen/CodeGen.cpp @@ -43,7 +43,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeExpandLargeFpConvertLegacyPassPass(Registry); initializeExpandMemCmpLegacyPassPass(Registry); initializeExpandPostRALegacyPass(Registry); - initializeFEntryInserterPass(Registry); + initializeFEntryInserterLegacyPass(Registry); initializeFinalizeISelPass(Registry); initializeFinalizeMachineBundlesPass(Registry); initializeFixupStatepointCallerSavedLegacyPass(Registry); diff --git a/llvm/lib/CodeGen/FEntryInserter.cpp b/llvm/lib/CodeGen/FEntryInserter.cpp index 68304dd41db04..79949dac51448 100644 --- a/llvm/lib/CodeGen/FEntryInserter.cpp +++ b/llvm/lib/CodeGen/FEntryInserter.cpp @@ -10,9 +10,11 @@ // //===----------------------------------------------------------------------===// +#include "llvm/CodeGen/FEntryInserter.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/CodeGen/MachinePassManager.h" #include "llvm/CodeGen/TargetInstrInfo.h" #include "llvm/CodeGen/TargetSubtargetInfo.h" #include "llvm/IR/Function.h" @@ -21,17 +23,30 @@ using namespace llvm; namespace { -struct FEntryInserter : public MachineFunctionPass { +struct FEntryInserter { + bool run(MachineFunction &MF); +}; + +struct FEntryInserterLegacy : public MachineFunctionPass { static char ID; // Pass identification, replacement for typeid - FEntryInserter() : MachineFunctionPass(ID) { - initializeFEntryInserterPass(*PassRegistry::getPassRegistry()); + FEntryInserterLegacy() : MachineFunctionPass(ID) { + initializeFEntryInserterLegacyPass(*PassRegistry::getPassRegistry()); } - bool runOnMachineFunction(MachineFunction &F) override; + bool runOnMachineFunction(MachineFunction &F) override { + return FEntryInserter().run(F); + } }; } -bool FEntryInserter::runOnMachineFunction(MachineFunction &MF) { +PreservedAnalyses FEntryInserterPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &AM) { + if (!FEntryInserter().run(MF)) + return PreservedAnalyses::all(); + return getMachineFunctionPassPreservedAnalyses(); +} + +bool FEntryInserter::run(MachineFunction &MF) { const std::string FEntryName = std::string( MF.getFunction().getFnAttribute("fentry-call").getValueAsString()); if (FEntryName != "true") @@ -44,7 +59,7 @@ bool FEntryInserter::runOnMachineFunction(MachineFunction &MF) { return true; } -char FEntryInserter::ID = 0; -char &llvm::FEntryInserterID = FEntryInserter::ID; -INITIALIZE_PASS(FEntryInserter, "fentry-insert", "Insert fentry calls", false, - false) +char FEntryInserterLegacy::ID = 0; +char &llvm::FEntryInserterID = FEntryInserterLegacy::ID; +INITIALIZE_PASS(FEntryInserterLegacy, "fentry-insert", "Insert fentry calls", + false, false) diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 555349cbe0398..4e623834e5e5d 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -91,6 +91,7 @@ #include "llvm/CodeGen/ExpandLargeFpConvert.h" #include "llvm/CodeGen/ExpandMemCmp.h" #include "llvm/CodeGen/ExpandPostRAPseudos.h" +#include "llvm/CodeGen/FEntryInserter.h" #include "llvm/CodeGen/FinalizeISel.h" #include "llvm/CodeGen/FixupStatepointCallerSaved.h" #include "llvm/CodeGen/GCMetadata.h" diff --git a/llvm/test/CodeGen/X86/fentry.mir b/llvm/test/CodeGen/X86/fentry.mir new file mode 100644 index 0000000000000..5bbc3a0e0387d --- /dev/null +++ b/llvm/test/CodeGen/X86/fentry.mir @@ -0,0 +1,18 @@ +# RUN: llc -mtriple=x86_64-- -passes=fentry-insert %s -o - | FileCheck %s + +--- | + target triple = "x86_64--" + define i32 @with_fentry() #1 { + entry: + ret i32 0 + } + + attributes #1 = { "fentry-call"="true" } +--- + +name: with_fentry +body: | + bb.0: + ; CHECK-LABEL: name: with_fentry + ; CHECK: FENTRY_CALL + RET 0 \ No newline at end of file `````````` </details> https://github.com/llvm/llvm-project/pull/129857 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits