Add a flag to the LLVMContext to disable name for Value other than GlobalValue
authorMehdi Amini <mehdi.amini@apple.com>
Thu, 10 Mar 2016 01:28:54 +0000 (01:28 +0000)
committerMehdi Amini <mehdi.amini@apple.com>
Thu, 10 Mar 2016 01:28:54 +0000 (01:28 +0000)
commit09b4a8daa354382c294e736fc9db018621376728
tree1a6cc1ee5bb32a566ed302b549c649ccde6c607c
parentaaae5f87af8945cdeac81e86429a303954473a88
Add a flag to the LLVMContext to disable name for Value other than GlobalValue

Summary:
This is intended to be a performance flag, on the same level as clang
cc1 option "--disable-free". LLVM will never initialize it by default,
it will be up to the client creating the LLVMContext to request this
behavior. Clang will do it by default in Release build (just like
--disable-free).

"opt" and "llc" can opt-in using -disable-named-value command line
option.

When performing LTO on llvm-tblgen, the initial merging of IR peaks
at 92MB without this patch, and 86MB after this patch,setNameImpl()
drops from 6.5MB to 0.5MB.
The total link time goes from ~29.5s to ~27.8s.

Compared to a compile-time flag (like the IRBuilder one), it performs
very close. I profiled on SROA and obtain these results:

 420ms with IRBuilder that preserve name
 372ms with IRBuilder that strip name
 375ms with IRBuilder that preserve name, and a runtime flag to strip

Reviewers: chandlerc, dexonsmith, bogner

Subscribers: joker.eph, llvm-commits

Differential Revision: http://reviews.llvm.org/D17946

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 263086
llvm/include/llvm/IR/LLVMContext.h
llvm/lib/AsmParser/LLParser.cpp
llvm/lib/IR/LLVMContext.cpp
llvm/lib/IR/LLVMContextImpl.h
llvm/lib/IR/Value.cpp
llvm/lib/LTO/LTOCodeGenerator.cpp
llvm/lib/LTO/ThinLTOCodeGenerator.cpp
llvm/test/Feature/strip_names.ll [new file with mode: 0644]
llvm/tools/llc/llc.cpp
llvm/tools/opt/opt.cpp