jansvoboda11 created this revision. jansvoboda11 added a reviewer: benlangmuir. Herald added a subscriber: ributzka. Herald added a project: All. jansvoboda11 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
This will make it possible to accept the spelling as `StringLiteral` in D157029 <https://reviews.llvm.org/D157029> and avoid some unnecessary allocations in a later patch. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D157035 Files: clang/lib/Frontend/CompilerInvocation.cpp Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -192,10 +192,11 @@ /// unnecessary template instantiations and just ignore it with a variadic /// argument. static void denormalizeSimpleFlag(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator, Option::OptionClass, unsigned, /*T*/...) { - Args.push_back(Spelling); + // Spelling is already allocated or a static string, no need to call SA. + Args.push_back(Spelling.getSingleStringRef().data()); } template <typename T> static constexpr bool is_uint64_t_convertible() { @@ -232,16 +233,17 @@ } static auto makeBooleanOptionDenormalizer(bool Value) { - return [Value](SmallVectorImpl<const char *> &Args, const char *Spelling, + return [Value](SmallVectorImpl<const char *> &Args, const Twine &Spelling, CompilerInvocation::StringAllocator, Option::OptionClass, unsigned, bool KeyPath) { if (KeyPath == Value) - Args.push_back(Spelling); + // Spelling is already allocated or a static string, no need to call SA. + Args.push_back(Spelling.getSingleStringRef().data()); }; } static void denormalizeStringImpl(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned, const Twine &Value) { @@ -249,7 +251,8 @@ case Option::SeparateClass: case Option::JoinedOrSeparateClass: case Option::JoinedAndSeparateClass: - Args.push_back(Spelling); + // Spelling is already allocated or a static string, no need to call SA. + Args.push_back(Spelling.getSingleStringRef().data()); Args.push_back(SA(Value)); break; case Option::JoinedClass: @@ -264,7 +267,7 @@ template <typename T> static void -denormalizeString(SmallVectorImpl<const char *> &Args, const char *Spelling, +denormalizeString(SmallVectorImpl<const char *> &Args, const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, T Value) { denormalizeStringImpl(Args, Spelling, SA, OptClass, TableIndex, Twine(Value)); @@ -309,7 +312,7 @@ } static void denormalizeSimpleEnumImpl(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, unsigned Value) { @@ -326,7 +329,7 @@ template <typename T> static void denormalizeSimpleEnum(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, T Value) { @@ -367,7 +370,7 @@ } static void denormalizeStringVector(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex,
Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -192,10 +192,11 @@ /// unnecessary template instantiations and just ignore it with a variadic /// argument. static void denormalizeSimpleFlag(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator, Option::OptionClass, unsigned, /*T*/...) { - Args.push_back(Spelling); + // Spelling is already allocated or a static string, no need to call SA. + Args.push_back(Spelling.getSingleStringRef().data()); } template <typename T> static constexpr bool is_uint64_t_convertible() { @@ -232,16 +233,17 @@ } static auto makeBooleanOptionDenormalizer(bool Value) { - return [Value](SmallVectorImpl<const char *> &Args, const char *Spelling, + return [Value](SmallVectorImpl<const char *> &Args, const Twine &Spelling, CompilerInvocation::StringAllocator, Option::OptionClass, unsigned, bool KeyPath) { if (KeyPath == Value) - Args.push_back(Spelling); + // Spelling is already allocated or a static string, no need to call SA. + Args.push_back(Spelling.getSingleStringRef().data()); }; } static void denormalizeStringImpl(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned, const Twine &Value) { @@ -249,7 +251,8 @@ case Option::SeparateClass: case Option::JoinedOrSeparateClass: case Option::JoinedAndSeparateClass: - Args.push_back(Spelling); + // Spelling is already allocated or a static string, no need to call SA. + Args.push_back(Spelling.getSingleStringRef().data()); Args.push_back(SA(Value)); break; case Option::JoinedClass: @@ -264,7 +267,7 @@ template <typename T> static void -denormalizeString(SmallVectorImpl<const char *> &Args, const char *Spelling, +denormalizeString(SmallVectorImpl<const char *> &Args, const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, T Value) { denormalizeStringImpl(Args, Spelling, SA, OptClass, TableIndex, Twine(Value)); @@ -309,7 +312,7 @@ } static void denormalizeSimpleEnumImpl(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, unsigned Value) { @@ -326,7 +329,7 @@ template <typename T> static void denormalizeSimpleEnum(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, T Value) { @@ -367,7 +370,7 @@ } static void denormalizeStringVector(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits