Author: Chris B Date: 2025-08-12T17:33:42-05:00 New Revision: e852d2d157ff0c5cb8dd1ec68a7861b3b093c166
URL: https://github.com/llvm/llvm-project/commit/e852d2d157ff0c5cb8dd1ec68a7861b3b093c166 DIFF: https://github.com/llvm/llvm-project/commit/e852d2d157ff0c5cb8dd1ec68a7861b3b093c166.diff LOG: Revert "[DirectX][objdump] Add support for printing signatures (#152531)" This reverts commit 9526d3b0b92e9ce1a537227abdab4801488343a6. Added: Modified: llvm/include/llvm/Object/DXContainer.h llvm/tools/llvm-objdump/DXContainerDump.cpp Removed: llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml ################################################################################ diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 93d39dabae4b9..ad1b2361ff064 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -603,8 +603,6 @@ class LLVM_ABI DXContainerObjectFile : public ObjectFile { } public: - const DXContainer &getDXContainer() const { return Container; } - static bool classof(const Binary *v) { return v->isDXContainer(); } Expected<StringRef> getSymbolName(DataRefImpl) const override; diff --git a/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml b/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml deleted file mode 100644 index 7cc11af251182..0000000000000 --- a/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml +++ /dev/null @@ -1,167 +0,0 @@ -# RUN: yaml2obj %s -o %t -# RUN: llvm-objdump -p %t | FileCheck %s --match-full-lines --strict-whitespace - -# This test covers llvm-objdump printing private headers for the ISG1, OSG1, and -# PSG1 "parts" of the DX container file format. The test uses a few absurdly -# large values and long string names to ensure that the columns in the printed -# table widen correctly. - ---- !dxcontainer -Header: - Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] - Version: - Major: 1 - Minor: 0 - FileSize: 630 - PartCount: 3 - PartOffsets: [ 64, 124, 184 ] -Parts: - - Name: ISG1 - Size: 52 - Signature: - Parameters: - - Stream: 0 - Name: AAA_HSFoo - Index: 4391238 # This value forces the index column to widen - SystemValue: Undefined - CompType: Float32 - Register: 0 - Mask: 7 - ExclusiveMask: 2 - MinPrecision: Default - - Name: OSG1 - Size: 52 - Signature: - Parameters: - - Stream: 0 - Name: SV_Position - Index: 0 - SystemValue: Position - CompType: Float32 - Register: 2147483647 # This value forces the register column to widen - Mask: 15 - ExclusiveMask: 0 - MinPrecision: Default - - Name: PSG1 - Size: 402 - Signature: - Parameters: - - Stream: 0 - Name: SV_TessFactor - Index: 0 - SystemValue: FinalQuadEdgeTessfactor # The tessfactor forces the SysVal column to widen - CompType: Float32 - Register: 0 - Mask: 8 - ExclusiveMask: 8 - MinPrecision: Default - - Stream: 0 - Name: BBB - Index: 0 - SystemValue: Undefined - CompType: Float32 - Register: 0 - Mask: 7 - ExclusiveMask: 0 - MinPrecision: Default - - Stream: 0 - Name: SV_TessFactor - Index: 1 - SystemValue: FinalQuadEdgeTessfactor - CompType: Float32 - Register: 1 - Mask: 8 - ExclusiveMask: 8 - MinPrecision: Default - - Stream: 0 - Name: BBB - Index: 1 - SystemValue: Undefined - CompType: Float32 - Register: 1 - Mask: 7 - ExclusiveMask: 0 - MinPrecision: Default - - Stream: 0 - Name: SV_TessFactor - Index: 2 - SystemValue: FinalQuadEdgeTessfactor - CompType: Float32 - Register: 2 - Mask: 8 - ExclusiveMask: 8 - MinPrecision: Default - - Stream: 0 - Name: BBB - Index: 2 - SystemValue: Undefined - CompType: Float32 - Register: 2 - Mask: 7 - ExclusiveMask: 0 - MinPrecision: Default - - Stream: 0 - Name: SV_TessFactor - Index: 3 - SystemValue: FinalQuadEdgeTessfactor - CompType: Float32 - Register: 3 - Mask: 8 - ExclusiveMask: 8 - MinPrecision: Default - - Stream: 0 - Name: SV_InsideTessFactor - Index: 0 - SystemValue: FinalQuadInsideTessfactor - CompType: Float32 - Register: 4 - Mask: 8 - ExclusiveMask: 0 - MinPrecision: Default - - Stream: 0 - Name: SV_InsideTessFactor - Index: 1 - SystemValue: FinalQuadInsideTessfactor - CompType: Float32 - Register: 5 - Mask: 8 - ExclusiveMask: 0 - MinPrecision: Default - - Stream: 0 - Name: AVeryLongStringThatWillForceWidening # This value forces name column to widen - Index: 0 - SystemValue: Undefined - CompType: Float32 - Register: 6 - Mask: 15 - ExclusiveMask: 4 - MinPrecision: Default -... - -# CHECK: ; Input signature: -# CHECK-NEXT: ; -# CHECK-NEXT: ; Name Index Mask Register SysValue Format Used -# CHECK-NEXT: ; ------------------------ ------- ----- -------- ---------- ------- ----- -# CHECK-NEXT: ; AAA_HSFoo 4391238 xyz 0 Undefined Float32 y - -# CHECK: ; Output signature: -# CHECK-NEXT: ; -# CHECK-NEXT: ; Name Index Mask Register SysValue Format Used -# CHECK-NEXT: ; ------------------------ ----- ----- ---------- ---------- ------- ----- -# CHECK-NEXT: ; SV_Position 0 xyzw 2147483647 Position Float32 - -# CHECK: ; Patch Constant signature: -# CHECK-NEXT: ; -# CHECK-NEXT: ; Name Index Mask Register SysValue Format Used -# CHECK-NEXT: ; ------------------------------------ ----- ----- -------- ------------------------- ------- ----- -# CHECK-NEXT: ; SV_TessFactor 0 w 0 FinalQuadEdgeTessfactor Float32 w -# CHECK-NEXT: ; BBB 0 xyz 0 Undefined Float32 -# CHECK-NEXT: ; SV_TessFactor 1 w 1 FinalQuadEdgeTessfactor Float32 w -# CHECK-NEXT: ; BBB 1 xyz 1 Undefined Float32 -# CHECK-NEXT: ; SV_TessFactor 2 w 2 FinalQuadEdgeTessfactor Float32 w -# CHECK-NEXT: ; BBB 2 xyz 2 Undefined Float32 -# CHECK-NEXT: ; SV_TessFactor 3 w 3 FinalQuadEdgeTessfactor Float32 w -# CHECK-NEXT: ; SV_InsideTessFactor 0 w 4 FinalQuadInsideTessfactor Float32 -# CHECK-NEXT: ; SV_InsideTessFactor 1 w 5 FinalQuadInsideTessfactor Float32 -# CHECK-NEXT: ; AVeryLongStringThatWillForceWidening 0 xyzw 6 Undefined Float32 z diff --git a/llvm/tools/llvm-objdump/DXContainerDump.cpp b/llvm/tools/llvm-objdump/DXContainerDump.cpp index 963ff54d4e411..2fb073473de53 100644 --- a/llvm/tools/llvm-objdump/DXContainerDump.cpp +++ b/llvm/tools/llvm-objdump/DXContainerDump.cpp @@ -12,141 +12,16 @@ //===----------------------------------------------------------------------===// #include "llvm-objdump.h" -#include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/DXContainer.h" -#include "llvm/Support/ScopedPrinter.h" using namespace llvm; -using namespace llvm::object; - -static llvm::SmallString<4> maskToString(uint8_t Mask) { - llvm::SmallString<4> Result(" "); - if (Mask & 1) - Result[0] = 'x'; - if (Mask & 2) - Result[1] = 'y'; - if (Mask & 4) - Result[2] = 'z'; - if (Mask & 8) - Result[3] = 'w'; - return Result; -} - -static void printColumnHeader(raw_ostream &OS, size_t Length) { - for (size_t I = 0; I < Length; ++I) - OS << "-"; -} - -static void printColumnHeaders(raw_ostream &OS, ArrayRef<size_t> Lengths) { - for (auto L : Lengths) { - printColumnHeader(OS, L); - OS << " "; - } - OS << "\n"; -} - -static size_t digitsForNumber(size_t N) { - return static_cast<size_t>(log10(static_cast<double>(N))) + 1; -} namespace { class DXContainerDumper : public objdump::Dumper { - const DXContainerObjectFile &Obj; - public: - DXContainerDumper(const DXContainerObjectFile &O) - : objdump::Dumper(O), Obj(O) {} - - void printPrivateHeaders() override; - void printSignature(const DirectX::Signature &S); + DXContainerDumper(const object::DXContainerObjectFile &Obj) + : objdump::Dumper(Obj) {} }; - -void DXContainerDumper::printSignature(const DirectX::Signature &S) { - // DXC prints a table like this as part of the shader disassembly: - //; Name Index Mask Register SysValue Format Used - //; -------------------- ----- ------ -------- -------- ------- ------ - //; NORMAL 0 xyz 0 NONE float xyz - //; TEXCOORD 0 xy 1 NONE float xy - - // DXC's implementation doesn't scale columns entirely completely for the - // provided input, so this implementation is a bit more complicated in - // formatting logic to scale with the size of the printed text. - - // DXC gives names 21 characters for some unknown reason, I arbitrarily chose - // to start at 24 so that we're not going shorter but are using a round - // number. - size_t LongestName = 24; - size_t LongestSV = 10; - size_t LongestIndex = strlen("Index"); - size_t LongestRegister = strlen("Register"); - size_t LongestFormat = strlen("Format"); - const size_t MaskWidth = 5; - // Compute the column widths. Skip calculating the "Mask" and "Used" columns - // since they both have widths of 4. - for (auto El : S) { - LongestName = std::max(LongestName, S.getName(El.NameOffset).size()); - LongestSV = std::max( - LongestSV, - enumToStringRef(El.SystemValue, dxbc::getD3DSystemValues()).size()); - LongestIndex = std::max(LongestIndex, digitsForNumber(El.Index)); - LongestRegister = std::max(LongestRegister, digitsForNumber(El.Register)); - LongestFormat = std::max( - LongestFormat, - enumToStringRef(El.CompType, dxbc::getSigComponentTypes()).size()); - } - - // Print Column headers. - OS << "; "; - OS << left_justify("Name", LongestName) << " "; - OS << right_justify("Index", LongestIndex) << " "; - OS << right_justify("Mask", MaskWidth) << " "; - OS << right_justify("Register", LongestRegister) << " "; - OS << right_justify("SysValue", LongestSV) << " "; - OS << right_justify("Format", LongestFormat) << " "; - OS << right_justify("Used", MaskWidth) << "\n"; - OS << "; "; - printColumnHeaders(OS, {LongestName, LongestIndex, MaskWidth, LongestRegister, - LongestSV, LongestFormat, MaskWidth}); - - for (auto El : S) { - OS << "; " << left_justify(S.getName(El.NameOffset), LongestName) << " "; - OS << right_justify(std::to_string(El.Index), LongestIndex) << " "; - OS << right_justify(maskToString(El.Mask), MaskWidth) << " "; - OS << right_justify(std::to_string(El.Register), LongestRegister) << " "; - OS << right_justify( - enumToStringRef(El.SystemValue, dxbc::getD3DSystemValues()), - LongestSV) - << " "; - OS << right_justify( - enumToStringRef(El.CompType, dxbc::getSigComponentTypes()), - LongestFormat) - << " "; - OS << right_justify(maskToString(El.ExclusiveMask), MaskWidth) << "\n"; - } -} - -void DXContainerDumper::printPrivateHeaders() { - const DXContainer &C = - cast<object::DXContainerObjectFile>(Obj).getDXContainer(); - - if (!C.getInputSignature().isEmpty()) { - OS << "; Input signature:\n;\n"; - printSignature(C.getInputSignature()); - OS << ";\n"; - } - - if (!C.getOutputSignature().isEmpty()) { - OS << "; Output signature:\n;\n"; - printSignature(C.getOutputSignature()); - OS << ";\n"; - } - - if (!C.getPatchConstantSignature().isEmpty()) { - OS << "; Patch Constant signature:\n;\n"; - printSignature(C.getPatchConstantSignature()); - OS << ";\n"; - } -} } // namespace std::unique_ptr<objdump::Dumper> llvm::objdump::createDXContainerDumper( _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits