summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/Passes.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* reverting r150565. Premature push.Andrew Trick2012-02-151-6/+8
| | | | llvm-svn: 150566
* Move PostRAMachineLICM into MachineLateOptimization. It now runs after PEI!Andrew Trick2012-02-151-8/+6
| | | | llvm-svn: 150565
* Allow CodeGen (llc) command line options to work as expected.Andrew Trick2012-02-151-52/+114
| | | | | | | | | | | | | | | | | | | | | | | | The llc command line options for enabling/disabling passes are local to CodeGen/Passes.cpp. This patch associates those options with standard pass IDs so they work regardless of how the target configures the passes. A target has two ways of overriding standard passes: 1) Redefine the pass pipeline (override TargetPassConfig::add%Stage) 2) Replace or suppress individiual passes with TargetPassConfig::substitutePass. In both cases, the command line options associated with the pass override the target default. For example, say a target wants to disable machine instruction scheduling by default: - The target calls disablePass(MachineSchedulerID) but otherwise does not override any TargetPassConfig methods. - Without any llc options, no scheduler is run. - With -enable-misched, the standard machine scheduler is run and honors the -misched=... flag to select the scheduler variant, which may be used for performance evaluation or testing. Sorry overridePass is ugly. I haven't thought of a better way without replacing the cl::opt framework. I hope to do that one day... I haven't figured out why CodeGen uses char& for pass IDs. AnalysisID is much easier to use and less bug prone. I'm using it wherever I can for internal implementation. Maybe later we can change the global pass ID definitions as well. llvm-svn: 150563
* Added TargetPassConfig::disablePass/substitutePass as a general mechanism to ↵Andrew Trick2012-02-151-6/+42
| | | | | | override specific passes. llvm-svn: 150562
* Add TargetPassConfig hooks for scheduling/bundling.Andrew Trick2012-02-111-3/+41
| | | | | | | | | In case the MachineScheduling pass I'm working on doesn't work well for another target, they can completely override it. This also adds a hook immediately after the RegAlloc pass to cleanup immediately after vregs go away. We may want to fold it into the postRA hook later. llvm-svn: 150298
* comment grammarAndrew Trick2012-02-101-1/+1
| | | | llvm-svn: 150233
* RegAlloc superpass: includes phi elimination, coalescing, and scheduling.Andrew Trick2012-02-101-36/+113
| | | | | | | | | | | | | | | | Creates a configurable regalloc pipeline. Ensure specific llc options do what they say and nothing more: -reglloc=... has no effect other than selecting the allocator pass itself. This patch introduces a new umbrella flag, "-optimize-regalloc", to enable/disable the optimizing regalloc "superpass". This allows for example testing coalscing and scheduling under -O0 or vice-versa. When a CodeGen pass requires the MachineFunction to have a particular property, we need to explicitly define that property so it can be directly queried rather than naming a specific Pass. For example, to check for SSA, use MRI->isSSA, not addRequired<PHIElimination>. CodeGen transformation passes are never "required" as an analysis ProcessImplicitDefs does not require LiveVariables. We have a plan to massively simplify some of the early passes within the regalloc superpass. llvm-svn: 150226
* Improve TargetPassConfig. No intended functionality.Andrew Trick2012-02-091-98/+149
| | | | | | | Split CodeGen into stages. Distinguish between optimization and correctness. llvm-svn: 150122
* Codegen pass definition cleanup. No functionality.Andrew Trick2012-02-081-20/+20
| | | | | | | | | | | | | 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
* Move pass configuration out of pass constructors: MachineLICM.Andrew Trick2012-02-081-1/+1
| | | | llvm-svn: 150099
* Move pass configuration out of pass constructors: StackSlotColoring.Andrew Trick2012-02-081-1/+1
| | | | llvm-svn: 150097
* Move pass configuration out of pass constructors: PostRAScheduler.Andrew Trick2012-02-081-1/+1
| | | | llvm-svn: 150096
* Move pass configuration out of pass constructors: BranchFolderPassAndrew Trick2012-02-081-1/+3
| | | | llvm-svn: 150095
* Added TargetPassConfig::setOptAndrew Trick2012-02-081-1/+10
| | | | llvm-svn: 150093
* Added Pass::createPass(ID) to handle pass configuration by IDAndrew Trick2012-02-081-2/+6
| | | | llvm-svn: 150092
* Move pass configuration out of pass constructors: TailDuplicate::PreRegAllocAndrew Trick2012-02-081-2/+2
| | | | llvm-svn: 150091
* TargetPassConfig: confine the MC configuration to TargetMachine.Andrew Trick2012-02-041-74/+16
| | | | | | | | | | Passes prior to instructon selection are now split into separate configurable stages. Header dependencies are simplified. The bulk of this diff is simply removal of the silly DisableVerify flags. Sorry for the target header churn. Attempting to stabilize them. llvm-svn: 149754
* Move TargetPassConfig implementation into Passes.cppAndrew Trick2012-02-041-1/+310
| | | | llvm-svn: 149753
* Make TargetPassConfig an ImmutablePass so CodeGenPasses can query optionsAndrew Trick2012-02-041-0/+34
| | | | llvm-svn: 149752
* Delete the linear scan register allocator.Jakob Stoklund Olesen2011-11-121-5/+0
| | | | | | | | | RegAllocGreedy has been the default for six months now. Deleting RegAllocLinearScan makes it possible to also delete VirtRegRewriter and clean up the spiller code. llvm-svn: 144475
* Update comment.Jakob Stoklund Olesen2011-04-301-2/+2
| | | | llvm-svn: 130582
* Use a greedy algorithm for allocating registers.Jakob Stoklund Olesen2011-04-301-3/+3
| | | | llvm-svn: 130568
* Force the greedy register allocator to be linked alongside linear scan.Jakob Stoklund Olesen2011-04-191-0/+5
| | | | | | This means that the new register allocator can be used with 'clang -mllvm -regalloc=greedy'. llvm-svn: 129764
* Use the fast register allocator by default for -O0 builds.Jakob Stoklund Olesen2010-06-031-1/+1
| | | | | | This affects both llvm-gcc and clang. llvm-svn: 105372
* Add a -regalloc=default option that chooses a register allocator based on the -OJakob Stoklund Olesen2010-05-271-6/+20
| | | | | | | | | optimization level. This only really affects llc for now because both the llvm-gcc and clang front ends override the default register allocator. I intend to remove that code later. llvm-svn: 104904
* Uniformize the way these options are printed. Requested byDuncan Sands2010-02-181-1/+1
| | | | | | Russell Wallace. llvm-svn: 96580
* Clean up the use of static and anonymous namespaces. This turned upDan Gohman2008-05-131-8/+5
| | | | | | | several things that were neither in an anonymous namespace nor static but not intended to be global. llvm-svn: 51017
* Make several variable declarations static.Dan Gohman2008-05-061-0/+1
| | | | llvm-svn: 50696
* Remove attribution from file headers, per discussion on llvmdev.Chris Lattner2007-12-291-2/+2
| | | | llvm-svn: 45418
* *** empty log message ***Bill Wendling2006-11-161-1/+0
| | | | llvm-svn: 31789
* Work around a bug in gcc 3.3.5, reported by a userChris Lattner2006-08-031-1/+1
| | | | llvm-svn: 29489
* Final polish on machine pass registries.Jim Laskey2006-08-021-10/+25
| | | | llvm-svn: 29471
* 1. Change use of "Cache" to "Default".Jim Laskey2006-08-011-2/+2
| | | | | | | | | | | 2. Added argument to instruction scheduler creators so the creators can do special things. 3. Repaired target hazard code. 4. Misc. More to follow. llvm-svn: 29450
* Introducing plugable register allocators and instruction schedulers.Jim Laskey2006-08-011-57/+14
| | | | llvm-svn: 29434
* Working toward registration of register allocators.Jim Laskey2006-07-271-11/+47
| | | | llvm-svn: 29360
* Reduce number of exported symbolsAndrew Lenharth2006-07-201-1/+1
| | | | llvm-svn: 29220
* Alkis agrees that that iterative scan allocator isn't going to be worked onChris Lattner2005-10-241-4/+1
| | | | | | in the future, remove it. llvm-svn: 23952
* Remove trailing whitespaceMisha Brukman2005-04-211-2/+2
| | | | llvm-svn: 21420
* Changes For Bug 352Reid Spencer2004-09-011-1/+1
| | | | | | | | Move include/Config and include/Support into include/llvm/Config, include/llvm/ADT and include/llvm/Support. From here on out, all LLVM public header files must be under include/llvm/. llvm-svn: 16137
* The default has not been 'simple' for AGES!Chris Lattner2004-07-221-1/+1
| | | | llvm-svn: 15114
* Make linear scan the defaultChris Lattner2004-07-221-1/+1
| | | | llvm-svn: 15111
* Put variable name to a separate line.Alkis Evlogimenos2004-07-221-1/+2
| | | | llvm-svn: 15108
* Fit to 80 columns.Alkis Evlogimenos2004-07-221-10/+11
| | | | llvm-svn: 15105
* Add Iterative scan register allocator.Alkis Evlogimenos2004-07-211-4/+7
| | | | llvm-svn: 15068
* Linearscan is no longer experimental.Alkis Evlogimenos2004-07-211-1/+1
| | | | llvm-svn: 15067
* Fix IA64 compatibilityChris Lattner2004-07-161-1/+1
| | | | llvm-svn: 14866
* Add a spiller option to llc. A simple spiller will come soon. When we get ↵Alkis Evlogimenos2004-03-011-1/+1
| | | | | | CFG in the machine code represenation a global spiller will also be possible. Also document the linear scan register allocator but mark it as experimental for now. llvm-svn: 12062
* finegrainify namespacificationChris Lattner2003-12-281-9/+7
| | | | | | minor cleanups llvm-svn: 10619
* Merging the linear scan register allocator in trunk. It currently passes ↵Alkis Evlogimenos2003-11-201-3/+6
| | | | | | most tests under test/Programs/SingleSource/Benchmarks/Shootout so development will continue on trunk. The allocator is not enabled by default. You will need to pass -regallo=linearscan to lli or llc to use it. llvm-svn: 10103
* Put all LLVM code into the llvm namespace, as per bug 109.Brian Gaeke2003-11-111-0/+4
| | | | llvm-svn: 9903
OpenPOWER on IntegriCloud