Skip to content

[NFC][DirectX] Clean-up llvm-objcopy to be consistent across implementation details#177006

Merged
inbelic merged 3 commits into
llvm:mainfrom
inbelic:inbelic/nfc-objcopy
Jan 21, 2026
Merged

[NFC][DirectX] Clean-up llvm-objcopy to be consistent across implementation details#177006
inbelic merged 3 commits into
llvm:mainfrom
inbelic:inbelic/nfc-objcopy

Conversation

@inbelic

@inbelic inbelic commented Jan 20, 2026

Copy link
Copy Markdown
Contributor

This change is to ensure the implementation of the various llvm-objcopy args are implemented with consistent patterns.

This is intended to help have a clear and consistent point of reference for new contributors to extend llvm-objcopy.

These changes are largely to propagate the review comments of #159999 back onto the changes introduced before it.

@inbelic inbelic changed the title [NFC][DirectX] Clean-up to use a consistent implemenation [NFC][DirectX] Clean-up llvm-objcopy to be consistent across implementation details Jan 20, 2026
@inbelic inbelic marked this pull request as ready for review January 20, 2026 19:52
@llvmbot

llvmbot commented Jan 20, 2026

Copy link
Copy Markdown
Member

@llvm/pr-subscribers-backend-directx

Author: Finn Plummer (inbelic)

Changes

This change is intended to ensure the implementation of the various llvm-objcopy args is implemented with consistent patterns.

This is intended to help have a clear and consistent point of reference for new contributors to extend llvm-objcopy.

These changes are largely to propagate the review comments of #159999 back onto the changes introduced before it.


Full diff: https://github.com/llvm/llvm-project/pull/177006.diff

