This commit is contained in:
Xiang Li 2018-10-12 15:40:54 -07:00 коммит произвёл GitHub
Родитель c9a4a44714
Коммит 362defac90
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 23 добавлений и 11 удалений

Просмотреть файл

@ -359,6 +359,10 @@ bool VerifyRootSignatureWithShaderPSV(_In_ const DxilVersionedRootSignatureDesc
_In_ uint32_t PSVSize,
_In_ llvm::raw_ostream &DiagStream);
// standalone verification
bool VerifyRootSignature(_In_ const DxilVersionedRootSignatureDesc *pDesc,
_In_ llvm::raw_ostream &DiagStream);
} // namespace hlsl
#endif // __DXC_ROOTSIGNATURE__

Просмотреть файл

@ -1679,4 +1679,17 @@ bool VerifyRootSignatureWithShaderPSV(const DxilVersionedRootSignatureDesc *pDes
return true;
}
bool VerifyRootSignature(_In_ const DxilVersionedRootSignatureDesc *pDesc,
_In_ llvm::raw_ostream &DiagStream) {
try {
RootSignatureVerifier RSV;
DiagnosticPrinterRawOStream DiagPrinter(DiagStream);
RSV.VerifyRootSignature(pDesc, DiagPrinter);
} catch (...) {
return false;
}
return true;
}
} // namespace hlsl

Просмотреть файл

@ -191,14 +191,9 @@ void PrintUnescapedString(StringRef Name, raw_ostream &Out) {
std::unique_ptr<llvm::Module> LoadModuleFromBitcode(llvm::MemoryBuffer *MB,
llvm::LLVMContext &Ctx,
std::string &DiagStr) {
raw_string_ostream DiagStream(DiagStr);
llvm::DiagnosticPrinterRawOStream DiagPrinter(DiagStream);
LLVMContext::DiagnosticHandlerTy OrigHandler = Ctx.getDiagnosticHandler();
void *OrigContext = Ctx.getDiagnosticContext();
Ctx.setDiagnosticHandler(PrintDiagnosticHandler, &DiagPrinter, true);
// Note: the DiagStr is not used.
ErrorOr<std::unique_ptr<llvm::Module>> pModule(
llvm::parseBitcodeFile(MB->getMemBufferRef(), Ctx));
Ctx.setDiagnosticHandler(OrigHandler, OrigContext);
if (std::error_code ec = pModule.getError()) {
return nullptr;
}
@ -351,23 +346,23 @@ llvm::Instruction *SkipAllocas(llvm::Instruction *I) {
llvm::Instruction *FindAllocaInsertionPt(llvm::Instruction* I) {
Function *F = I->getParent()->getParent();
if (F)
return F->getEntryBlock().getFirstInsertionPt();
return &*F->getEntryBlock().getFirstInsertionPt();
else // BB with no parent function
return I->getParent()->getFirstInsertionPt();
return &*I->getParent()->getFirstInsertionPt();
}
llvm::Instruction *FindAllocaInsertionPt(llvm::Function* F) {
return F->getEntryBlock().getFirstInsertionPt();
return &*F->getEntryBlock().getFirstInsertionPt();
}
llvm::Instruction *FirstNonAllocaInsertionPt(llvm::Instruction* I) {
return SkipAllocas(FindAllocaInsertionPt(I));
}
llvm::Instruction *FirstNonAllocaInsertionPt(llvm::BasicBlock* BB) {
return SkipAllocas(
BB->getFirstInsertionPt());
&*BB->getFirstInsertionPt());
}
llvm::Instruction *FirstNonAllocaInsertionPt(llvm::Function* F) {
return SkipAllocas(
F->getEntryBlock().getFirstInsertionPt());
&*F->getEntryBlock().getFirstInsertionPt());
}
bool IsHLSLObjectType(llvm::Type *Ty) {