20#define DEBUG_TYPE "dxil-metadata-analysis"
27 const Triple &TT = M.getTargetTriple();
31 NamedMDNode *ValidatorVerNode = M.getNamedMetadata(
"dx.valver");
32 if (ValidatorVerNode) {
33 auto *ValVerMD = cast<MDNode>(ValidatorVerNode->
getOperand(0));
34 auto *MajorMD = mdconst::extract<ConstantInt>(ValVerMD->getOperand(0));
35 auto *MinorMD = mdconst::extract<ConstantInt>(ValVerMD->getOperand(1));
37 VersionTuple(MajorMD->getZExtValue(), MinorMD->getZExtValue());
41 for (
auto &
F : M.functions()) {
42 if (!
F.hasFnAttribute(
"hlsl.shader"))
47 Attribute EntryAttr =
F.getFnAttribute(
"hlsl.shader");
49 "Invalid value specified for HLSL function attribute hlsl.shader");
51 Triple T(
"",
"",
"", EntryProfile);
55 F.getFnAttribute(
"hlsl.numthreads").getValueAsString();
56 if (!NumThreadsStr.
empty()) {
58 NumThreadsStr.
split(NumThreadsVec,
',');
59 assert(NumThreadsVec.
size() == 3 &&
"Invalid numthreads specified");
62 llvm::to_integer(NumThreadsVec[0], EFP.
NumThreadsX, 10);
63 assert(
Success &&
"Failed to parse X component of numthreads");
65 assert(
Success &&
"Failed to parse Y component of numthreads");
67 assert(
Success &&
"Failed to parse Z component of numthreads");
77 OS <<
"Target Shader Stage : "
81 OS <<
" " << EP.Entry->getName() <<
"\n";
82 OS <<
" Function Shader Stage : "
84 OS <<
" NumThreads: " << EP.NumThreadsX <<
"," << EP.NumThreadsY <<
","
85 << EP.NumThreadsZ <<
"\n";
131 OS <<
"No module metadata info has been built!\n";
134 MetadataInfo->print(
dbgs());
137#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
143 "DXIL Module Metadata analysis",
false,
true)
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file implements a class to represent arbitrary precision integral constant values and operations...
#define LLVM_DUMP_METHOD
Mark debug helper function definitions like dump() that should not be stripped from debug builds.
This file contains the declarations for the subclasses of Constant, which represent the different fla...
Module.h This file contains the declarations for the Module class.
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
A container for analyses that lazily runs them and caches their results.
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
Represent the analysis usage information of a pass.
void setPreservesAll()
Set by analyses that do not transform their input at all.
LLVM_ABI StringRef getValueAsString() const
Return the attribute's value as a string.
bool isValid() const
Return true if the attribute is any kind of attribute.
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
A Module instance is used to store all the information related to an LLVM module.
LLVM_ABI MDNode * getOperand(unsigned i) const
A set of analyses that are preserved following a run of a transformation pass.
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
std::pair< StringRef, StringRef > split(char Separator) const
Split into two substrings around the first occurrence of a separator character.
constexpr bool empty() const
empty - Check if the string is empty.
Triple - Helper class for working with autoconf configuration names.
static LLVM_ABI StringRef getEnvironmentTypeName(EnvironmentType Kind)
Get the canonical name for the Kind environment.
Represents a version number in the form major[.minor[.subminor[.build]]].
LLVM_ABI std::string getAsString() const
Retrieve a string representation of the version number.
This class implements an extremely fast bulk output stream that can only output to a stream.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
A special type used by analysis passes to provide an address that identifies that particular analysis...
Triple::EnvironmentType ShaderStage