- Feb 14, 2011
-
-
Cameron Zwarich authored
llvm-svn: 125477
-
- Jan 09, 2011
-
-
Cameron Zwarich authored
llvm-svn: 123115
-
Cameron Zwarich authored
llvm-svn: 123114
-
- Jan 08, 2011
-
-
Cameron Zwarich authored
llvm-svn: 123093
-
- Jan 04, 2011
-
-
Cameron Zwarich authored
makes getLeader() nonrecursive. llvm-svn: 122811
-
Cameron Zwarich authored
spent in StrongPHIElimination on 403.gcc. llvm-svn: 122803
-
- Dec 30, 2010
-
-
Cameron Zwarich authored
with 2-address instructions, for about a 3.5% speedup of StrongPHIElimination on 403.gcc. llvm-svn: 122635
-
- Dec 29, 2010
-
-
Cameron Zwarich authored
process those instructions that define phi sources. This is a 47% speedup of StrongPHIElimination compile time on 403.gcc. llvm-svn: 122627
-
Cameron Zwarich authored
llvm-svn: 122617
-
Cameron Zwarich authored
it relies on assumptions that may not be true in the future. llvm-svn: 122608
-
- Dec 28, 2010
-
-
Cameron Zwarich authored
we are only interested in the defs when discovering interferences. This is a 28% speedup running StrongPHIElimination on 403.gcc. llvm-svn: 122596
-
- Dec 27, 2010
-
-
Cameron Zwarich authored
llvm-svn: 122586
-
Cameron Zwarich authored
when running without the verifier, and I have not yet checked them to see if the new results are still correct. There are more verifier failures, but they all seem to be additional occurrences of verifier failures that occur with the existing PHIElimination pass. There are a few obvious issues with the code: 1) It doesn't properly update the register equivalence classes during copy insertion, and instead recomputes them before merging live intervals and renaming registers. I wanted to keep this first patch simple for debugging purposes, but it shouldn't be very hard to do this. 2) It doesn't mix the renaming and live interval merging with the copy insertion process, which leads to a lot of virtual register churn. Virtual registers and live intervals are created, only to later be merged into others. The code should be smarter and only create a new virtual register if there is no existing register in the same congruence class. 3) In one place the code uses a DenseMap per basic block, which is unnecessary heap allocation. There should be an inline storage version of DenseMap. I did a quick compile-time test of running llc on 403.gcc with and without StrongPHIElimination. It is slightly slower with StrongPHIElimination, because the small decrease in the coalescer runtime can't beat the increase in phi elimination runtime. Perhaps fixing the above performance issues will narrow the gap. I also haven't yet run any tests of the quality of the generated code. llvm-svn: 122582
-
- Dec 24, 2010
-
-
Cameron Zwarich authored
llvm-svn: 122537
-
- Dec 21, 2010
-
-
Cameron Zwarich authored
of the problems with my last attempt were in the updating of LiveIntervals rather than the coalescing itself. Therefore, I decided to get that right first by essentially reimplementing the existing PHIElimination using LiveIntervals. It works correctly, with only a few tests failing (which may not be legitimate failures) and no new verifier failures (at least as far as I can tell, I didn't count the number per file). llvm-svn: 122321
-
- Dec 05, 2010
-
-
Cameron Zwarich authored
StrongPHIElimination. llvm-svn: 120961
-
- Dec 03, 2010
-
-
Jakob Stoklund Olesen authored
The StrongPHIElimination pass did not work, and nobody has worked on it for two years. A rewrite is underway, so I am leaving this shell pass instead of deleting it completely. llvm-svn: 120830
-
- Oct 19, 2010
-
-
Owen Anderson authored
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
-
- Oct 12, 2010
-
-
Owen Anderson authored
perform initialization without static constructors AND without explicit initialization by the client. For the moment, passes are required to initialize both their (potential) dependencies and any passes they preserve. I hope to be able to relax the latter requirement in the future. llvm-svn: 116334
-
- Oct 08, 2010
-
-
Owen Anderson authored
llvm-svn: 115996
-
- Aug 23, 2010
-
-
Owen Anderson authored
Now that PassInfo and Pass::ID have been separated, move the rest of the passes over to the new registration API. llvm-svn: 111815
-
- Aug 06, 2010
-
-
Owen Anderson authored
llvm-svn: 110460
-
Owen Anderson authored
llvm-svn: 110410
-
Owen Anderson authored
ID member as the sole unique type identifier. Clean up APIs related to this change. llvm-svn: 110396
-
- Jul 11, 2010
-
-
Jakob Stoklund Olesen authored
llvm-svn: 108062
-
- Jun 26, 2010
-
-
Jakob Stoklund Olesen authored
The VNInfo.kills vector was almost unused except for all the code keeping it updated. The few places using it were easily rewritten to check for interval ends instead. The two new methods LiveInterval::killedAt and killedInRange are replacements. This brings us down to 3 independent data structures tracking kills. llvm-svn: 106905
-
- May 06, 2010
-
-
Dan Gohman authored
doesn't have to guess. llvm-svn: 103194
-
- Feb 10, 2010
-
-
Dan Gohman authored
llvm-svn: 95781
-
- Feb 09, 2010
-
-
Chris Lattner authored
into TargetOpcodes.h. #include the new TargetOpcodes.h into MachineInstr. Add new inline accessors (like isPHI()) to MachineInstr, and start using them throughout the codebase. llvm-svn: 95687
-
- Jan 05, 2010
-
-
David Greene authored
llvm-svn: 92596
-
- Dec 18, 2009
-
-
Bill Wendling authored
llvm-svn: 91635
-
Bill Wendling authored
non-landing pad basic block as the successor to a block that ends in an unconditional jump will cause block folding to remove the added block as a successor. Thus eventually removing it AND the landing pad entirely. Critical edge splitting is an optimization, so we can safely turn it off when dealing with landing pads. llvm-svn: 91634
-
- Nov 04, 2009
-
-
Lang Hames authored
This introduces a new pass, SlotIndexes, which is responsible for numbering instructions for register allocation (and other clients). SlotIndexes numbering is designed to match the existing scheme, so this patch should not cause any changes in the generated code. For consistency, and to avoid naming confusion, LiveIndex has been renamed SlotIndex. The processImplicitDefs method of the LiveIntervals analysis has been moved into its own pass so that it can be run prior to SlotIndexes. This was necessary to match the existing numbering scheme. llvm-svn: 85979
-
- Oct 25, 2009
-
-
Nick Lewycky authored
VISIBILITY_HIDDEN removal. llvm-svn: 85043
-
Nick Lewycky authored
Chris claims we should never have visibility_hidden inside any .cpp file but that's still not true even after this commit. llvm-svn: 85042
-
- Oct 03, 2009
-
-
Lang Hames authored
llvm-svn: 83255
-
Lang Hames authored
llvm-svn: 83254
-
- Sep 09, 2009
-
-
Lang Hames authored
Removed static qualifier from a few index related methods. These methods may require a LiveIntervals instance in future. llvm-svn: 81374
-
- Sep 04, 2009
-
-
Lang Hames authored
a new class, MachineInstrIndex, which hides arithmetic details from most clients. This is a step towards allowing the register allocator to update/insert code during allocation. llvm-svn: 81040
-
- Aug 23, 2009
-
-
Chris Lattner authored
llvm-svn: 79832
-