From 1feb00a28c9fdab162da08a15fcc9d088a36c352 Mon Sep 17 00:00:00 2001 From: Arthur Eubanks Date: Wed, 10 May 2023 13:13:58 -0700 Subject: [X86] Introduce a large data threshold for the medium code model Currently clang's medium code model treats all data as large, putting them in a large data section and using more expensive instruction sequences to access them. Following gcc's -mlarge-data-threshold, which allows putting data under a certain size in a normal data section as opposed to a large data section. This allows using cheaper code sequences to access some portion of data in the binary (which will be implemented in LLVM in a future patch). And under the medium codel mode, only put data above the large data threshold into large data sections, not all data. Reviewed By: MaskRay, rnk Differential Revision: https://reviews.llvm.org/D149288 --- llvm/lib/CodeGen/CommandFlags.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'llvm/lib/CodeGen/CommandFlags.cpp') diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp index 59bd6dad3b6f..1eba979f83db 100644 --- a/llvm/lib/CodeGen/CommandFlags.cpp +++ b/llvm/lib/CodeGen/CommandFlags.cpp @@ -58,6 +58,7 @@ CGLIST(std::string, MAttrs) CGOPT_EXP(Reloc::Model, RelocModel) CGOPT(ThreadModel::Model, ThreadModel) CGOPT_EXP(CodeModel::Model, CodeModel) +CGOPT_EXP(uint64_t, LargeDataThreshold) CGOPT(ExceptionHandling, ExceptionModel) CGOPT_EXP(CodeGenFileType, FileType) CGOPT(FramePointerKind, FramePointerUsage) @@ -162,6 +163,12 @@ codegen::RegisterCodeGenFlags::RegisterCodeGenFlags() { clEnumValN(CodeModel::Large, "large", "Large code model"))); CGBINDOPT(CodeModel); + static cl::opt LargeDataThreshold( + "large-data-threshold", + cl::desc("Choose large data threshold for x86_64 medium code model"), + cl::init(0)); + CGBINDOPT(LargeDataThreshold); + static cl::opt ExceptionModel( "exception-model", cl::desc("exception model"), cl::init(ExceptionHandling::None), -- cgit v1.2.3