[PATCH] D17946: Add a flag to the LLVMContext to disable name for Value other than GlobalValue
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 9 07:24:53 PST 2016
Sent from my iPhone
> On Mar 9, 2016, at 2:05 AM, Chandler Carruth <chandlerc at gmail.com> wrote:
>
>> On Wed, Mar 9, 2016 at 10:46 AM Justin Bogner <mail at justinbogner.com> wrote:
>> Mehdi AMINI <mehdi.amini at apple.com> writes:
>> > joker.eph updated this revision to Diff 50104.
>> > joker.eph added a comment.
>> >
>> > Rename preserveNames() to preserveNonGlobalValueNames()
>>
>> preserveNonGlobalValueNames is confusing and awkward. It's much worse
>> than preserveNames. I'm not convinced preservedNames is bad, but if
>> you're concerned that it's not precise enough I'd suggest
>> 'preserveAllNames', 'preserveInconsequentialNames', or
>> 'preserveDebugNames'.
>
> 'preserveLocalNames'?
>
> We always will preserve Argument names, Global names, etc.
>
Argument like "function argument"?
They are stripped right now (see unittest)
Mehdi
>>
>> >
>> > http://reviews.llvm.org/D17946
>> >
>> > Files:
>> > include/llvm/IR/LLVMContext.h
>> > lib/AsmParser/LLParser.cpp
>> > lib/IR/LLVMContext.cpp
>> > lib/IR/LLVMContextImpl.h
>> > lib/IR/Value.cpp
>> > lib/LTO/LTOCodeGenerator.cpp
>> > test/Feature/strip_names.ll
>> > tools/llc/llc.cpp
>> > tools/opt/opt.cpp
>> >
>> > Index: tools/opt/opt.cpp
>> > ===================================================================
>> > --- tools/opt/opt.cpp
>> > +++ tools/opt/opt.cpp
>> > @@ -196,6 +196,11 @@
>> > cl::desc("Run all passes twice, re-using the same pass manager."),
>> > cl::init(false), cl::Hidden);
>> >
>> > +static cl::opt<bool> DisableNamedValue(
>> > + "disable-named-value",
>> > + cl::desc("Strip name from Value (other than GlobalValue)."),
>> > + cl::init(false), cl::Hidden);
>> > +
>> > static inline void addPass(legacy::PassManagerBase &PM, Pass *P) {
>> > // Add the pass to the pass manager...
>> > PM.add(P);
>> > @@ -345,6 +350,9 @@
>> >
>> > SMDiagnostic Err;
>> >
>> > + // Honor "-disable-named-value" command line option
>> > + Context.setPreserveNonGlobalValueNames(!DisableNamedValue);
>> > +
>> > // Load the input module...
>> > std::unique_ptr<Module> M = parseIRFile(InputFilename, Err, Context);
>> >
>> > Index: tools/llc/llc.cpp
>> > ===================================================================
>> > --- tools/llc/llc.cpp
>> > +++ tools/llc/llc.cpp
>> > @@ -103,6 +103,11 @@
>> > "manager and verify the result is the same."),
>> > cl::init(false));
>> >
>> > +static cl::opt<bool> DisableNamedValue(
>> > + "disable-named-value",
>> > + cl::desc("Strip name from Value (other than GlobalValue)."),
>> > + cl::init(false), cl::Hidden);
>> > +
>> > static int compileModule(char **, LLVMContext &);
>> >
>> > static std::unique_ptr<tool_output_file>
>> > @@ -205,6 +210,9 @@
>> >
>> > cl::ParseCommandLineOptions(argc, argv, "llvm system compiler\n");
>> >
>> > + // Honor "-disable-named-value" command line option
>> > + Context.setPreserveNonGlobalValueNames(!DisableNamedValue);
>> > +
>> > // Compile the module TimeCompilations times to give better compile time
>> > // metrics.
>> > for (unsigned I = TimeCompilations; I; --I)
>> > Index: test/Feature/strip_names.ll
>> > ===================================================================
>> > --- /dev/null
>> > +++ test/Feature/strip_names.ll
>> > @@ -0,0 +1,26 @@
>> > +; RUN: opt < %s -S | FileCheck %s
>> > +; RUN: opt < %s | opt -S -disable-named-value | FileCheck --check-prefix=NONAME %s
>> > +
>> > +
>> > +; CHECK: @GlobalValueName
>> > +; CHECK: @foo(i32 %in)
>> > +; CHECK: somelabel:
>> > +; CHECK: %GV = load i32, i32* @GlobalValueName
>> > +; CHECK: %add = add i32 %in, %GV
>> > +; CHECK: ret i32 %add
>> > +
>> > +; NONAME: @GlobalValueName
>> > +; NONAME: @foo(i32)
>> > +; NONAME-NOT: somelabel:
>> > +; NONAME: %2 = load i32, i32* @GlobalValueName
>> > +; NONAME: %3 = add i32 %0, %2
>> > +; NONAME: ret i32 %3
>> > +
>> > + at GlobalValueName = global i32 0
>> > +
>> > +define i32 @foo(i32 %in) {
>> > +somelabel:
>> > + %GV = load i32, i32* @GlobalValueName
>> > + %add = add i32 %in, %GV
>> > + ret i32 %add
>> > +}
>> > Index: lib/LTO/LTOCodeGenerator.cpp
>> > ===================================================================
>> > --- lib/LTO/LTOCodeGenerator.cpp
>> > +++ lib/LTO/LTOCodeGenerator.cpp
>> > @@ -76,6 +76,9 @@
>> > LTOCodeGenerator::LTOCodeGenerator(LLVMContext &Context)
>> > : Context(&Context), MergedModule(new Module("ld-temp.o", Context)),
>> > TheLinker(new Linker(*MergedModule)) {
>> > +#ifdef NDEBUG
>> > + Context.setPreserveNonGlobalValueNames(false);
>> > +#endif
>> > initializeLTOPasses();
>> > }
>> >
>> > Index: lib/IR/Value.cpp
>> > ===================================================================
>> > --- lib/IR/Value.cpp
>> > +++ lib/IR/Value.cpp
>> > @@ -195,6 +195,10 @@
>> > }
>> >
>> > void Value::setNameImpl(const Twine &NewName) {
>> > + // Fast-path: LLVMContext can be set to strip out non-GlobalValue names
>> > + if (!getContext().preserveNonGlobalValueNames() && !isa<GlobalValue>(this))
>> > + return;
>> > +
>> > // Fast path for common IRBuilder case of setName("") when there is no name.
>> > if (NewName.isTriviallyEmpty() && !hasName())
>> > return;
>> > Index: lib/IR/LLVMContextImpl.h
>> > ===================================================================
>> > --- lib/IR/LLVMContextImpl.h
>> > +++ lib/IR/LLVMContextImpl.h
>> > @@ -1034,6 +1034,10 @@
>> > /// clients which do use GC.
>> > DenseMap<const Function*, std::string> GCNames;
>> >
>> > + /// Flag to indicate if Value (other than GlobalValue) retains their name or
>> > + /// not.
>> > + bool PreserveNames = true;
>> > +
>> > LLVMContextImpl(LLVMContext &C);
>> > ~LLVMContextImpl();
>> >
>> > Index: lib/IR/LLVMContext.cpp
>> > ===================================================================
>> > --- lib/IR/LLVMContext.cpp
>> > +++ lib/IR/LLVMContext.cpp
>> > @@ -320,3 +320,9 @@
>> > void LLVMContext::deleteGC(const Function &Fn) {
>> > pImpl->GCNames.erase(&Fn);
>> > }
>> > +
>> > +bool LLVMContext::preserveNonGlobalValueNames() { return pImpl->PreserveNames; }
>> > +
>> > +void LLVMContext::setPreserveNonGlobalValueNames(bool Preserve) {
>> > + pImpl->PreserveNames = Preserve;
>> > +}
>> > Index: lib/AsmParser/LLParser.cpp
>> > ===================================================================
>> > --- lib/AsmParser/LLParser.cpp
>> > +++ lib/AsmParser/LLParser.cpp
>> > @@ -45,6 +45,11 @@
>> > // Prime the lexer.
>> > Lex.Lex();
>> >
>> > + if (!Context.preserveNonGlobalValueNames())
>> > + return Error(
>> > + Lex.getLoc(),
>> > + "Can read textual IR with a Context that doesn't support named Values");
>> > +
>> > return ParseTopLevelEntities() ||
>> > ValidateEndOfModule();
>> > }
>> > Index: include/llvm/IR/LLVMContext.h
>> > ===================================================================
>> > --- include/llvm/IR/LLVMContext.h
>> > +++ include/llvm/IR/LLVMContext.h
>> > @@ -103,6 +103,15 @@
>> > /// Remove the GC for a function
>> > void deleteGC(const Function &Fn);
>> >
>> > + /// Return true if the Context runtime configuration is set to preserve all
>> > + /// value name. When false, only GlobalValue names will be available in the
>> > + /// IR.
>> > + bool preserveNonGlobalValueNames();
>> > +
>> > + /// Set the Context runtime configuration to preserve all value name (true,
>> > + /// default) or only GlobalValue names (false). Clients can use this flag to
>> > + /// save memory and runtime, especially in release mode.
>> > + void setPreserveNonGlobalValueNames(bool Preserve);
>> >
>> > typedef void (*InlineAsmDiagHandlerTy)(const SMDiagnostic&, void *Context,
>> > unsigned LocCookie);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160309/c23f039e/attachment.html>
More information about the llvm-commits
mailing list