diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2025-12-06 19:56:45 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2025-12-06 20:08:43 +0000 |
| commit | 3f709e42e3be0f28a88ca3e77663a02b52c914f4 (patch) | |
| tree | 948796bf3bf7e164373caf6c31f9f128ca85fd8c /llvm/lib/Target/RegisterTargetPassConfigCallback.cpp | |
| parent | 32a711e1c447004eb1fd015925f305ed1d8426de (diff) | |
Diffstat (limited to 'llvm/lib/Target/RegisterTargetPassConfigCallback.cpp')
| -rw-r--r-- | llvm/lib/Target/RegisterTargetPassConfigCallback.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/lib/Target/RegisterTargetPassConfigCallback.cpp b/llvm/lib/Target/RegisterTargetPassConfigCallback.cpp new file mode 100644 index 000000000000..a80b8b825b18 --- /dev/null +++ b/llvm/lib/Target/RegisterTargetPassConfigCallback.cpp @@ -0,0 +1,39 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +/// +/// This file contains the registry for PassConfigCallbacks that enable changes +/// to the TargetPassConfig during the initialization of TargetMachine. +/// +//===----------------------------------------------------------------------===// + +#include "llvm/Target/RegisterTargetPassConfigCallback.h" + +namespace llvm { +// TargetPassConfig callbacks +static SmallVector<RegisterTargetPassConfigCallback *, 1> + TargetPassConfigCallbacks{}; + +void invokeGlobalTargetPassConfigCallbacks(TargetMachine &TM, + PassManagerBase &PM, + TargetPassConfig *PassConfig) { + for (const RegisterTargetPassConfigCallback *Reg : TargetPassConfigCallbacks) + Reg->Callback(TM, PM, PassConfig); +} + +RegisterTargetPassConfigCallback::RegisterTargetPassConfigCallback( + PassConfigCallback &&C) + : Callback(std::move(C)) { + TargetPassConfigCallbacks.push_back(this); +} + +RegisterTargetPassConfigCallback::~RegisterTargetPassConfigCallback() { + const auto &It = find(TargetPassConfigCallbacks, this); + if (It != TargetPassConfigCallbacks.end()) + TargetPassConfigCallbacks.erase(It); +} +} // namespace llvm |
