aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/CodeGen.cpp
AgeCommit message (Collapse)AuthorFilesLines
2012-06-20Remove the RenderMachineFunction HTML output pass.Jakob Stoklund Olesen1-1/+0
I don't think anyone has been using this functionality for a while, and it is getting in the way of refactoring now. llvm-svn: 158876
2012-06-08Reintroduce VirtRegRewriter.Jakob Stoklund Olesen1-0/+1
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
2012-05-30Add an insertPass API to TargetPassConfig. <rdar://problem/11498613>Bob Wilson1-0/+1
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
2012-02-08Codegen pass definition cleanup. No functionality.Andrew Trick1-1/+11
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
2012-02-08Move pass configuration out of pass constructors: BranchFolderPassAndrew Trick1-0/+1
llvm-svn: 150095
2012-02-04Make TargetPassConfig an ImmutablePass so CodeGenPasses can query optionsAndrew Trick1-0/+1
llvm-svn: 149752
2012-01-17Renamed MachineScheduler to ScheduleTopDownLive.Andrew Trick1-1/+1
Responding to code review. llvm-svn: 148290
2012-01-13Added the MachineSchedulerPass skeleton.Andrew Trick1-0/+1
llvm-svn: 148105
2011-12-06Kill off the LoopSplitter. It's not being used or maintained.Lang Hames1-1/+0
llvm-svn: 145897
2011-11-13Prune more RALinScan. RALinScan was also here!NAKAMURA Takumi1-1/+0
llvm-svn: 144487
2011-11-02Begin collecting some of the statistics for block placement discussed onChandler Carruth1-0/+1
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
2011-10-21Implement a block placement pass based on the branch probability andChandler Carruth1-0/+1
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
2011-07-25Rename BlockFrequency to BlockFrequencyInfo and MachineBlockFrequency toJakub Staszak1-0/+1
MachineBlockFrequencyInfo. llvm-svn: 135937
2011-06-27Remove the experimental (and unused) pre-ra splitting pass. Greedy regalloc ↵Evan Cheng1-1/+0
can split live ranges. llvm-svn: 133962
2011-06-26There is only one register coalescer. Merge it into the base class andRafael Espindola1-2/+1
remove the analysis group. llvm-svn: 133899
2010-11-30Stub out a new LiveDebugVariables pass.Jakob Stoklund Olesen1-0/+1
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
2010-10-19Get rid of static constructors for pass registration. Instead, every pass ↵Owen Anderson1-0/+1
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
2010-10-07Add initialization routines for CodeGen.Owen Anderson1-0/+59
llvm-svn: 115949