Commit Graph

64 Commits

Author SHA1 Message Date
Andrew Trick 1c24605a57 This is a prototype of an experimental register allocation
framework. It's purpose is not to improve register allocation per se,
but to make it easier to develop powerful live range splitting. I call
it the basic allocator because it is as simple as a global allocator
can be but provides the building blocks for sophisticated register
allocation with live range splitting. 

A minimal implementation is provided that trivially spills whenever it
runs out of registers. I'm checking in now to get high-level design
and style feedback. I've only done minimal testing. The next step is
implementing a "greedy" allocation algorithm that does some register
reassignment and makes better splitting decisions.

llvm-svn: 117174
2010-10-22 23:09:15 +00:00
Jakob Stoklund Olesen 72911e49fa Create a new LiveRangeEdit class to keep track of the new registers created when
splitting or spillling, and to help with rematerialization.

Use LiveRangeEdit in InlineSpiller and SplitKit. This will eventually make it
possible to share remat code between InlineSpiller and SplitKit.

llvm-svn: 116543
2010-10-14 23:49:52 +00:00
Owen Anderson 80fc0762f3 Add initialization routines for CodeGen.
llvm-svn: 115949
2010-10-07 18:41:20 +00:00
Oscar Fuentes b4b12535e8 Removed a bunch of unnecessary target_link_libraries.
llvm-svn: 114999
2010-09-28 22:39:14 +00:00
Michael J. Spencer 93c9b2ea93 Revert "CMake: Get rid of LLVMLibDeps.cmake and export the libraries normally."
This reverts commit r113632

Conflicts:

	cmake/modules/AddLLVM.cmake

llvm-svn: 113819
2010-09-13 23:59:48 +00:00
Michael J. Spencer dc38d36ccb CMake: Get rid of LLVMLibDeps.cmake and export the libraries normally.
llvm-svn: 113632
2010-09-10 21:14:25 +00:00
Ted Kremenek da2eba58ed Update CMake build.
llvm-svn: 111063
2010-08-14 01:55:09 +00:00
Jim Grosbach a030fa5297 Add a local stack object block allocation pass. This is still an
experimental pass that allocates locals relative to one another before
register allocation and then assigns them to actual stack slots as a block
later in PEI. This will eventually allow targets with limited index offset
range to allocate additional base registers (not just FP and SP) to
more efficiently reference locals, as well as handle situations where
locals cannot be referenced via SP or FP at all (dynamic stack realignment
together with variable sized objects, for example). It's currently
incomplete and almost certainly buggy. Work in progress.

Disabled by default and gated via the -enable-local-stack-alloc command
line option.

rdar://8277890

llvm-svn: 111059
2010-08-14 00:15:52 +00:00
Bill Wendling 884514066e Update CMake...sorry for the breakage.
llvm-svn: 110654
2010-08-10 05:16:06 +00:00
Ted Kremenek 26177d2c24 Update CMake build.
llvm-svn: 110429
2010-08-06 04:05:21 +00:00
Jakob Stoklund Olesen 36d12c679d Beginning SplitKit - utility classes for live range splitting.
This is a work in progress. So far we have some basic loop analysis to help
determine where it is useful to split a live range around a loop.

The actual loop splitting code from Splitter.cpp is also going to move in here.

llvm-svn: 108842
2010-07-20 15:41:07 +00:00
Benjamin Kramer 58c283ee85 Update CMake build.
llvm-svn: 108700
2010-07-19 15:37:03 +00:00
Zhongxing Xu b653ce648d update CMakeLists.txt
llvm-svn: 108620
2010-07-17 12:12:42 +00:00
Dan Gohman 498e5f899d Move CallingConvLower.cpp out of the SelectionDAG directory.
llvm-svn: 107781
2010-07-07 15:15:27 +00:00
Jakob Stoklund Olesen f888911932 Begin implementation of an inline spiller.
InlineSpiller inserts loads and spills immediately instead of deferring to
VirtRegMap. This is possible now because SlotIndexes allows instructions to be
inserted and renumbered.

This is work in progress, and is mostly a copy of TrivialSpiller so far. It
works very well for functions that don't require spilling.

llvm-svn: 107227
2010-06-29 23:58:39 +00:00
Jakob Stoklund Olesen ec2e964fd6 Remove the local register allocator.
Please use the fast allocator instead.

llvm-svn: 106051
2010-06-15 21:58:33 +00:00
Ted Kremenek d52caa5244 Update CMake build.
llvm-svn: 105987
2010-06-15 04:08:14 +00:00
Jakob Stoklund Olesen 8a070a540d Add fast register allocator, enabled with -regalloc=fast.
So far this is just a clone of -regalloc=local that has been lobotomized to run
25% faster. It drops the least-recently-used calculations, and is just plain
stupid when it runs out of registers.

The plan is to make this go even faster for -O0 by taking advantage of the short
live intervals in unoptimized code. It should not be necessary to calculate
liveness when most virtual registers are killed 2-3 instructions after they are
born.

llvm-svn: 102006
2010-04-21 18:02:42 +00:00
Dan Gohman cc5e6528a5 Update CMakeLists.txt.
llvm-svn: 101976
2010-04-21 01:32:29 +00:00
David Greene 9b063df40b Ok, third time's the charm. No changes from last time except the CMake
source addition.  Apparently the buildbots were wrong about failures.

---

Add some switches helpful for debugging:

-print-before=<Pass Name>

Dump IR before running pass <Pass Name>.

-print-before-all

Dump IR before running each pass.

-print-after-all

Dump IR after running each pass.

These are helpful when tracking down a miscompilation.  It is easy to
get IR dumps and do diffs on them, etc.

