https://github.com/s-barannikov updated https://github.com/llvm/llvm-project/pull/102839
>From e3cdec63767738ca0e5fe640f9e01996ec1ecc22 Mon Sep 17 00:00:00 2001 From: Sergei Barannikov <baranniko...@gmail.com> Date: Mon, 12 Aug 2024 03:53:28 +0300 Subject: [PATCH] [lldb] Avoid calling DataLayout constructor accepting Module pointer (NFC) The constructor initializes `*this` with a copy of `M->getDataLayout()`, which can just be spelled as `DataLayout DL = M->getDataLayout()`. In all places where the constructor is used, Module outlives DataLayout, so store a reference to it instead of cloning. --- lldb/source/Expression/IRInterpreter.cpp | 6 +++--- .../Plugins/ExpressionParser/Clang/IRDynamicChecks.cpp | 7 +++---- lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp | 2 +- lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.h | 4 ++-- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lldb/source/Expression/IRInterpreter.cpp b/lldb/source/Expression/IRInterpreter.cpp index 5b670067b5c433..030b30f070ee35 100644 --- a/lldb/source/Expression/IRInterpreter.cpp +++ b/lldb/source/Expression/IRInterpreter.cpp @@ -96,7 +96,7 @@ class InterpreterStackFrame { typedef std::map<const Value *, lldb::addr_t> ValueMap; ValueMap m_values; - DataLayout &m_target_data; + const DataLayout &m_target_data; lldb_private::IRExecutionUnit &m_execution_unit; const BasicBlock *m_bb = nullptr; const BasicBlock *m_prev_bb = nullptr; @@ -110,7 +110,7 @@ class InterpreterStackFrame { lldb::ByteOrder m_byte_order; size_t m_addr_byte_size; - InterpreterStackFrame(DataLayout &target_data, + InterpreterStackFrame(const DataLayout &target_data, lldb_private::IRExecutionUnit &execution_unit, lldb::addr_t stack_frame_bottom, lldb::addr_t stack_frame_top) @@ -703,7 +703,7 @@ bool IRInterpreter::Interpret(llvm::Module &module, llvm::Function &function, s.c_str()); } - DataLayout data_layout(&module); + const DataLayout &data_layout = module.getDataLayout(); InterpreterStackFrame frame(data_layout, execution_unit, stack_frame_bottom, stack_frame_top); diff --git a/lldb/source/Plugins/ExpressionParser/Clang/IRDynamicChecks.cpp b/lldb/source/Plugins/ExpressionParser/Clang/IRDynamicChecks.cpp index bc0f5993aad0d6..defd72bbd93106 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/IRDynamicChecks.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/IRDynamicChecks.cpp @@ -280,10 +280,9 @@ class Instrumenter { IntegerType *GetIntptrTy() { if (!m_intptr_ty) { - llvm::DataLayout data_layout(&m_module); - - m_intptr_ty = llvm::Type::getIntNTy(m_module.getContext(), - data_layout.getPointerSizeInBits()); + m_intptr_ty = llvm::Type::getIntNTy( + m_module.getContext(), + m_module.getDataLayout().getPointerSizeInBits()); } return m_intptr_ty; diff --git a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp index cc9bd14c6194e4..34461da46dfc7b 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp @@ -1606,7 +1606,7 @@ bool IRForTarget::runOnModule(Module &llvm_module) { lldb_private::Log *log(GetLog(LLDBLog::Expressions)); m_module = &llvm_module; - m_target_data = std::make_unique<DataLayout>(m_module); + m_target_data = &m_module->getDataLayout(); m_intptr_ty = llvm::Type::getIntNTy(m_module->getContext(), m_target_data->getPointerSizeInBits()); diff --git a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.h b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.h index a924187ba04c06..45027fcd6fa492 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.h +++ b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.h @@ -331,9 +331,9 @@ class IRForTarget { lldb_private::TypeFromParser m_result_type; /// The module being processed, or NULL if that has not been determined yet. llvm::Module *m_module = nullptr; - /// The target data for the module being processed, or NULL if there is no + /// The target data for the module being processed, or nullptr if there is no /// module. - std::unique_ptr<llvm::DataLayout> m_target_data; + const llvm::DataLayout *m_target_data = nullptr; /// The DeclMap containing the Decls lldb_private::ClangExpressionDeclMap *m_decl_map; /// The address of the function CFStringCreateWithBytes, cast to the _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits