- Notifications
You must be signed in to change notification settings - Fork 15.1k
[CodeGen][NPM] Port RemoveLoadsIntoFakeUses to NPM #130068
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
optimisan merged 2 commits into main from users/optimisan/03-06-_codegen_npm_port_removeloadsintofakeuses_to_npm Apr 14, 2025
Merged
[CodeGen][NPM] Port RemoveLoadsIntoFakeUses to NPM #130068
optimisan merged 2 commits into main from users/optimisan/03-06-_codegen_npm_port_removeloadsintofakeuses_to_npm Apr 14, 2025
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This was referenced Mar 6, 2025
This was referenced Mar 6, 2025
740a240 to b4d0fba Compare e986593 to f06e7f4 Compare b4d0fba to b8c2186 Compare f06e7f4 to ffd8728 Compare b8c2186 to 02a9dbc Compare ffd8728 to 49cfcf2 Compare | @llvm/pr-subscribers-backend-x86 Author: Akshat Oke (optimisan) ChangesFull diff: https://github.com/llvm/llvm-project/pull/130068.diff 8 Files Affected:
diff --git a/llvm/include/llvm/CodeGen/RemoveLoadsIntoFakeUses.h b/llvm/include/llvm/CodeGen/RemoveLoadsIntoFakeUses.h new file mode 100644 index 0000000000000..bbd5b8b430bf6 --- /dev/null +++ b/llvm/include/llvm/CodeGen/RemoveLoadsIntoFakeUses.h @@ -0,0 +1,30 @@ +//===- llvm/CodeGen/RemoveLoadsIntoFakeUses.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_REMOVELOADSINTOFAKEUSES_H +#define LLVM_CODEGEN_REMOVELOADSINTOFAKEUSES_H + +#include "llvm/CodeGen/MachinePassManager.h" + +namespace llvm { + +class RemoveLoadsIntoFakeUsesPass + : public PassInfoMixin<RemoveLoadsIntoFakeUsesPass> { +public: + PreservedAnalyses run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM); + + MachineFunctionProperties getRequiredProperties() const { + return MachineFunctionProperties().set( + MachineFunctionProperties::Property::NoVRegs); + } +}; + +} // namespace llvm + +#endif // LLVM_CODEGEN_REMOVELOADSINTOFAKEUSES_H diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index e5bffde815117..3fd3cbb28bc3e 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -265,7 +265,7 @@ void initializeRegionOnlyViewerPass(PassRegistry &); void initializeRegionPrinterPass(PassRegistry &); void initializeRegionViewerPass(PassRegistry &); void initializeRegisterCoalescerLegacyPass(PassRegistry &); -void initializeRemoveLoadsIntoFakeUsesPass(PassRegistry &); +void initializeRemoveLoadsIntoFakeUsesLegacyPass(PassRegistry &); void initializeRemoveRedundantDebugValuesLegacyPass(PassRegistry &); void initializeRenameIndependentSubregsLegacyPass(PassRegistry &); void initializeReplaceWithVeclibLegacyPass(PassRegistry &); diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h index aab2c58ac0f78..a86dc8d632a4e 100644 --- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h +++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h @@ -70,6 +70,7 @@ #include "llvm/CodeGen/RegUsageInfoPropagate.h" #include "llvm/CodeGen/RegisterCoalescerPass.h" #include "llvm/CodeGen/RegisterUsageInfo.h" +#include "llvm/CodeGen/RemoveLoadsIntoFakeUses.h" #include "llvm/CodeGen/RemoveRedundantDebugValues.h" #include "llvm/CodeGen/RenameIndependentSubregs.h" #include "llvm/CodeGen/ReplaceWithVeclib.h" @@ -998,6 +999,7 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses( addPass(FuncletLayoutPass()); + addPass(RemoveLoadsIntoFakeUsesPass()); addPass(StackMapLivenessPass()); addPass(LiveDebugValuesPass()); addPass(MachineSanitizerBinaryMetadata()); diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def index 9300f6935aa90..cab8108ed30f6 100644 --- a/llvm/include/llvm/Passes/MachinePassRegistry.def +++ b/llvm/include/llvm/Passes/MachinePassRegistry.def @@ -181,6 +181,7 @@ MACHINE_FUNCTION_PASS("reg-usage-collector", RegUsageInfoCollectorPass()) MACHINE_FUNCTION_PASS("reg-usage-propagation", RegUsageInfoPropagationPass()) MACHINE_FUNCTION_PASS("register-coalescer", RegisterCoalescerPass()) MACHINE_FUNCTION_PASS("rename-independent-subregs", RenameIndependentSubregsPass()) +MACHINE_FUNCTION_PASS("remove-loads-into-fake-uses", RemoveLoadsIntoFakeUsesPass()) MACHINE_FUNCTION_PASS("remove-redundant-debug-values", RemoveRedundantDebugValuesPass()) MACHINE_FUNCTION_PASS("require-all-machine-function-properties", RequireAllMachineFunctionPropertiesPass()) @@ -292,7 +293,6 @@ DUMMY_MACHINE_FUNCTION_PASS("ra-pbqp", RAPBQPPass) DUMMY_MACHINE_FUNCTION_PASS("regalloc", RegAllocPass) DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass) DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass) -DUMMY_MACHINE_FUNCTION_PASS("remove-loads-into-fake-uses", RemoveLoadsIntoFakeUsesPass) DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass) DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass) DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass) diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp index 80b0a4cb3283d..195f84855e321 100644 --- a/llvm/lib/CodeGen/CodeGen.cpp +++ b/llvm/lib/CodeGen/CodeGen.cpp @@ -117,7 +117,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeRegUsageInfoCollectorLegacyPass(Registry); initializeRegUsageInfoPropagationLegacyPass(Registry); initializeRegisterCoalescerLegacyPass(Registry); - initializeRemoveLoadsIntoFakeUsesPass(Registry); + initializeRemoveLoadsIntoFakeUsesLegacyPass(Registry); initializeRemoveRedundantDebugValuesLegacyPass(Registry); initializeRenameIndependentSubregsLegacyPass(Registry); initializeSafeStackLegacyPassPass(Registry); diff --git a/llvm/lib/CodeGen/RemoveLoadsIntoFakeUses.cpp b/llvm/lib/CodeGen/RemoveLoadsIntoFakeUses.cpp index 384a049acfe34..6276d4af549c9 100644 --- a/llvm/lib/CodeGen/RemoveLoadsIntoFakeUses.cpp +++ b/llvm/lib/CodeGen/RemoveLoadsIntoFakeUses.cpp @@ -22,11 +22,13 @@ /// //===----------------------------------------------------------------------===// +#include "llvm/CodeGen/RemoveLoadsIntoFakeUses.h" #include "llvm/ADT/PostOrderIterator.h" #include "llvm/ADT/Statistic.h" #include "llvm/CodeGen/LiveRegUnits.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/MachinePassManager.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/TargetSubtargetInfo.h" #include "llvm/IR/Function.h" @@ -41,12 +43,13 @@ using namespace llvm; STATISTIC(NumLoadsDeleted, "Number of dead load instructions deleted"); STATISTIC(NumFakeUsesDeleted, "Number of FAKE_USE instructions deleted"); -class RemoveLoadsIntoFakeUses : public MachineFunctionPass { +class RemoveLoadsIntoFakeUsesLegacy : public MachineFunctionPass { public: static char ID; - RemoveLoadsIntoFakeUses() : MachineFunctionPass(ID) { - initializeRemoveLoadsIntoFakeUsesPass(*PassRegistry::getPassRegistry()); + RemoveLoadsIntoFakeUsesLegacy() : MachineFunctionPass(ID) { + initializeRemoveLoadsIntoFakeUsesLegacyPass( + *PassRegistry::getPassRegistry()); } void getAnalysisUsage(AnalysisUsage &AU) const override { @@ -66,21 +69,44 @@ class RemoveLoadsIntoFakeUses : public MachineFunctionPass { bool runOnMachineFunction(MachineFunction &MF) override; }; -char RemoveLoadsIntoFakeUses::ID = 0; -char &llvm::RemoveLoadsIntoFakeUsesID = RemoveLoadsIntoFakeUses::ID; +struct RemoveLoadsIntoFakeUses { + bool run(MachineFunction &MF); +}; + +char RemoveLoadsIntoFakeUsesLegacy::ID = 0; +char &llvm::RemoveLoadsIntoFakeUsesID = RemoveLoadsIntoFakeUsesLegacy::ID; -INITIALIZE_PASS_BEGIN(RemoveLoadsIntoFakeUses, DEBUG_TYPE, +INITIALIZE_PASS_BEGIN(RemoveLoadsIntoFakeUsesLegacy, DEBUG_TYPE, "Remove Loads Into Fake Uses", false, false) -INITIALIZE_PASS_END(RemoveLoadsIntoFakeUses, DEBUG_TYPE, +INITIALIZE_PASS_END(RemoveLoadsIntoFakeUsesLegacy, DEBUG_TYPE, "Remove Loads Into Fake Uses", false, false) -bool RemoveLoadsIntoFakeUses::runOnMachineFunction(MachineFunction &MF) { +bool RemoveLoadsIntoFakeUsesLegacy::runOnMachineFunction(MachineFunction &MF) { + if (skipFunction(MF.getFunction())) + return false; + return RemoveLoadsIntoFakeUses().run(MF); +} + +PreservedAnalyses +RemoveLoadsIntoFakeUsesPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + MFPropsModifier _(*this, MF); + + if (!RemoveLoadsIntoFakeUses().run(MF)) + return PreservedAnalyses::all(); + + auto PA = getMachineFunctionPassPreservedAnalyses(); + PA.preserveSet<CFGAnalyses>(); + return PA; +} + +bool RemoveLoadsIntoFakeUses::run(MachineFunction &MF) { // Skip this pass if we would use VarLoc-based LDV, as there may be DBG_VALUE // instructions of the restored values that would become invalid. if (!MF.useDebugInstrRef()) return false; // Only run this for functions that have fake uses. - if (!MF.hasFakeUses() || skipFunction(MF.getFunction())) + if (!MF.hasFakeUses()) return false; bool AnyChanges = false; diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 3de29e994422e..c566887d62952 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -144,6 +144,7 @@ #include "llvm/CodeGen/RegUsageInfoPropagate.h" #include "llvm/CodeGen/RegisterCoalescerPass.h" #include "llvm/CodeGen/RegisterUsageInfo.h" +#include "llvm/CodeGen/RemoveLoadsIntoFakeUses.h" #include "llvm/CodeGen/RemoveRedundantDebugValues.h" #include "llvm/CodeGen/RenameIndependentSubregs.h" #include "llvm/CodeGen/SafeStack.h" diff --git a/llvm/test/CodeGen/X86/fake-use-remove-loads.mir b/llvm/test/CodeGen/X86/fake-use-remove-loads.mir index 3f67f03c9a63d..aa9839d2700af 100644 --- a/llvm/test/CodeGen/X86/fake-use-remove-loads.mir +++ b/llvm/test/CodeGen/X86/fake-use-remove-loads.mir @@ -3,6 +3,8 @@ # remove-loads-into-fake-uses pass, and that if the function does not use # instruction referencing then no changes are made. # RUN: llc %s -run-pass remove-loads-into-fake-uses -mtriple=x86_64-unknown-linux -debug-only=remove-loads-into-fake-uses 2>&1 -o - | FileCheck %s +# RUN: llc %s -passes remove-loads-into-fake-uses -mtriple=x86_64-unknown-linux -debug-only=remove-loads-into-fake-uses 2>&1 -o - | FileCheck %s + # REQUIRES: asserts # ## We verify that: |
arsenm approved these changes Mar 10, 2025
cdevadas approved these changes Mar 10, 2025
Comment on lines 86 to 88
| return false; | ||
| return RemoveLoadsIntoFakeUses().run(MF); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggested change
| return false; | |
| return RemoveLoadsIntoFakeUses().run(MF); | |
| return false; | |
| return RemoveLoadsIntoFakeUses().run(MF); |
02a9dbc to 917f5db Compare 49cfcf2 to 10b5b57 Compare 917f5db to 46a9c68 Compare Base automatically changed from users/optimisan/preemit/port-branch-relaxation to main April 14, 2025 04:49
10b5b57 to edd9320 Compare Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.

No description provided.