Path: blob/main/contrib/llvm-project/llvm/lib/Target/RegisterTargetPassConfigCallback.cpp
213765 views
//===----------------------------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7///8/// This file contains the registry for PassConfigCallbacks that enable changes9/// to the TargetPassConfig during the initialization of TargetMachine.10///11//===----------------------------------------------------------------------===//1213#include "llvm/Target/RegisterTargetPassConfigCallback.h"1415namespace llvm {16// TargetPassConfig callbacks17static SmallVector<RegisterTargetPassConfigCallback *, 1>18TargetPassConfigCallbacks{};1920void invokeGlobalTargetPassConfigCallbacks(TargetMachine &TM,21PassManagerBase &PM,22TargetPassConfig *PassConfig) {23for (const RegisterTargetPassConfigCallback *Reg : TargetPassConfigCallbacks)24Reg->Callback(TM, PM, PassConfig);25}2627RegisterTargetPassConfigCallback::RegisterTargetPassConfigCallback(28PassConfigCallback &&C)29: Callback(std::move(C)) {30TargetPassConfigCallbacks.push_back(this);31}3233RegisterTargetPassConfigCallback::~RegisterTargetPassConfigCallback() {34const auto &It = find(TargetPassConfigCallbacks, this);35if (It != TargetPassConfigCallbacks.end())36TargetPassConfigCallbacks.erase(It);37}38} // namespace llvm394041