brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 102b13c Raw
46 lines · cpp
1//===- unittests/Passes/DoublerPlugin.cpp2//--------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#include "llvm/IR/Module.h"11#include "llvm/Passes/PassBuilder.h"12#include "llvm/Passes/PassPlugin.h"13 14using namespace llvm;15 16struct DoublerModulePass : public PassInfoMixin<DoublerModulePass> {17 18  // Double the value of the initializer19  PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM) {20    auto *GV = cast<GlobalVariable>(M.getNamedValue("doubleme"));21    auto *Init = GV->getInitializer();22    auto *Init2 = ConstantExpr::getAdd(Init, Init);23    GV->setInitializer(Init2);24 25    return PreservedAnalyses::none();26  }27 28  static void registerCallbacks(PassBuilder &PB) {29    PB.registerPipelineParsingCallback(30        [](StringRef Name, ModulePassManager &PM,31           ArrayRef<PassBuilder::PipelineElement> InnerPipeline) {32          if (Name == "doubler-pass") {33            PM.addPass(DoublerModulePass());34            return true;35          }36          return false;37        });38  }39};40 41extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK42llvmGetPassPluginInfo() {43  return {LLVM_PLUGIN_API_VERSION, "DoublerPlugin", "2.2-unit",44          DoublerModulePass::registerCallbacks};45}46