To make this work well, add a new getPrinterPass API to Pass so that
each kind of pass (ModulePass, FunctionPass, etc.) can create a Pass
suitable for dumping out the kind of object the Pass works on.

llvm-svn: 100249
2010-04-02 23:17:14 +00:00
Chris Lattner db903612ee remove empty file.
llvm-svn: 100222
2010-04-02 20:26:36 +00:00
Benjamin Kramer 71bd071e2f Update CMake.
llvm-svn: 100206
2010-04-02 19:09:51 +00:00
Eric Christopher 1dd31c7814 Add file to CMakeLists.txt
llvm-svn: 97545
2010-03-02 02:49:43 +00:00
Anton Korobeynikov 1be2063afd Add missed entry to cmake build list file
llvm-svn: 96292
2010-02-15 22:55:13 +00:00
Bob Wilson 0827e040e0 Add a new pass on machine instructions to optimize away PHI cycles that
reduce down to a single value.  InstCombine already does this transformation
but DAG legalization may introduce new opportunities.  This has turned out to
be important for ARM where 64-bit values are split up during type legalization:
InstCombine is not able to remove the PHI cycles on the 64-bit values but
the separate 32-bit values can be optimized.  I measured the compile time 
impact of this (running llc on 176.gcc) and it was not significant.

llvm-svn: 95951
2010-02-12 01:30:21 +00:00
Daniel Dunbar 13ad81bd70 Update CMake.
llvm-svn: 95041
2010-02-02 01:12:20 +00:00
Benjamin Kramer f007697c56 Update CMake list.
llvm-svn: 93905
2010-01-19 20:59:04 +00:00
Ted Kremenek 1ec62347e5 Update CMake build.
llvm-svn: 93571
2010-01-15 22:59:46 +00:00
Ted Kremenek 451a965a78 Update CMake file.
llvm-svn: 93283
2010-01-13 01:02:47 +00:00
Lang Hames c73ca2baca Added CalcSpillWeights to CMakeLists.
llvm-svn: 91275
2009-12-14 07:43:25 +00:00
Douglas Gregor a3b825edd1 Fix CMake makefiles
llvm-svn: 90354
2009-12-02 22:19:31 +00:00
Jim Grosbach 51663f7165 Add MaxStackAlignment.cpp to CMake
llvm-svn: 90337
2009-12-02 19:31:07 +00:00
Bob Wilson 2d4ff12da9 Split tail duplication into a separate pass. This is needed to avoid
running tail duplication when doing branch folding for if-conversion, and
we also want to be able to run tail duplication earlier to fix some
reg alloc problems.  Move the CanFallThrough function from BranchFolding
to MachineBasicBlock so that it can be shared by TailDuplication.

llvm-svn: 89904
2009-11-26 00:32:21 +00:00
Douglas Gregor 90790c7781 Fix CMake makefiles
llvm-svn: 85994
2009-11-04 01:32:06 +00:00
David Goodwin de11f36ab7 Add aggressive anti-dependence breaker. Currently it is not the default for any target. Enable with -break-anti-dependencies=all.
llvm-svn: 85145
2009-10-26 19:32:42 +00:00
David Goodwin 8370485db9 Break anti-dependence breaking out into its own class.
llvm-svn: 85127
2009-10-26 16:59:04 +00:00
Chris Lattner 63fe7ff7d9 second half of lazy liveness removal.
llvm-svn: 83500
2009-10-07 22:49:30 +00:00
Evan Cheng 4ba30d9913 Remove simple regalloc. It has bit rotted.
llvm-svn: 82127
2009-09-17 05:48:07 +00:00
Xerxes Ranby 230c717e0b updated lib/CodeGen/CMakeLists.txt to unbreak cmake build after r82018
llvm-svn: 82038
2009-09-16 10:18:36 +00:00
Chris Lattner 3f6b57c809 fix a gone file.
llvm-svn: 79802
2009-08-23 01:11:21 +00:00
Benjamin Kramer 436bd9f770 Update CMakeLists.
llvm-svn: 79264
2009-08-17 18:47:11 +00:00
David Goodwin 6021b4dccc Post RA scheduler changes. Introduce a hazard recognizer that uses the target schedule information to accurately model the pipeline. Update the scheduler to correctly handle multi-issue targets.
llvm-svn: 78563
2009-08-10 15:55:25 +00:00
Daniel Dunbar 9a4ae0e9e6 Update CMake.
llvm-svn: 78367
2009-08-07 03:59:06 +00:00
Ted Kremenek 3ddfff98a0 Update CMake files.
llvm-svn: 78020
2009-08-03 23:44:01 +00:00
Ted Kremenek defdbdc5ca Update CMake files.
llvm-svn: 77709
2009-07-31 18:50:22 +00:00
Benjamin Kramer 218388fb8d Fix cmake build.
llvm-svn: 77649
2009-07-31 00:35:23 +00:00
Duncan Sands ef86842ca2 Fix the cmake build - patch by Xerxes Rånby.
llvm-svn: 74825
2009-07-06 14:28:32 +00:00
Douglas Gregor 6141511621 CMake build fixes, from Xerxes Ranby
llvm-svn: 74720
2009-07-02 18:53:52 +00:00
Douglas Gregor 6d94e6a5f3 Fix linking of llvm-ld and lli with CMake, from Xerxes Rånby
llvm-svn: 74285
2009-06-26 15:37:00 +00:00
Oscar Fuentes 96c9dea4a0 CMake: Updated list of files on lib/CodeGen/CMakeLists.txt.
llvm-svn: 73174
2009-06-10 22:53:59 +00:00