Kaylor, Andrew
2012-Nov-14 02:15 UTC
[LLVMdev] Using LLVM to serialize object state -- and performance
The passes run are determined by TargetMachine::adPassesToEmitMachineCode (or addPassesToEmitMC in the case of MCJIT), which is called from the JIT constructor. You can step through that to see where the passes are coming from or you can create a custom target machine instance to control it. -Andy -----Original Message----- From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Paul J. Lucas Sent: Tuesday, November 13, 2012 4:33 PM To: llvmdev at cs.uiuc.edu List Subject: Re: [LLVMdev] Using LLVM to serialize object state -- and performance I've been profiling more; see <https://dl.dropbox.com/u/46791180/perf.png>. One thing I'm a bit confused about is why I see a FunctionPassManager there. I use a FunctionPassManager at the end of LLVM IR code generation, write the IR to disk, then read it back later. Why is apparently another FunctionPassManager being used during the JIT'ing of the IR code? And how do I control what the passes are to that FunctionPassManager? The function that's being JIT'd has to executed only once so, ideally, I want to find a sweet spot between speed-of-JIT'ing and speed-of-generated-machine code. - Paul On Nov 13, 2012, at 11:27 AM, Paul J. Lucas <paul at lucasmail.org> wrote:> Switching to CodeGenOpt::None reduced the execution time from 5.74s to 0.84s. By just tweaking things randomly, changing to CodeModel::Small reduced it further to 0.22s. > > We have some old, ugly, pure C++ code that we're trying to replace (both because it's ugly and because it's slow). It's execution time is about 0.089s, so that's the time to beat. > > Hence, I'd like to reduce the 0.22s time even further to below 0.089s. Any ideas?_______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Paul J. Lucas
2012-Nov-16 04:15 UTC
[LLVMdev] Using LLVM to serialize object state -- and performance
On Nov 13, 2012, at 6:15 PM, "Kaylor, Andrew" <andrew.kaylor at intel.com> wrote:> The passes run are determined by TargetMachine::adPassesToEmitMachineCode (or addPassesToEmitMC in the case of MCJIT), which is called from the JIT constructor. You can step through that to see where the passes are coming from or you can create a custom target machine instance to control it.Assuming I were to create a TargetMachine, any small examples of controlling it I could see? On Nov 13, 2012, at 5:57 PM, Anton Korobeynikov <anton at korobeynikov.info> wrote:>> And how do I control what the passes are to that FunctionPassManager? > > You should not. There are some options though, like optimization level > inside TargetMachine / TargetPassConfigWhat relationship (if any) does the FunctionPassManager I create explicitly for LLVM IR code generation have to the FunctionPassManager created implicitly that's used during JIT native code generation? - Paul
Anton Korobeynikov
2012-Nov-16 07:26 UTC
[LLVMdev] Using LLVM to serialize object state -- and performance
> What relationship (if any) does the FunctionPassManager I create explicitly for LLVM IR code generation have to the FunctionPassManager created implicitly that's used during JIT native code generation?No relationship -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University
Maybe Matching Threads
- [LLVMdev] Using LLVM to serialize object state -- and performance
- [LLVMdev] Using LLVM to serialize object state -- and performance
- [LLVMdev] Using LLVM to serialize object state -- and performance
- [LLVMdev] PassManager vs FunctionPassManager
- target triple in 3.8