[llvm] [AMDGPU] Tolerate AMDGPUTargetELFStreamer without initializeTargetID (PR #226495)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 25 06:50:59 PDT 2026


================
@@ -0,0 +1,75 @@
+//===- llvm/unittest/unittests/MC/AMDGPU/TargetStreamer.cpp ---------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/MC/MCContext.h"
+#include "llvm/MC/MCRegisterInfo.h"
+#include "llvm/MC/MCStreamer.h"
+#include "llvm/MC/MCSymbol.h"
+#include "llvm/MC/TargetRegistry.h"
+#include "llvm/Support/CodeGen.h"
+#include "llvm/Support/TargetSelect.h"
+#include "llvm/Target/TargetMachine.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+static constexpr char TripleName[] = "amdgcn--amdpal";
+static constexpr char CPUName[] = "gfx1201";
+
+// Test that we can generate a data-only AMDGPU ELF directly using the MC layer,
+// without asserting due to initializeTargetID() not being called.
+TEST(AMDGPUTargetStreamer, ELFStreamerBasic) {
+  LLVMInitializeAMDGPUTargetInfo();
+  LLVMInitializeAMDGPUTargetMC();
+  LLVMInitializeAMDGPUTarget();
+
+  // Create TargetMachine.
+  std::string errMsg;
+  Triple Trpl(TripleName);
+  const Target *T = TargetRegistry::lookupTarget(Trpl, errMsg);
+  // Skip test if AMDGPU not built.
+  if (!T)
+    GTEST_SKIP();
+  std::unique_ptr<TargetMachine> TM(
+      T->createTargetMachine(Trpl, CPUName, "", {}, {}, {}, {}));
+
+  const MCSubtargetInfo &STI = TM->getMCSubtargetInfo();
+  const MCRegisterInfo &RI = TM->getMCRegisterInfo();
+  const MCAsmInfo &AI = TM->getMCAsmInfo();
+
+  MCContext Context(Trpl, AI, RI, STI);
+  std::unique_ptr<MCObjectFileInfo> ObjectFileInfo(
+      T->createMCObjectFileInfo(Context, /*PIC=*/false));
+  Context.setObjectFileInfo(ObjectFileInfo.get());
+
+  SmallString<256> OutBuffer;
+  raw_svector_ostream Outs(OutBuffer);
+
+  Expected<std::unique_ptr<MCStreamer>> StreamerOr =
+      TM->createMCStreamer(Outs, {}, CodeGenFileType::ObjectFile, Context);
+  if (Error Err = StreamerOr.takeError())
+    report_fatal_error(StringRef(toString(std::move(Err))));
----------------
arsenm wrote:

report_fatal_error is deprecated 

https://github.com/llvm/llvm-project/pull/226495


More information about the llvm-commits mailing list