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,14 @@ } FunctionPass *createTargetRegisterAllocator(bool) override { return nullptr; } + void addCodeGenPrepare() override { + addPass(createDXILOpLoweringLegacyPass()); + addPass(createDXILPrepareModulePass()); + addPass(createDXILTranslateMetadataPass()); + if (TargetPassConfig::willCompleteCodeGenPipeline()) { + addPass(createDXILEmbedderPass()); + } + } }; DirectXTargetMachine::DirectXTargetMachine(const Target &T, const Triple &TT, @@ -91,12 +99,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()); - if (TargetPassConfig::willCompleteCodeGenPipeline()) { - PM.add(createDXILEmbedderPass()); - } + TargetPassConfig *PassConfig = createPassConfig(PM); + PassConfig->addCodeGenPrepare(); + switch (FileType) { case CGFT_AssemblyFile: PM.add(createPrintModulePass(Out, "", true));