48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
//===- DXILUpgrade.cpp - Upgrade DXIL metadata to LLVM constructs ---------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Transforms/Utils/DXILUpgrade.h"
|
|
#include "llvm/IR/Constants.h"
|
|
#include "llvm/IR/Metadata.h"
|
|
#include "llvm/IR/Module.h"
|
|
#include "llvm/Support/Debug.h"
|
|
|
|
using namespace llvm;
|
|
|
|
#define DEBUG_TYPE "dxil-upgrade"
|
|
|
|
static bool handleValVerMetadata(Module &M) {
|
|
NamedMDNode *ValVer = M.getNamedMetadata("dx.valver");
|
|
if (!ValVer)
|
|
return false;
|
|
|
|
LLVM_DEBUG({
|
|
MDNode *N = ValVer->getOperand(0);
|
|
auto X = mdconst::extract<ConstantInt>(N->getOperand(0))->getZExtValue();
|
|
auto Y = mdconst::extract<ConstantInt>(N->getOperand(1))->getZExtValue();
|
|
dbgs() << "DXIL: validation version: " << X << "." << Y << "\n";
|
|
});
|
|
// We don't need the validation version internally, so we drop it.
|
|
ValVer->dropAllReferences();
|
|
ValVer->eraseFromParent();
|
|
return true;
|
|
}
|
|
|
|
PreservedAnalyses DXILUpgradePass::run(Module &M, ModuleAnalysisManager &AM) {
|
|
PreservedAnalyses PA;
|
|
// We never add, remove, or change functions here.
|
|
PA.preserve<FunctionAnalysisManagerModuleProxy>();
|
|
PA.preserveSet<AllAnalysesOn<Function>>();
|
|
|
|
bool Changed = false;
|
|
Changed |= handleValVerMetadata(M);
|
|
|
|
if (!Changed)
|
|
return PreservedAnalyses::all();
|
|
return PA;
|
|
}
|