Bill Schmidt
2e4ae4e154
This patch addresses bug 15031.
...
The common code in the post-RA scheduler to break anti-dependencies on the
critical path contained a flaw. In the reported case, an anti-dependency
between the overlapping registers %X4 and %R4 exists:
%X29<def> = OR8 %X4, %X4
%R4<def>, %X3<def,dead,tied3> = LBZU 1, %X3<kill,tied1>
The unpatched code breaks the dependency by replacing %R4 and its uses
with %R3, the first register on the available list. However, %R3 and
%X3 overlap, so this creates two overlapping definitions on the same
instruction.
The fix is straightforward, preventing selection of a register that
overlaps any other defined register on the same instruction.
The test case is reduced from the bug report, and verifies that we no
longer produce "lbzu 3, 1(3)" when breaking this anti-dependency.
llvm-svn: 173706
2013-01-28 18:36:58 +00:00
Chandler Carruth
802d755533
Sort includes for all of the .h files under the 'lib' tree. These were
...
missed in the first pass because the script didn't yet handle include
guards.
Note that the script is now able to handle all of these headers without
manual edits. =]
llvm-svn: 169224
2012-12-04 07:12:27 +00:00
Andrew Trick
05ff4667eb
Move RegisterClassInfo.h.
...
Allow targets to access this API. It's required for RegisterPressure.
llvm-svn: 158102
2012-06-06 20:29:31 +00:00
Benjamin Kramer
5d1bca8016
CriticalAntiDepBreaker: Replace a SmallSet of regs with a much denser BitVector.
...
llvm-svn: 152999
2012-03-17 20:22:57 +00:00
Jakob Stoklund Olesen
4f5f84c7e7
Teach antidependency breakers to use RegisterClassInfo.
...
No functional change was intended.
llvm-svn: 133202
2011-06-16 21:56:21 +00:00
Devang Patel
f02a376fbc
Update DBG_VALUEs while breaking anti dependencies.
...
llvm-svn: 132487
2011-06-02 21:26:52 +00:00
Mikhail Glushenkov
52847a9bb9
Typo.
...
llvm-svn: 125232
2011-02-09 22:55:48 +00:00
Andrew Trick
4b4918788b
Fix PostRA antidependence breaker.
...
Avoid using the same register for two def operands or and earlyclobber
def and use operand. This fixes PR8986 and improves on the prior fix
for rdar://problem/8959122.
llvm-svn: 125089
2011-02-08 17:39:46 +00:00
Andrew Trick
82ae9a95a5
Fixes <rdar://problem/8612856>: During postRAsched, the antidependence
...
breaker needs to check all definitions of the antidepenent register to
avoid multiple defs of the same new register.
llvm-svn: 118032
2010-11-02 18:16:45 +00:00
Bill Wendling
51a9c0a1b3
Use std::vector instead of TargetRegisterInfo::FirstVirtualRegister. This time
...
make sure to allocate enough space in the std::vector.
llvm-svn: 108449
2010-07-15 19:58:14 +00:00
Chris Lattner
c48adb60ca
revert bill's patches in an attempt to fix the buildbot.
...
llvm-svn: 108419
2010-07-15 06:51:46 +00:00
Bill Wendling
d5b390189d
Use std::vector instead of a hard-coded array. The length of that array could
...
get *very* large, but we only need it to be the size of thenumber of pregs.
llvm-svn: 108411
2010-07-15 05:56:32 +00:00
Evan Cheng
f128bdcb55
Make post-ra scheduling, anti-dep breaking, and register scavenger (conservatively) aware of predicated instructions. This enables ARM to move if-conversion before post-ra scheduler.
...
llvm-svn: 106091
2010-06-16 07:35:02 +00:00
Dan Gohman
35bc4d46cb
Make BreakAntiDependencies' SUnits argument const, and make the Begin
...
and End arguments by-value rather than by-reference.
llvm-svn: 101830
2010-04-19 23:11:58 +00:00
Jim Grosbach
a7cef4fab5
Anti-dependency breaking needs to be careful regarding instructions with
...
multiple register definitions.
llvm-svn: 92864
2010-01-06 22:21:25 +00:00
Jim Grosbach
eb431da074
80 column and whitespace cleanup
...
llvm-svn: 92837
2010-01-06 16:48:02 +00:00
David Goodwin
80a03cc0b1
Remove some old experimental code that is no longer needed. Remove additional, speculative scheduling pass as its cost did not translate into significant performance improvement. Minor tweaks.
...
llvm-svn: 89471
2009-11-20 19:32:48 +00:00
David Goodwin
8501dbbe10
Do a scheduling pass ignoring anti-dependencies to identify candidate registers that should be renamed.
...
llvm-svn: 85939
2009-11-03 20:57:50 +00:00
David Goodwin
e30ed53c05
Make AntiDepReg.h internal.
...
llvm-svn: 85412
2009-10-28 18:29:54 +00:00
David Goodwin
e056d1077e
Allow the aggressive anti-dep breaker to process the same region multiple times. This is necessary because new anti-dependencies are exposed when "current" ones are broken.
...
llvm-svn: 85166
2009-10-26 22:31:16 +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