Commit Graph

179 Commits

Author SHA1 Message Date
Evan Cheng
34729256e8 When coalescing an EXTRACT_SUBREG and the dst register is a physical register,
the source register will be coalesced to the super register of the LHS. Properly
merge in the live ranges of the resulting coalesced interval that were part of
the original source interval to the live interval of the super-register.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42961 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-14 10:08:34 +00:00
Evan Cheng
52c7ff7067 Restrict EXTRACT_SUBREG coalescing to avoid negative performance impact.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42903 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-12 09:15:53 +00:00
Evan Cheng
32dfbeada7 EXTRACT_SUBREG coalescing support. The coalescer now treats EXTRACT_SUBREG like
(almost) a register copy. However, it always coalesced to the register of the
RHS (the super-register). All uses of the result of a EXTRACT_SUBREG are sub-
register uses which adds subtle complications to load folding, spiller rewrite,
etc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42899 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-12 08:50:34 +00:00
Evan Cheng
be8db245f5 Bad choice of variable name.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42821 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-10 00:11:40 +00:00
Evan Cheng
5edc57fa42 Fix an extremely stupid bug that prevented first round of coalescing (physical registers only) from happening.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42820 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-09 23:36:27 +00:00
Dan Gohman
92dfe2001e Remove isReg, isImm, and isMBB, and change all their users to use
isRegister, isImmediate, and isMachineBasicBlock, which are equivalent,
and more popular.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41958 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-14 20:33:02 +00:00
David Greene
2c17c4d8d9 Pluggable coalescers inplementation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41743 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-06 16:18:45 +00:00
Evan Cheng
f3bb2e65d1 Use pool allocator for all the VNInfo's to improve memory access locality. This reduces coalescing time on siod Mac OS X PPC by 35%. Also remove the back ptr from VNInfo to LiveInterval and other tweaks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41729 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-05 21:46:51 +00:00
Evan Cheng
343013538f More tweaks to improve compile time.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41669 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-01 02:03:17 +00:00
Evan Cheng
fadfb5b102 std::map -> DenseMap for slight compile time benefit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41650 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-31 21:23:06 +00:00
Evan Cheng
c14b144ec3 Use std::map instead of a (potentially very sparse) array to track val# defined by copy from the other live range. Minor compile time win when number of val# is large.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41640 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-31 08:04:17 +00:00
Evan Cheng
7ecb38be0a Change LiveRange so it keeps a pointer to the VNInfo rather than an index.
Changes related modules so VNInfo's are not copied. This decrease
copy coalescing time by 45% and overall compilation time by 10% on siod.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41579 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-29 20:45:00 +00:00
Evan Cheng
1a66f0a4f2 Recover most of the compile time regression due to recent live interval changes.
1. Eliminate the costly live interval "swapping".
2. Change ValueNumberInfo container from SmallVector to std::vector. The former
   performs slowly when the vector size is very large.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41536 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-28 08:28:51 +00:00
Evan Cheng
bc165e436b Fix some kill info update bugs; add hidden option -disable-rematerialization to turn off remat for debugging.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41118 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-16 07:24:22 +00:00
Evan Cheng
dc5294fd83 Fix for PR1596: AdjustCopiesBackFrom() should conservatively check if any of its sub-registers may overlap with the interval of the copy that's being coalesced.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41084 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-14 23:19:28 +00:00
Evan Cheng
430a7b0c94 Kill info update bugs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41064 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-14 01:56:58 +00:00
Evan Cheng
549f27d307 Re-implement trivial rematerialization. This allows def MIs whose live intervals that are coalesced to be rematerialized.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41060 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-13 23:45:17 +00:00
Evan Cheng
ccb36a4f1b No need to remove dead range from soon-to-be-dead live interval. Its val# may be out of whack.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41024 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-12 01:26:19 +00:00
Evan Cheng
4f8ff168de Code to maintain kill information during register coalescing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41016 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-11 00:59:19 +00:00
Chris Lattner
b31e91cb16 unbreak the build
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40976 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-09 23:55:17 +00:00
Evan Cheng
a86e347f02 Bug fix. ~1U marks the val# dead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40975 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-09 23:14:39 +00:00
Evan Cheng
8df786012d - Each val# can have multiple kills.
- Fix some minor bugs related to special markers on val# def. ~0U means
  undefined, ~1U means dead val#.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40916 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-08 03:00:28 +00:00
Evan Cheng
a8d94f1315 - LiveInterval value#'s now have 3 components: def instruction #,
kill instruction #, and source register number (iff the value# is defined by a
copy).
- Now def instruction # is set for every value#, not just for copy defined ones.
- Update some outdated code related inactive live ranges.
- Kill info not yet set. That's next patch.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40913 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-07 23:49:57 +00:00
Chris Lattner
e76fad2ceb shorten this name
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40843 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-05 18:45:33 +00:00
Evan Cheng
3b1f55ea24 simpleregistercoalescing -> regcoalescing. It's too long for me to handle.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40654 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-31 22:37:44 +00:00
Dan Gohman
c674a924d4 Don't assume that only Uses can be kills. Defs are marked as kills initially
when there are no uses. This fixes a dangling-pointer bug, where pointers to
deleted instructions were not removed from kills lists. More info here:
http://lists.cs.uiuc.edu/pipermail/llvmdev/2007-July/009749.html


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40131 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-20 23:17:34 +00:00
Evan Cheng
273288c888 Add comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40022 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-18 23:34:48 +00:00
Gabor Greif
e510b3af3a fix typos
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38453 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-09 12:00:59 +00:00
David Greene
2513330de8 Factor live variable analysis so it does not do register coalescing
simultaneously.  Move that pass to SimpleRegisterCoalescing.

This makes it easier to implement alternative register allocation and
coalescing strategies while maintaining reuse of the existing live
interval analysis.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37520 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 17:18:56 +00:00