[LLVMdev] What makes register allocation expensive?
David Tweed
david.tweed at arm.com
Tue Oct 8 01:31:04 PDT 2013
Hi, so just to verify the obvious: these are both the same type of build
(Release-Asserts, or whatever) rather than an optimized 3.1 vs a 3.3 debug
build? (I know this is unlikely, but I've managed to mix-up my
configurations in the past so it is worth checking before trying more
involved options). A 20x slow-down that looks to be on everything (rather
than one component) is a strong symptom for this.
Cheers,
Dave
-----Original Message-----
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
Behalf Of Mars Saxman
Sent: 08 October 2013 03:03
To: llvmdev at cs.uiuc.edu
Subject: [LLVMdev] What makes register allocation expensive?
Compile times increased by roughly 20X after upgrading the Radian
compiler project from LLVM 3.1 to 3.3. I am curious whether this is
considered normal. If it is not, I would appreciate some help figuring
out what it is about the Radian compiler's output which is causing LLVM
to spend so much time compiling such small programs.
I recorded these times with Apple's Xcode Instruments (version 4.6.1).
The input is the most basic program in the test suite; it prints "hello,
world" and counts from 1 to 10, so it is about a dozen lines long and
refers to maybe five hundred lines of library code. All times are in
milliseconds, and the total includes both compilation and program
execution.
llvm-3.1:
2722 total
2342 llvm::ExecutionEngine::runFunctionAsMain
1144 SelectionDAGIsel::runOnMachineFunction
294 RegisterCoalescer::runOnMachineFunction
116 RAGreedy::runOnMachineFunction
llvm-3.3:
53683 total
52661 llvm::ExecutionEngine::runFunctionAsMain
16955 RAGreedy::runOnMachineFunction
15149 RegisterCoalescer::runOnMachineFunction
15072 SelectionDAGIsel::runOnMachineFunction
Both cases use createJIT with default values, so optimization is
presumably llvm::CodeGenOpt::Default.
Disabling optimization yields a more reasonable run time with llvm-3.3:
1028 total
712 llvm::ExecutionEngine::runFunctionAsMain
491 SelectionDAGISel::runOnMachineFunction
85 RAFast::runOnMachineFunction
But even llvm::CodeGenOpt::Less has become very expensive:
7633 total
7307 llvm::ExecutionEngine::runFunctionAsMain
3386 SelectionDAGISel::runOnMachineFunction
1311 RAGreedy::runOnMachineFunction
1157 RegisterCoalescer::runOnMachineFunction
What might have changed between LLVM 3.1 and 3.3 which would cause such
a dramatic change in compile times?
Thank you for any suggestions of places I should begin to look.
_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list