diff --git a/llvm/include/llvm/ADT/Triple.h b/llvm/include/llvm/ADT/Triple.h index 728b24e2357693..acb649ed7fbd70 100644 --- a/llvm/include/llvm/ADT/Triple.h +++ b/llvm/include/llvm/ADT/Triple.h @@ -261,6 +261,7 @@ class Triple { UnknownObjectFormat, COFF, + DXContainer, ELF, GOFF, MachO, diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h index fa8c0ca75cf309..861681551678d1 100644 --- a/llvm/include/llvm/MC/MCContext.h +++ b/llvm/include/llvm/MC/MCContext.h @@ -76,7 +76,15 @@ class MCContext { using DiagHandlerTy = std::function &)>; - enum Environment { IsMachO, IsELF, IsGOFF, IsCOFF, IsWasm, IsXCOFF }; + enum Environment { + IsMachO, + IsELF, + IsGOFF, + IsCOFF, + IsWasm, + IsXCOFF, + IsDXContainer + }; private: Environment Env; diff --git a/llvm/include/llvm/MC/TargetRegistry.h b/llvm/include/llvm/MC/TargetRegistry.h index 954f7d69b033d9..e2d90b9169e0bd 100644 --- a/llvm/include/llvm/MC/TargetRegistry.h +++ b/llvm/include/llvm/MC/TargetRegistry.h @@ -530,6 +530,8 @@ class Target { switch (T.getObjectFormat()) { case Triple::UnknownObjectFormat: llvm_unreachable("Unknown object format"); + case Triple::DXContainer: + llvm_unreachable("DXContainer is unsupported through MC"); case Triple::COFF: assert(T.isOSWindows() && "only Windows COFF is supported"); S = COFFStreamerCtorFn(Ctx, std::move(TAB), std::move(OW), diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index d203fab3155a6c..8a1652478aaed2 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -4870,6 +4870,9 @@ static const char *getSectionNameForBitcode(const Triple &T) { case Triple::XCOFF: llvm_unreachable("XCOFF is not yet implemented"); break; + case Triple::DXContainer: + llvm_unreachable("DXContainer is not yet implemented"); + break; } llvm_unreachable("Unimplemented ObjectFormatType"); } @@ -4889,6 +4892,9 @@ static const char *getSectionNameForCommandline(const Triple &T) { case Triple::XCOFF: llvm_unreachable("XCOFF is not yet implemented"); break; + case Triple::DXContainer: + llvm_unreachable("DXC is not yet implemented"); + break; } llvm_unreachable("Unimplemented ObjectFormatType"); } diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index c6fb7bf69a47c6..1ebd80d86f3fc8 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -107,6 +107,9 @@ MCContext::MCContext(const Triple &TheTriple, const MCAsmInfo *mai, case Triple::GOFF: Env = IsGOFF; break; + case Triple::DXContainer: + Env = IsDXContainer; + break; case Triple::UnknownObjectFormat: report_fatal_error("Cannot initialize MC for unknown object file format."); break; @@ -248,6 +251,8 @@ MCSymbol *MCContext::createSymbolImpl(const StringMapEntry *Name, return new (Name, *this) MCSymbolWasm(Name, IsTemporary); case MCContext::IsXCOFF: return createXCOFFSymbolImpl(Name, IsTemporary); + case MCContext::IsDXContainer: + break; } return new (Name, *this) MCSymbol(MCSymbol::SymbolKindUnset, Name, IsTemporary); diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp index 73c3eed6ec3e3a..3da477d90887a3 100644 --- a/llvm/lib/MC/MCObjectFileInfo.cpp +++ b/llvm/lib/MC/MCObjectFileInfo.cpp @@ -1038,6 +1038,8 @@ void MCObjectFileInfo::initMCObjectFileInfo(MCContext &MCCtx, bool PIC, case MCContext::IsXCOFF: initXCOFFMCObjectFileInfo(TheTriple); break; + case MCContext::IsDXContainer: + break; } } @@ -1054,6 +1056,7 @@ MCSection *MCObjectFileInfo::getDwarfComdatSection(const char *Name, case Triple::COFF: case Triple::GOFF: case Triple::XCOFF: + case Triple::DXContainer: case Triple::UnknownObjectFormat: report_fatal_error("Cannot get DWARF comdat section for this object file " "format: not implemented."); diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index fda9b1f8be2657..9632f00379bfd1 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -798,6 +798,9 @@ AsmParser::AsmParser(SourceMgr &SM, MCContext &Ctx, MCStreamer &Out, case MCContext::IsXCOFF: PlatformParser.reset(createXCOFFAsmParser()); break; + case MCContext::IsDXContainer: + llvm_unreachable("DXContainer is not supported yet"); + break; } PlatformParser->Initialize(*this); diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp index ef5152eb302bf8..e220f5368ccd44 100644 --- a/llvm/lib/Support/Triple.cpp +++ b/llvm/lib/Support/Triple.cpp @@ -743,6 +743,7 @@ static StringRef getObjectFormatTypeName(Triple::ObjectFormatType Kind) { case Triple::MachO: return "macho"; case Triple::Wasm: return "wasm"; case Triple::XCOFF: return "xcoff"; + case Triple::DXContainer: return "dxcontainer"; } llvm_unreachable("unknown object format type"); } @@ -830,7 +831,7 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) { return Triple::UnknownObjectFormat; case Triple::dxil: - return Triple::UnknownObjectFormat; + return Triple::DXContainer; } llvm_unreachable("unknown architecture"); } diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index bc04be657b480f..0accc9e8cb5934 100644 --- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -6380,6 +6380,7 @@ bool ARMAsmParser::parsePrefix(ARMMCExpr::VariantKind &RefKind) { break; case MCContext::IsGOFF: case MCContext::IsXCOFF: + case MCContext::IsDXContainer: llvm_unreachable("unexpected object format"); break; } diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp index a3a73006a3c78f..a02c0ec7d7ea0c 100644 --- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -2106,6 +2106,7 @@ StringRef ModuleAddressSanitizer::getGlobalMetadataSection() const { case Triple::Wasm: case Triple::GOFF: case Triple::XCOFF: + case Triple::DXContainer: report_fatal_error( "ModuleAddressSanitizer not implemented for object file format"); case Triple::UnknownObjectFormat: diff --git a/llvm/unittests/ADT/TripleTest.cpp b/llvm/unittests/ADT/TripleTest.cpp index ca3163f43883ed..936796a4a1c0fb 100644 --- a/llvm/unittests/ADT/TripleTest.cpp +++ b/llvm/unittests/ADT/TripleTest.cpp @@ -1682,6 +1682,9 @@ TEST(TripleTest, FileFormat) { Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf")); EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat()); + EXPECT_EQ(Triple::DXContainer, + Triple("dxil-unknown-shadermodel").getObjectFormat()); + Triple T = Triple(""); T.setObjectFormat(Triple::ELF); EXPECT_EQ(Triple::ELF, T.getObjectFormat());