Author: David Blaikie Date: 2022-08-19T04:00:21Z New Revision: d4e0fe62b1aa090527c0cc289cdf3eef0370f064
URL: https://github.com/llvm/llvm-project/commit/d4e0fe62b1aa090527c0cc289cdf3eef0370f064 DIFF: https://github.com/llvm/llvm-project/commit/d4e0fe62b1aa090527c0cc289cdf3eef0370f064.diff LOG: Simplify RAV isSameMethod with constexpr if Owing to the large number of instantiations of this function, this small change has a small but meaningful difference on the total size of (especially a debug) build of clang at -O0: ``` FILE SIZE VM SIZE -------------- -------------- +0.9% +96.9Ki +0.9% +96.9Ki .data.rel.ro +0.7% +96.7Ki +0.7% +96.7Ki .rela.dyn +0.0% +18.3Ki +0.0% +18.3Ki .rodata +0.0% +324 [ = ] 0 [2 Others] -0.2% -392 -0.2% -392 .gnu.version -0.0% -441 [ = ] 0 .debug_abbrev -0.1% -980 -0.1% -980 .gnu.hash -0.2% -1.53Ki -0.2% -1.53Ki .hash -0.2% -4.59Ki -0.2% -4.59Ki .dynsym -0.1% -10.5Ki [ = ] 0 .debug_rnglists -0.6% -59.0Ki -0.6% -59.0Ki .dynstr -0.2% -191Ki [ = ] 0 .debug_str_offsets -3.0% -233Ki -3.0% -233Ki .eh_frame_hdr -0.7% -244Ki [ = ] 0 .debug_addr -2.9% -699Ki [ = ] 0 .symtab -0.6% -884Ki [ = ] 0 .debug_line -3.0% -932Ki -3.0% -932Ki .eh_frame -1.0% -1.48Mi -1.0% -1.48Mi .text -0.6% -2.75Mi [ = ] 0 .debug_info -7.3% -8.61Mi [ = ] 0 .strtab -7.3% -17.2Mi [ = ] 0 .debug_str -2.4% -33.0Mi -0.9% -2.47Mi TOTAL ``` If anyone's got other ideas for how to reduce this further - it's not especially important, I just came across it while investigating a debug info size regression, but thought it was interesting enough to poke around at. Added: Modified: clang/include/clang/AST/RecursiveASTVisitor.h Removed: ################################################################################ diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index 6c6d5402d5d12..91baad51b26ea 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -69,30 +69,16 @@ template <typename T, typename U, typename R, typename... P> struct has_same_member_pointer_type<R (T::*)(P...), R (U::*)(P...)> : std::true_type {}; -template <bool has_same_type> struct is_same_method_impl { - template <typename FirstMethodPtrTy, typename SecondMethodPtrTy> - static bool isSameMethod(FirstMethodPtrTy FirstMethodPtr, - SecondMethodPtrTy SecondMethodPtr) { - return false; - } -}; - -template <> struct is_same_method_impl<true> { - template <typename FirstMethodPtrTy, typename SecondMethodPtrTy> - static bool isSameMethod(FirstMethodPtrTy FirstMethodPtr, - SecondMethodPtrTy SecondMethodPtr) { - return FirstMethodPtr == SecondMethodPtr; - } -}; - /// Returns true if and only if \p FirstMethodPtr and \p SecondMethodPtr /// are pointers to the same non-static member function. template <typename FirstMethodPtrTy, typename SecondMethodPtrTy> -bool isSameMethod(FirstMethodPtrTy FirstMethodPtr, - SecondMethodPtrTy SecondMethodPtr) { - return is_same_method_impl<has_same_member_pointer_type< - FirstMethodPtrTy, - SecondMethodPtrTy>::value>::isSameMethod(FirstMethodPtr, SecondMethodPtr); +LLVM_ATTRIBUTE_ALWAYS_INLINE LLVM_ATTRIBUTE_NODEBUG auto +isSameMethod(FirstMethodPtrTy FirstMethodPtr, SecondMethodPtrTy SecondMethodPtr) + -> bool { + if constexpr (has_same_member_pointer_type<FirstMethodPtrTy, + SecondMethodPtrTy>::value) + return FirstMethodPtr == SecondMethodPtr; + return false; } } // end namespace detail _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits