From 7c971c511796760a9de8fde6c5cfa7a14729540b Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Fri, 25 Jul 2025 11:25:55 -0700 Subject: [PATCH 1/2] Strip the full path from __FILE__ in the LDBG macro and keep only the filename --- llvm/include/llvm/Support/DebugLog.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/Support/DebugLog.h b/llvm/include/llvm/Support/DebugLog.h index 3e53944edc905..da915a31367de 100644 --- a/llvm/include/llvm/Support/DebugLog.h +++ b/llvm/include/llvm/Support/DebugLog.h @@ -29,7 +29,15 @@ namespace llvm { #define DEBUGLOG_WITH_STREAM_AND_TYPE(STREAM, TYPE) \ for (bool _c = (::llvm::DebugFlag && ::llvm::isCurrentDebugType(TYPE)); _c; \ _c = false) \ - ::llvm::impl::LogWithNewline(TYPE, __FILE__, __LINE__, (STREAM)) + ::llvm::impl::LogWithNewline( \ + TYPE, \ + [] { \ + /* Force constexpr eval */ \ + constexpr const char *filename = \ + ::llvm::impl::LogWithNewline::getFileName(__FILE__); \ + return filename; \ + }(), \ + __LINE__, (STREAM)) namespace impl { class LogWithNewline { @@ -51,6 +59,16 @@ class LogWithNewline { LogWithNewline(const LogWithNewline &) = delete; LogWithNewline &operator=(const LogWithNewline &) = delete; LogWithNewline &operator=(LogWithNewline &&) = delete; + static constexpr const char *getFileName(const char *path) { + // Remove the path prefix from the file name. + const char *filename = path; + for (const char *p = path; *p != '\0'; ++p) { + if (*p == '/' || *p == '\\') { + filename = p + 1; + } + } + return filename; + } private: raw_ostream &os; From 2695936b2a451f0fc906c4a1ca11633c28cbabc5 Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Fri, 25 Jul 2025 12:22:39 -0700 Subject: [PATCH 2/2] Use a CMake macro for speedup --- llvm/cmake/modules/LLVMProcessSources.cmake | 9 +++++++++ llvm/include/llvm/Support/DebugLog.h | 22 +++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/llvm/cmake/modules/LLVMProcessSources.cmake b/llvm/cmake/modules/LLVMProcessSources.cmake index 0670d60bf2afd..a7f9517ad767c 100644 --- a/llvm/cmake/modules/LLVMProcessSources.cmake +++ b/llvm/cmake/modules/LLVMProcessSources.cmake @@ -58,6 +58,15 @@ function(llvm_process_sources OUT_VAR) set(sources ${ARG_UNPARSED_ARGUMENTS}) llvm_check_source_file_list(${sources}) + foreach(fn ${sources}) + get_filename_component(suf ${fn} EXT) + if("${suf}" STREQUAL ".cpp" OR "${suf}" STREQUAL ".c") + get_filename_component(short_name ${fn} NAME) + set_source_files_properties(${fn} PROPERTIES COMPILE_DEFINITIONS "__SHORT_FILE__=\"${short_name}\"") + endif() + endforeach() + + # This adds .td and .h files to the Visual Studio solution: add_td_sources(sources) find_all_header_files(hdrs "${ARG_ADDITIONAL_HEADER_DIRS}") diff --git a/llvm/include/llvm/Support/DebugLog.h b/llvm/include/llvm/Support/DebugLog.h index da915a31367de..b1b17e3ede950 100644 --- a/llvm/include/llvm/Support/DebugLog.h +++ b/llvm/include/llvm/Support/DebugLog.h @@ -26,18 +26,17 @@ namespace llvm { // << "] " << "Bitset contains: " << Bitset << "\n"); #define LDBG() DEBUGLOG_WITH_STREAM_AND_TYPE(llvm::dbgs(), DEBUG_TYPE) +#if defined(__SHORT_FILE__) #define DEBUGLOG_WITH_STREAM_AND_TYPE(STREAM, TYPE) \ for (bool _c = (::llvm::DebugFlag && ::llvm::isCurrentDebugType(TYPE)); _c; \ _c = false) \ - ::llvm::impl::LogWithNewline( \ - TYPE, \ - [] { \ - /* Force constexpr eval */ \ - constexpr const char *filename = \ - ::llvm::impl::LogWithNewline::getFileName(__FILE__); \ - return filename; \ - }(), \ - __LINE__, (STREAM)) + ::llvm::impl::LogWithNewline(TYPE, __SHORT_FILE__, __LINE__, (STREAM)) +#else +#define DEBUGLOG_WITH_STREAM_AND_TYPE(STREAM, TYPE) \ + for (bool _c = (::llvm::DebugFlag && ::llvm::isCurrentDebugType(TYPE)); _c; \ + _c = false) \ + ::llvm::impl::LogWithNewline(TYPE, __FILE__, __LINE__, (STREAM)) +#endif namespace impl { class LogWithNewline { @@ -45,6 +44,9 @@ class LogWithNewline { LogWithNewline(const char *debug_type, const char *file, int line, raw_ostream &os) : os(os) { +#if !defined(__SHORT_FILE__) + file = ::llvm::impl::LogWithNewline::getShortFileName(file); +#endif if (debug_type) os << "[" << debug_type << "] "; os << file << ":" << line << " "; @@ -59,7 +61,7 @@ class LogWithNewline { LogWithNewline(const LogWithNewline &) = delete; LogWithNewline &operator=(const LogWithNewline &) = delete; LogWithNewline &operator=(LogWithNewline &&) = delete; - static constexpr const char *getFileName(const char *path) { + static constexpr const char *getShortFileName(const char *path) { // Remove the path prefix from the file name. const char *filename = path; for (const char *p = path; *p != '\0'; ++p) {