10 Files Affected:

  • (modified) llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp (+26-25)
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.yaml ()
diff --git a/llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp b/llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp
index 95ab3d944b8f8..9557f8f8beee2 100644
--- a/llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp
+++ b/llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp
@@ -23,35 +23,37 @@ using namespace object;
 
 static Error extractPartAsObject(StringRef PartName, StringRef OutFilename,
                                  StringRef InputFilename, const Object &Obj) {
-  for (const Part &P : Obj.Parts)
-    if (P.Name == PartName) {
-      Object PartObj;
-      PartObj.Header = Obj.Header;
-      PartObj.Parts.push_back({P.Name, P.Data});
-      PartObj.recomputeHeader();
-
-      auto Write = [&OutFilename, &PartObj](raw_ostream &Out) -> Error {
-        DXContainerWriter Writer(PartObj, Out);
-        if (Error E = Writer.write())
-          return createFileError(OutFilename, std::move(E));
-        return Error::success();
-      };
-
-      return writeToOutput(OutFilename, Write);
-    }
-
-  return createFileError(InputFilename, object_error::parse_failed,
-                         "part '%s' not found", PartName.str().c_str());
+  auto *PartIter = llvm::find_if(
+      Obj.Parts, [&PartName](const Part &P) { return P.Name == PartName; });
+  if (PartIter == Obj.Parts.end())
+    return createFileError(InputFilename,
+                           std::make_error_code(std::errc::invalid_argument),
+                           "part '%s' not found", PartName.str().c_str());
+
+  Object PartObj;
+  PartObj.Header = Obj.Header;
+  PartObj.Parts.push_back({PartIter->Name, PartIter->Data});
+  PartObj.recomputeHeader();
+
+  auto Write = [&OutFilename, &PartObj](raw_ostream &Out) -> Error {
+    DXContainerWriter Writer(PartObj, Out);
+    if (Error E = Writer.write())
+      return createFileError(OutFilename, std::move(E));
+    return Error::success();
+  };
+
+  return writeToOutput(OutFilename, Write);
 }
 
 static Error dumpPartToFile(StringRef PartName, StringRef Filename,
                             StringRef InputFilename, Object &Obj) {
-  auto PartIter = llvm::find_if(
+  auto *PartIter = llvm::find_if(
       Obj.Parts, [&PartName](const Part &P) { return P.Name == PartName; });
   if (PartIter == Obj.Parts.end())
     return createFileError(Filename,
                            std::make_error_code(std::errc::invalid_argument),
                            "part '%s' not found", PartName.str().c_str());
+
   ArrayRef<uint8_t> Contents = PartIter->Data;
   // The DXContainer format is a bit odd because the part-specific headers are
   // contained inside the part data itself. For parts that contain LLVM bitcode
@@ -80,16 +82,15 @@ static Error dumpPartToFile(StringRef PartName, StringRef Filename,
 
 static Error handleArgs(const CommonConfig &Config, Object &Obj) {
   for (StringRef Flag : Config.DumpSection) {
-    auto [SecName, FileName] = Flag.split("=");
-    if (Error E = dumpPartToFile(SecName, FileName, Config.InputFilename, Obj))
+    auto [SectionName, FileName] = Flag.split("=");
+    if (Error E =
+            dumpPartToFile(SectionName, FileName, Config.InputFilename, Obj))
       return E;
   }
 
   // Extract all sections before any modifications.
   for (StringRef Flag : Config.ExtractSection) {
-    StringRef SectionName;
-    StringRef FileName;
-    std::tie(SectionName, FileName) = Flag.split('=');
+    auto [SectionName, FileName] = Flag.split('=');
     if (Error E = extractPartAsObject(SectionName, FileName,
                                       Config.InputFilename, Obj))
       return E;
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.test b/llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.test b/llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.test b/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.test b/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.test b/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.test b/llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.test b/llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.test b/llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.test b/llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.yaml

@llvmbot

llvmbot commented Jan 20, 2026

Copy link
Copy Markdown
Member

@llvm/pr-subscribers-llvm-binary-utilities

Author: Finn Plummer (inbelic)

Changes

This change is intended to ensure the implementation of the various llvm-objcopy args is implemented with consistent patterns.

This is intended to help have a clear and consistent point of reference for new contributors to extend llvm-objcopy.

These changes are largely to propagate the review comments of #159999 back onto the changes introduced before it.


Full diff: https://github.com/llvm/llvm-project/pull/177006.diff

10 Files Affected:

  • (modified) llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp (+26-25)
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.yaml ()
  • (renamed) llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.yaml ()
diff --git a/llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp b/llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp
index 95ab3d944b8f8..9557f8f8beee2 100644
--- a/llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp
+++ b/llvm/lib/ObjCopy/DXContainer/DXContainerObjcopy.cpp
@@ -23,35 +23,37 @@ using namespace object;
 
 static Error extractPartAsObject(StringRef PartName, StringRef OutFilename,
                                  StringRef InputFilename, const Object &Obj) {
-  for (const Part &P : Obj.Parts)
-    if (P.Name == PartName) {
-      Object PartObj;
-      PartObj.Header = Obj.Header;
-      PartObj.Parts.push_back({P.Name, P.Data});
-      PartObj.recomputeHeader();
-
-      auto Write = [&OutFilename, &PartObj](raw_ostream &Out) -> Error {
-        DXContainerWriter Writer(PartObj, Out);
-        if (Error E = Writer.write())
-          return createFileError(OutFilename, std::move(E));
-        return Error::success();
-      };
-
-      return writeToOutput(OutFilename, Write);
-    }
-
-  return createFileError(InputFilename, object_error::parse_failed,
-                         "part '%s' not found", PartName.str().c_str());
+  auto *PartIter = llvm::find_if(
+      Obj.Parts, [&PartName](const Part &P) { return P.Name == PartName; });
+  if (PartIter == Obj.Parts.end())
+    return createFileError(InputFilename,
+                           std::make_error_code(std::errc::invalid_argument),
+                           "part '%s' not found", PartName.str().c_str());
+
+  Object PartObj;
+  PartObj.Header = Obj.Header;
+  PartObj.Parts.push_back({PartIter->Name, PartIter->Data});
+  PartObj.recomputeHeader();
+
+  auto Write = [&OutFilename, &PartObj](raw_ostream &Out) -> Error {
+    DXContainerWriter Writer(PartObj, Out);
+    if (Error E = Writer.write())
+      return createFileError(OutFilename, std::move(E));
+    return Error::success();
+  };
+
+  return writeToOutput(OutFilename, Write);
 }
 
 static Error dumpPartToFile(StringRef PartName, StringRef Filename,
                             StringRef InputFilename, Object &Obj) {
-  auto PartIter = llvm::find_if(
+  auto *PartIter = llvm::find_if(
       Obj.Parts, [&PartName](const Part &P) { return P.Name == PartName; });
   if (PartIter == Obj.Parts.end())
     return createFileError(Filename,
                            std::make_error_code(std::errc::invalid_argument),
                            "part '%s' not found", PartName.str().c_str());
+
   ArrayRef<uint8_t> Contents = PartIter->Data;
   // The DXContainer format is a bit odd because the part-specific headers are
   // contained inside the part data itself. For parts that contain LLVM bitcode
@@ -80,16 +82,15 @@ static Error dumpPartToFile(StringRef PartName, StringRef Filename,
 
 static Error handleArgs(const CommonConfig &Config, Object &Obj) {
   for (StringRef Flag : Config.DumpSection) {
-    auto [SecName, FileName] = Flag.split("=");
-    if (Error E = dumpPartToFile(SecName, FileName, Config.InputFilename, Obj))
+    auto [SectionName, FileName] = Flag.split("=");
+    if (Error E =
+            dumpPartToFile(SectionName, FileName, Config.InputFilename, Obj))
       return E;
   }
 
   // Extract all sections before any modifications.
   for (StringRef Flag : Config.ExtractSection) {
-    StringRef SectionName;
-    StringRef FileName;
-    std::tie(SectionName, FileName) = Flag.split('=');
+    auto [SectionName, FileName] = Flag.split('=');
     if (Error E = extractPartAsObject(SectionName, FileName,
                                       Config.InputFilename, Obj))
       return E;
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.test b/llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/copy-basic.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.test b/llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/copy-headers.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.test b/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/extract-section-basic.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.test b/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/extract-section-errs.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.test b/llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/extract-section-headers.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.test b/llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/only-section-headers.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.test b/llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/reading-errs.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.test b/llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/remove-headers.yaml
diff --git a/llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.test b/llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.test
rename to llvm/test/tools/llvm-objcopy/DXContainer/remove-root-signature.yaml

@jh7370 jh7370 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

@inbelic inbelic merged commit 004e210 into llvm:main Jan 21, 2026
16 checks passed
@inbelic inbelic deleted the inbelic/nfc-objcopy branch February 17, 2026 19:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants