diff --git a/llvm/lib/Target/DirectX/DirectXAsmPrinter.cpp b/llvm/lib/Target/DirectX/DirectXAsmPrinter.cpp --- a/llvm/lib/Target/DirectX/DirectXAsmPrinter.cpp +++ b/llvm/lib/Target/DirectX/DirectXAsmPrinter.cpp @@ -46,6 +46,8 @@ // Skip the LLVM metadata if (GV->getSection() == "llvm.metadata") return; + if (!GV->hasSection()) + return; SectionKind GVKind = TargetLoweringObjectFile::getKindForGlobal(GV, TM); MCSection *TheSection = getObjFileLowering().SectionForGlobal(GV, GVKind, TM); OutStreamer->switchSection(TheSection); diff --git a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp --- a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp +++ b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp @@ -67,6 +67,11 @@ } FunctionPass *createTargetRegisterAllocator(bool) override { return nullptr; } + void addCodeGenPrepare() override { + addPass(createDXILOpLoweringLegacyPass()); + addPass(createDXILPrepareModulePass()); + addPass(createDXILTranslateMetadataPass()); + } }; DirectXTargetMachine::DirectXTargetMachine(const Target &T, const Triple &TT, @@ -91,9 +96,9 @@ PassManagerBase &PM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, bool DisableVerify, MachineModuleInfoWrapperPass *MMIWP) { - PM.add(createDXILOpLoweringLegacyPass()); - PM.add(createDXILPrepareModulePass()); - PM.add(createDXILTranslateMetadataPass()); + TargetPassConfig *PassConfig = createPassConfig(PM); + PassConfig->addCodeGenPrepare(); + if (TargetPassConfig::willCompleteCodeGenPipeline()) { PM.add(createDXILEmbedderPass()); }