https://github.com/optimisan updated https://github.com/llvm/llvm-project/pull/130069
>From ca3edf5d1ae10f70bce8efe35b858104c67b917c Mon Sep 17 00:00:00 2001 From: Akshat Oke <akshat....@amd.com> Date: Thu, 6 Mar 2025 10:20:36 +0000 Subject: [PATCH] [CodeGen][NPM] Port MachineSanitizerBinaryMetadata to NPM --- .../llvm/CodeGen/SanitizerBinaryMetadata.h | 26 +++++++++++++ llvm/include/llvm/InitializePasses.h | 2 +- llvm/include/llvm/Passes/CodeGenPassBuilder.h | 3 +- .../llvm/Passes/MachinePassRegistry.def | 2 +- llvm/lib/CodeGen/CodeGen.cpp | 2 +- llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp | 37 ++++++++++++++----- llvm/lib/Passes/PassBuilder.cpp | 1 + llvm/test/tools/llc/new-pm/pipeline.ll | 2 +- 8 files changed, 61 insertions(+), 14 deletions(-) create mode 100644 llvm/include/llvm/CodeGen/SanitizerBinaryMetadata.h diff --git a/llvm/include/llvm/CodeGen/SanitizerBinaryMetadata.h b/llvm/include/llvm/CodeGen/SanitizerBinaryMetadata.h new file mode 100644 index 0000000000000..6cf2e11aa911e --- /dev/null +++ b/llvm/include/llvm/CodeGen/SanitizerBinaryMetadata.h @@ -0,0 +1,26 @@ +//===- llvm/CodeGen/SanitizerBinaryMetadata.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_SANITIZERBINARYMETADATA_H +#define LLVM_CODEGEN_SANITIZERBINARYMETADATA_H + +#include "llvm/CodeGen/MachinePassManager.h" + +namespace llvm { + +class MachineSanitizerBinaryMetadataPass + : public PassInfoMixin<MachineSanitizerBinaryMetadataPass> { +public: + PreservedAnalyses run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM); + static bool isRequired() { return true; } +}; + +} // namespace llvm + +#endif // LLVM_CODEGEN_SANITIZERBINARYMETADATA_H diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index 3fd3cbb28bc3e..c7bc4320cf8f0 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -206,7 +206,7 @@ void initializeMachineOutlinerPass(PassRegistry &); void initializeMachinePipelinerPass(PassRegistry &); void initializeMachinePostDominatorTreeWrapperPassPass(PassRegistry &); void initializeMachineRegionInfoPassPass(PassRegistry &); -void initializeMachineSanitizerBinaryMetadataPass(PassRegistry &); +void initializeMachineSanitizerBinaryMetadataLegacyPass(PassRegistry &); void initializeMachineSchedulerLegacyPass(PassRegistry &); void initializeMachineSinkingLegacyPass(PassRegistry &); void initializeMachineTraceMetricsWrapperPassPass(PassRegistry &); diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h index a86dc8d632a4e..74cdc7d66810b 100644 --- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h +++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h @@ -75,6 +75,7 @@ #include "llvm/CodeGen/RenameIndependentSubregs.h" #include "llvm/CodeGen/ReplaceWithVeclib.h" #include "llvm/CodeGen/SafeStack.h" +#include "llvm/CodeGen/SanitizerBinaryMetadata.h" #include "llvm/CodeGen/SelectOptimize.h" #include "llvm/CodeGen/ShadowStackGCLowering.h" #include "llvm/CodeGen/SjLjEHPrepare.h" @@ -1002,7 +1003,7 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses( addPass(RemoveLoadsIntoFakeUsesPass()); addPass(StackMapLivenessPass()); addPass(LiveDebugValuesPass()); - addPass(MachineSanitizerBinaryMetadata()); + addPass(MachineSanitizerBinaryMetadataPass()); if (TM.Options.EnableMachineOutliner && getOptLevel() != CodeGenOptLevel::None && diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def index cab8108ed30f6..8fa21751392f3 100644 --- a/llvm/include/llvm/Passes/MachinePassRegistry.def +++ b/llvm/include/llvm/Passes/MachinePassRegistry.def @@ -149,6 +149,7 @@ MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass()) MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass()) MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass()) MACHINE_FUNCTION_PASS("machine-latecleanup", MachineLateInstrsCleanupPass()) +MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadataPass()) MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass(TM)) MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass()) MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass()) @@ -279,7 +280,6 @@ DUMMY_MACHINE_FUNCTION_PASS("lrshrink", LiveRangeShrinkPass) DUMMY_MACHINE_FUNCTION_PASS("machine-combiner", MachineCombinerPass) DUMMY_MACHINE_FUNCTION_PASS("static-data-splitter", StaticDataSplitter) DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass) -DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata) DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass) DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass) DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass) diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp index 195f84855e321..b2c9202cd6fe1 100644 --- a/llvm/lib/CodeGen/CodeGen.cpp +++ b/llvm/lib/CodeGen/CodeGen.cpp @@ -90,7 +90,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeMachineOptimizationRemarkEmitterPassPass(Registry); initializeMachineOutlinerPass(Registry); initializeMachinePipelinerPass(Registry); - initializeMachineSanitizerBinaryMetadataPass(Registry); + initializeMachineSanitizerBinaryMetadataLegacyPass(Registry); initializeModuloScheduleTestPass(Registry); initializeMachinePostDominatorTreeWrapperPassPass(Registry); initializeMachineRegionInfoPassPass(Registry); diff --git a/llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp b/llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp index 9002a70768401..125b4c7a4d993 100644 --- a/llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp +++ b/llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h" +#include "llvm/CodeGen/SanitizerBinaryMetadata.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionPass.h" @@ -20,34 +20,53 @@ #include "llvm/IR/MDBuilder.h" #include "llvm/InitializePasses.h" #include "llvm/Pass.h" +#include "llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h" #include <algorithm> using namespace llvm; namespace { -class MachineSanitizerBinaryMetadata : public MachineFunctionPass { +class MachineSanitizerBinaryMetadataLegacy : public MachineFunctionPass { public: static char ID; - MachineSanitizerBinaryMetadata(); + MachineSanitizerBinaryMetadataLegacy(); bool runOnMachineFunction(MachineFunction &F) override; }; + +struct MachineSanitizerBinaryMetadata { + bool run(MachineFunction &MF); +}; + } // namespace -INITIALIZE_PASS(MachineSanitizerBinaryMetadata, "machine-sanmd", +INITIALIZE_PASS(MachineSanitizerBinaryMetadataLegacy, "machine-sanmd", "Machine Sanitizer Binary Metadata", false, false) -char MachineSanitizerBinaryMetadata::ID = 0; +char MachineSanitizerBinaryMetadataLegacy::ID = 0; char &llvm::MachineSanitizerBinaryMetadataID = - MachineSanitizerBinaryMetadata::ID; + MachineSanitizerBinaryMetadataLegacy::ID; -MachineSanitizerBinaryMetadata::MachineSanitizerBinaryMetadata() +MachineSanitizerBinaryMetadataLegacy::MachineSanitizerBinaryMetadataLegacy() : MachineFunctionPass(ID) { - initializeMachineSanitizerBinaryMetadataPass( + initializeMachineSanitizerBinaryMetadataLegacyPass( *PassRegistry::getPassRegistry()); } -bool MachineSanitizerBinaryMetadata::runOnMachineFunction(MachineFunction &MF) { +bool MachineSanitizerBinaryMetadataLegacy::runOnMachineFunction( + MachineFunction &MF) { + return MachineSanitizerBinaryMetadata().run(MF); +} + +PreservedAnalyses +MachineSanitizerBinaryMetadataPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + if (!MachineSanitizerBinaryMetadata().run(MF)) + return PreservedAnalyses::all(); + return getMachineFunctionPassPreservedAnalyses(); +} + +bool MachineSanitizerBinaryMetadata::run(MachineFunction &MF) { MDNode *MD = MF.getFunction().getMetadata(LLVMContext::MD_pcsections); if (!MD) return false; diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index c566887d62952..e73c0e91e8578 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -148,6 +148,7 @@ #include "llvm/CodeGen/RemoveRedundantDebugValues.h" #include "llvm/CodeGen/RenameIndependentSubregs.h" #include "llvm/CodeGen/SafeStack.h" +#include "llvm/CodeGen/SanitizerBinaryMetadata.h" #include "llvm/CodeGen/SelectOptimize.h" #include "llvm/CodeGen/ShadowStackGCLowering.h" #include "llvm/CodeGen/SjLjEHPrepare.h" diff --git a/llvm/test/tools/llc/new-pm/pipeline.ll b/llvm/test/tools/llc/new-pm/pipeline.ll index d1a50642ea311..c1ed0203f83a4 100644 --- a/llvm/test/tools/llc/new-pm/pipeline.ll +++ b/llvm/test/tools/llc/new-pm/pipeline.ll @@ -1,5 +1,5 @@ ; RUN: llc -mtriple=x86_64-pc-linux-gnu -enable-new-pm -print-pipeline-passes -filetype=null %s | FileCheck %s ; CHECK: require<profile-summary>,require<collector-metadata> -; CHECK: MachineSanitizerBinaryMetadata +; CHECK: machine-sanmd _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits