From: Mehdi Amini Date: Fri, 11 Mar 2016 17:15:34 +0000 (+0000) Subject: Do not specialize IRBuilder to strip names in SROA X-Git-Tag: llvmorg-3.9.0-rc1~11954 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1e9c9251824e9fee549d49bf10388fa996fab10c;p=platform%2Fupstream%2Fllvm.git Do not specialize IRBuilder to strip names in SROA Summary: Following r263086, we are replacing this by a runtime check. More cleanup will follow on the IRBuilder itself, but I submitted this patch separately as SROA has a fancy "prefixInserter" class that needs extra-love. Reviewers: chandlerc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D18022 From: Mehdi Amini llvm-svn: 263256 --- diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index ffecacc..b759bb5 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -87,12 +87,13 @@ static cl::opt SROAStrictInbounds("sroa-strict-inbounds", cl::init(false), cl::Hidden); namespace { -/// \brief A custom IRBuilder inserter which prefixes all names if they are -/// preserved. -template -class IRBuilderPrefixedInserter - : public IRBuilderDefaultInserter { +/// \brief A custom IRBuilder inserter which prefixes all names, but only in +/// Assert builds. +class IRBuilderPrefixedInserter : public IRBuilderDefaultInserter { std::string Prefix; + const Twine getNameWithPrefix(const Twine &Name) const { + return Name.isTriviallyEmpty() ? Name : Prefix + Name; + } public: void SetNamePrefix(const Twine &P) { Prefix = P.str(); } @@ -100,27 +101,14 @@ public: protected: void InsertHelper(Instruction *I, const Twine &Name, BasicBlock *BB, BasicBlock::iterator InsertPt) const { - IRBuilderDefaultInserter::InsertHelper( - I, Name.isTriviallyEmpty() ? Name : Prefix + Name, BB, InsertPt); + IRBuilderDefaultInserter::InsertHelper(I, getNameWithPrefix(Name), BB, + InsertPt); } }; -// Specialization for not preserving the name is trivial. -template <> -class IRBuilderPrefixedInserter - : public IRBuilderDefaultInserter { -public: - void SetNamePrefix(const Twine &P) {} -}; - /// \brief Provide a typedef for IRBuilder that drops names in release builds. -#ifndef NDEBUG -typedef llvm::IRBuilder> - IRBuilderTy; -#else -typedef llvm::IRBuilder> - IRBuilderTy; -#endif +using IRBuilderTy = + llvm::IRBuilder; } namespace {