brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 09991f6 Raw
49 lines · cpp
1//===- DXILUpgrade.cpp - Upgrade DXIL metadata to LLVM constructs ---------===//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#include "llvm/Transforms/Utils/DXILUpgrade.h"10#include "llvm/IR/Constants.h"11#include "llvm/IR/Metadata.h"12#include "llvm/IR/Module.h"13#include "llvm/Support/Debug.h"14 15using namespace llvm;16 17#define DEBUG_TYPE "dxil-upgrade"18 19static bool handleValVerMetadata(Module &M) {20  NamedMDNode *ValVer = M.getNamedMetadata("dx.valver");21  if (!ValVer)22    return false;23 24  LLVM_DEBUG({25    MDNode *N = ValVer->getOperand(0);26    auto X = mdconst::extract<ConstantInt>(N->getOperand(0))->getZExtValue();27    auto Y = mdconst::extract<ConstantInt>(N->getOperand(1))->getZExtValue();28    dbgs() << "DXIL: validation version: " << X << "." << Y << "\n";29  });30  // We don't need the validation version internally, so we drop it.31  ValVer->dropAllReferences();32  ValVer->eraseFromParent();33  return true;34}35 36PreservedAnalyses DXILUpgradePass::run(Module &M, ModuleAnalysisManager &AM) {37  PreservedAnalyses PA;38  // We never add, remove, or change functions here.39  PA.preserve<FunctionAnalysisManagerModuleProxy>();40  PA.preserveSet<AllAnalysesOn<Function>>();41 42  bool Changed = false;43  Changed |= handleValVerMetadata(M);44 45  if (!Changed)46    return PreservedAnalyses::all();47  return PA;48}49