StringRef fmt, size_t num_ops) const;
bool shouldPrintAsStr(char Specifier, Type *OpType) const;
- bool confirmSpirModule(Module &M) const;
- bool confirmOpenCLVersion200(Module &M) const;
bool lowerPrintfForGpu(Module &M);
void getAnalysisUsage(AnalysisUsage &AU) const override {
initializeAMDGPUPrintfRuntimeBindingPass(*PassRegistry::getPassRegistry());
}
-bool AMDGPUPrintfRuntimeBinding::confirmOpenCLVersion200(Module &M) const {
- NamedMDNode *OCLVersion = M.getNamedMetadata("opencl.ocl.version");
- if (!OCLVersion || OCLVersion->getNumOperands() != 1)
- return false;
- MDNode *Ver = OCLVersion->getOperand(0);
- if (Ver->getNumOperands() != 2)
- return false;
- ConstantInt *Major = mdconst::dyn_extract<ConstantInt>(Ver->getOperand(0));
- ConstantInt *Minor = mdconst::dyn_extract<ConstantInt>(Ver->getOperand(1));
- if (!Major || !Minor)
- return false;
- return Major->getZExtValue() == 2;
-}
-
void AMDGPUPrintfRuntimeBinding::getConversionSpecifiers(
SmallVectorImpl<char> &OpConvSpecifiers, StringRef Fmt,
size_t NumOps) const {
return ElemIType->getBitWidth() == 8;
}
-bool AMDGPUPrintfRuntimeBinding::confirmSpirModule(Module &M) const {
- NamedMDNode *SPIRVersion = M.getNamedMetadata("opencl.spir.version");
- return SPIRVersion ? true : false;
-}
-
bool AMDGPUPrintfRuntimeBinding::lowerPrintfForGpu(Module &M) {
LLVMContext &Ctx = M.getContext();
IRBuilder<> Builder(Ctx);