#
1224312f |
| 08-Jun-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Reintroduce VirtRegRewriter.
OK, not really. We don't want to reintroduce the old rewriter hacks.
This patch extracts virtual register rewriting as a separate pass that runs after the register allo
Reintroduce VirtRegRewriter.
OK, not really. We don't want to reintroduce the old rewriter hacks.
This patch extracts virtual register rewriting as a separate pass that runs after the register allocator. This is possible now that CodeGen/Passes.cpp can configure the full optimizing register allocator pipeline.
The rewriter pass uses register assignments in VirtRegMap to rewrite virtual registers to physical registers, and it inserts kill flags based on live intervals.
These finalization steps are the same for the optimizing register allocators: RABasic, RAGreedy, and PBQP.
llvm-svn: 158244
show more ...
|
#
33e5188c |
| 30-May-2012 |
Bob Wilson <bob.wilson@apple.com> |
Add an insertPass API to TargetPassConfig. <rdar://problem/11498613>
Besides adding the new insertPass function, this patch uses it to enhance the existing -print-machineinstrs so that the MachineI
Add an insertPass API to TargetPassConfig. <rdar://problem/11498613>
Besides adding the new insertPass function, this patch uses it to enhance the existing -print-machineinstrs so that the MachineInstrs after a specific pass can be printed.
Patch by Bin Zeng!
llvm-svn: 157655
show more ...
|
Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1 |
|
#
1fa5bcbe |
| 08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
Codegen pass definition cleanup. No functionality.
Moving toward a uniform style of pass definition to allow easier target configuration. Globally declare Pass ID. Globally declare pass initializer.
Codegen pass definition cleanup. No functionality.
Moving toward a uniform style of pass definition to allow easier target configuration. Globally declare Pass ID. Globally declare pass initializer. Use INITIALIZE_PASS consistently. Add a call to the initializer from CodeGen.cpp. Remove redundant "createPass" functions and "getPassName" methods.
While cleaning up declarations, cleaned up comments (sorry for large diff).
llvm-svn: 150100
show more ...
|
#
58648e4e |
| 08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
Move pass configuration out of pass constructors: BranchFolderPass
llvm-svn: 150095
|
#
b7551336 |
| 04-Feb-2012 |
Andrew Trick <atrick@apple.com> |
Make TargetPassConfig an ImmutablePass so CodeGenPasses can query options
llvm-svn: 149752
|
#
e1c034fe |
| 17-Jan-2012 |
Andrew Trick <atrick@apple.com> |
Renamed MachineScheduler to ScheduleTopDownLive.
Responding to code review.
llvm-svn: 148290
|
#
e77e84e4 |
| 13-Jan-2012 |
Andrew Trick <atrick@apple.com> |
Added the MachineSchedulerPass skeleton.
llvm-svn: 148105
|
#
52f24d7a |
| 06-Dec-2011 |
Lang Hames <lhames@gmail.com> |
Kill off the LoopSplitter. It's not being used or maintained.
llvm-svn: 145897
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4 |
|
#
4784df71 |
| 13-Nov-2011 |
NAKAMURA Takumi <geek4civic@gmail.com> |
Prune more RALinScan. RALinScan was also here!
llvm-svn: 144487
|
Revision tags: llvmorg-3.0.0-rc3 |
|
#
ae4e800c |
| 02-Nov-2011 |
Chandler Carruth <chandlerc@gmail.com> |
Begin collecting some of the statistics for block placement discussed on the mailing list. Suggestions for other statistics to collect would be awesome. =]
Currently these are implemented as a separ
Begin collecting some of the statistics for block placement discussed on the mailing list. Suggestions for other statistics to collect would be awesome. =]
Currently these are implemented as a separate pass guarded by a separate flag. I'm not thrilled by that, but I wanted to be able to collect the statistics for the old code placement as well as the new in order to have a point of comparison. I'm planning on folding them into the single pass if / when there is only one pass of interest.
llvm-svn: 143537
show more ...
|
Revision tags: llvmorg-3.0.0-rc2 |
|
#
10281425 |
| 21-Oct-2011 |
Chandler Carruth <chandlerc@gmail.com> |
Implement a block placement pass based on the branch probability and block frequency analyses. This differs substantially from the existing block-placement pass in LLVM:
1) It operates on the Machin
Implement a block placement pass based on the branch probability and block frequency analyses. This differs substantially from the existing block-placement pass in LLVM:
1) It operates on the Machine-IR in the CodeGen layer. This exposes much more (and more precise) information and opportunities. Also, the results are more stable due to fewer transforms ocurring after the pass runs. 2) It uses the generalized probability and frequency analyses. These can model static heuristics, code annotation derived heuristics as well as eventual profile loading. By basing the optimization on the analysis interface it can work from any (or a combination) of these inputs. 3) It uses a more aggressive algorithm, both building chains from tho bottom up to maximize benefit, and using an SCC-based walk to layout chains of blocks in a profitable ordering without O(N^2) iterations which the old pass involves.
The pass is currently gated behind a flag, and not enabled by default because it still needs to grow some important features. Most notably, it needs to support loop aligning and careful layout of loop structures much as done by hand currently in CodePlacementOpt. Once it supports these, and has sufficient testing and quality tuning, it should replace both of these passes.
Thanks to Nick Lewycky and Richard Smith for help authoring & debugging this, and to Jakob, Andy, Eric, Jim, and probably a few others I'm forgetting for reviewing and answering all my questions. Writing a backend pass is *sooo* much better now than it used to be. =D
llvm-svn: 142641
show more ...
|
Revision tags: llvmorg-3.0.0-rc1 |
|
#
875ebd5f |
| 25-Jul-2011 |
Jakub Staszak <jstaszak@apple.com> |
Rename BlockFrequency to BlockFrequencyInfo and MachineBlockFrequency to MachineBlockFrequencyInfo.
llvm-svn: 135937
|
#
b7d00313 |
| 27-Jun-2011 |
Evan Cheng <evan.cheng@apple.com> |
Remove the experimental (and unused) pre-ra splitting pass. Greedy regalloc can split live ranges.
llvm-svn: 133962
|
#
676c405a |
| 26-Jun-2011 |
Rafael Espindola <rafael.espindola@gmail.com> |
There is only one register coalescer. Merge it into the base class and remove the analysis group.
llvm-svn: 133899
|
Revision tags: llvmorg-2.9.0, llvmorg-2.9.0-rc3, llvmorg-2.9.0-rc2, llvmorg-2.9.0-rc1 |
|
#
d4900a64 |
| 30-Nov-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Stub out a new LiveDebugVariables pass.
This analysis is going to run immediately after LiveIntervals. It will stay alive during register allocation and keep track of user variables mentioned in DBG
Stub out a new LiveDebugVariables pass.
This analysis is going to run immediately after LiveIntervals. It will stay alive during register allocation and keep track of user variables mentioned in DBG_VALUE instructions.
When the register allocator is moving values between registers and the stack, it is very hard to keep track of DBG_VALUE instructions. We usually get it wrong. This analysis maintains a data structure that makes it easy to update DBG_VALUE instructions.
llvm-svn: 120385
show more ...
|
#
6c18d1aa |
| 19-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency
Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize the pass's dependencies.
Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h before parsing commandline arguments.
I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass registration/creation, please send the testcase to me directly.
llvm-svn: 116820
show more ...
|
#
80fc0762 |
| 07-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Add initialization routines for CodeGen.
llvm-svn: 115949
|