https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/226407
Keep createDataLayout around but mark it as deprecated. Eventually the ABIName field will move out of MCTargetOptions, which can change the datalayout. Co-authored-by: Claude (Claude-Opus-4.8) <[email protected]> >From fb1b13ef31447492f73d8c43c48db5a668e706c9 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Wed, 19 Aug 2026 01:18:16 +0200 Subject: [PATCH] TargetMachine: Remove DataLayout field Keep createDataLayout around but mark it as deprecated. Eventually the ABIName field will move out of MCTargetOptions, which can change the datalayout. Co-authored-by: Claude (Claude-Opus-4.8) <[email protected]> --- llvm/include/llvm/Target/TargetMachine.h | 46 +++---------------- llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp | 3 +- llvm/lib/CodeGen/MachineFunction.cpp | 10 ---- llvm/lib/Target/TargetMachine.cpp | 18 +++++--- 4 files changed, 18 insertions(+), 59 deletions(-) diff --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h index 7c52c72cc400e5..45754ebaa19d9c 100644 --- a/llvm/include/llvm/Target/TargetMachine.h +++ b/llvm/include/llvm/Target/TargetMachine.h @@ -83,21 +83,12 @@ struct MachineFunctionInfo; /// class LLVM_ABI TargetMachine { protected: // Can only create subclasses. - TargetMachine(const Target &T, StringRef DataLayoutString, - const Triple &TargetTriple, StringRef CPU, StringRef FS, - const TargetOptions &Options); + TargetMachine(const Target &T, const Triple &TargetTriple, StringRef CPU, + StringRef FS, const TargetOptions &Options); /// The Target that this machine was created for. const Target &TheTarget; - /// DataLayout for the target: keep ABI type size and alignment. - /// - /// The DataLayout is created based on the string representation provided - /// during construction. It is kept here only to avoid reparsing the string - /// but should not really be used during compilation, because it has an - /// internal cache that is context specific. - const DataLayout DL; - /// Triple string, CPU name, and target feature strings the TargetMachine /// instance is created with. Triple TargetTriple; @@ -215,35 +206,10 @@ class LLVM_ABI TargetMachine { } /// Create a DataLayout. - const DataLayout createDataLayout() const { return DL; } - - /// Test if a DataLayout if compatible with the CodeGen for this target. - /// - /// The LLVM Module owns a DataLayout that is used for the target independent - /// optimizations and code generation. This hook provides a target specific - /// check on the validity of this DataLayout. - bool isCompatibleDataLayout(const DataLayout &Candidate) const { - return DL == Candidate; - } - - /// Get the pointer size for this target. - /// - /// This is the only time the DataLayout in the TargetMachine is used. - unsigned getPointerSize(unsigned AS) const { - return DL.getPointerSize(AS); - } - - unsigned getPointerSizeInBits(unsigned AS) const { - return DL.getPointerSizeInBits(AS); - } - - unsigned getProgramPointerSize() const { - return DL.getPointerSize(DL.getProgramAddressSpace()); - } - - unsigned getAllocaPointerSize() const { - return DL.getPointerSize(DL.getAllocaAddrSpace()); - } + LLVM_DEPRECATED("Use the Module's DataLayout, or compute one with " + "Triple::computeDataLayout", + "") + DataLayout createDataLayout() const; /// Return target specific asm information. const MCAsmInfo &getMCAsmInfo() const { return *AsmInfo; } diff --git a/llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp b/llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp index 0f6b627935e3bd..f0d9f7be794f60 100644 --- a/llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp +++ b/llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp @@ -94,8 +94,7 @@ CodeGenTargetMachineImpl::CodeGenTargetMachineImpl( const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOptLevel OL) - : TargetMachine(T, TT.computeDataLayout(Options.MCOptions.getABIName()), TT, - CPU, FS, Options) { + : TargetMachine(T, TT, CPU, FS, Options) { this->RM = RM; this->CMModel = CM; this->OptLevel = OL; diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp index 282cce8667deb6..415786315962b1 100644 --- a/llvm/lib/CodeGen/MachineFunction.cpp +++ b/llvm/lib/CodeGen/MachineFunction.cpp @@ -63,7 +63,6 @@ #include "llvm/Support/Compiler.h" #include "llvm/Support/DOTGraphTraits.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/GraphWriter.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetMachine.h" @@ -246,15 +245,6 @@ void MachineFunction::init() { WinEHInfo = new (Allocator) WinEHFuncInfo(); } - if (!Target.isCompatibleDataLayout(getDataLayout())) { - report_fatal_error( - formatv("Can't create a MachineFunction using a Module with a " - "Target-incompatible DataLayout attached\n Target " - "DataLayout: {0}\n Module DataLayout: {1}\n", - Target.createDataLayout().getStringRepresentation(), - getDataLayout().getStringRepresentation())); - } - PSVManager = std::make_unique<PseudoSourceValueManager>(getTarget()); } diff --git a/llvm/lib/Target/TargetMachine.cpp b/llvm/lib/Target/TargetMachine.cpp index abf3afcc6969be..f203d89de6fa4d 100644 --- a/llvm/lib/Target/TargetMachine.cpp +++ b/llvm/lib/Target/TargetMachine.cpp @@ -37,16 +37,20 @@ cl::opt<bool> llvm::NoKernelInfoEndLTO( // TargetMachine Class // -TargetMachine::TargetMachine(const Target &T, StringRef DataLayoutString, - const Triple &TT, StringRef CPU, StringRef FS, - const TargetOptions &Options) - : TheTarget(T), DL(DataLayoutString), TargetTriple(TT), - TargetCPU(std::string(CPU)), TargetFS(std::string(FS)), AsmInfo(nullptr), - MRI(nullptr), MII(nullptr), STI(nullptr), RequireStructuredCFG(false), - O0WantsFastISel(false), Options(Options) {} +TargetMachine::TargetMachine(const Target &T, const Triple &TT, StringRef CPU, + StringRef FS, const TargetOptions &Options) + : TheTarget(T), TargetTriple(TT), TargetCPU(std::string(CPU)), + TargetFS(std::string(FS)), AsmInfo(nullptr), MRI(nullptr), MII(nullptr), + STI(nullptr), RequireStructuredCFG(false), O0WantsFastISel(false), + Options(Options) {} TargetMachine::~TargetMachine() = default; +DataLayout TargetMachine::createDataLayout() const { + return DataLayout( + TargetTriple.computeDataLayout(Options.MCOptions.getABIName())); +} + Expected<std::unique_ptr<MCStreamer>> TargetMachine::createMCStreamer(raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
