brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · a80b8b8 Raw
40 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8///9/// This file contains the registry for PassConfigCallbacks that enable changes10/// to the TargetPassConfig during the initialization of TargetMachine.11///12//===----------------------------------------------------------------------===//13 14#include "llvm/Target/RegisterTargetPassConfigCallback.h"15 16namespace llvm {17// TargetPassConfig callbacks18static SmallVector<RegisterTargetPassConfigCallback *, 1>19    TargetPassConfigCallbacks{};20 21void invokeGlobalTargetPassConfigCallbacks(TargetMachine &TM,22                                           PassManagerBase &PM,23                                           TargetPassConfig *PassConfig) {24  for (const RegisterTargetPassConfigCallback *Reg : TargetPassConfigCallbacks)25    Reg->Callback(TM, PM, PassConfig);26}27 28RegisterTargetPassConfigCallback::RegisterTargetPassConfigCallback(29    PassConfigCallback &&C)30    : Callback(std::move(C)) {31  TargetPassConfigCallbacks.push_back(this);32}33 34RegisterTargetPassConfigCallback::~RegisterTargetPassConfigCallback() {35  const auto &It = find(TargetPassConfigCallbacks, this);36  if (It != TargetPassConfigCallbacks.end())37    TargetPassConfigCallbacks.erase(It);38}39} // namespace llvm40